librecmc: Bring in packages from feed
authorRISCi_ATOM <bob@bobcall.me>
Sat, 29 Jun 2024 18:16:16 +0000 (14:16 -0400)
committerRISCi_ATOM <bob@bobcall.me>
Sat, 29 Jun 2024 18:16:16 +0000 (14:16 -0400)
Add in (most) packages that were traditionally found in
the package feed.

Pulled in from upstream *23.05 branch with the exception of avahi and
netatalk.

512 files changed:
package/admin/htop/Makefile [new file with mode: 0644]
package/lang/chicken-scheme/Makefile [new file with mode: 0644]
package/libs/avahi/Makefile
package/libs/avahi/patches/300-CVE-2023-38469.patch [new file with mode: 0644]
package/libs/avahi/patches/301-CVE-2023-38470.patch [new file with mode: 0644]
package/libs/avahi/patches/302-CVE-2023-38471.patch [new file with mode: 0644]
package/libs/avahi/patches/303-CVE-2023-38472.patch [new file with mode: 0644]
package/libs/avahi/patches/304-CVE-2023-38473.patch [new file with mode: 0644]
package/libs/confuse/Makefile [new file with mode: 0644]
package/libs/db47/Makefile [new file with mode: 0644]
package/libs/db47/patches/010-patch.4.7.25.1.patch [new file with mode: 0644]
package/libs/db47/patches/020-patch.4.7.25.2.patch [new file with mode: 0644]
package/libs/db47/patches/030-patch.4.7.25.3.patch [new file with mode: 0644]
package/libs/db47/patches/040-patch.4.7.25.4.patch [new file with mode: 0644]
package/libs/db47/patches/100-repmgr-format-security.patch [new file with mode: 0644]
package/libs/giflib/Makefile [new file with mode: 0644]
package/libs/keyutils/Makefile [new file with mode: 0644]
package/libs/keyutils/patches/010-reproducible-build.patch [new file with mode: 0644]
package/libs/keyutils/patches/020-rindex.patch [new file with mode: 0644]
package/libs/libaio/Makefile [new file with mode: 0644]
package/libs/libaio/patches/001_arches.patch [new file with mode: 0644]
package/libs/libaio/patches/002_arches_sh.patch [new file with mode: 0644]
package/libs/libaio/patches/003_arches_mips_fix_padding.patch [new file with mode: 0644]
package/libs/libaio/patches/004_arches_x32.patch [new file with mode: 0644]
package/libs/libftdi1/Makefile [new file with mode: 0644]
package/libs/libftdi1/patches/100-fix-x86_64-build.patch [new file with mode: 0644]
package/libs/libnetfilter-queue/Makefile [new file with mode: 0644]
package/libs/libnetfilter-queue/patches/0001-src-add-pkt_buff-function-for-ICMP.patch [new file with mode: 0644]
package/libs/libnetfilter-queue/patches/0002-src-fix-IPv6-header-handling.patch [new file with mode: 0644]
package/libs/libssh/Makefile [new file with mode: 0644]
package/libs/libtirpc/Makefile [new file with mode: 0644]
package/libs/libtirpc/patches/001-clang.patch [new file with mode: 0644]
package/libs/libuv/Makefile [new file with mode: 0644]
package/libs/libwebsockets/Makefile [new file with mode: 0644]
package/luci/applications/luci-app-ddns/Makefile [new file with mode: 0644]
package/luci/applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js [new file with mode: 0644]
package/luci/applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/ar/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/bg/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/bn_BD/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/ca/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/cs/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/da/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/de/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/el/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/en/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/es/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/fa/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/fi/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/fr/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/he/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/hi/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/hu/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/it/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/ja/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/ko/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/lt/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/mr/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/ms/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/nb_NO/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/nl/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/pl/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/pt/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/pt_BR/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/ro/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/ru/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/sk/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/sv/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/templates/ddns.pot [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/tr/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/uk/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/vi/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/zh_Hans/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/po/zh_Hant/ddns.po [new file with mode: 0644]
package/luci/applications/luci-app-ddns/root/etc/uci-defaults/40_luci-ddns [new file with mode: 0755]
package/luci/applications/luci-app-ddns/root/usr/libexec/rpcd/luci.ddns [new file with mode: 0755]
package/luci/applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json [new file with mode: 0644]
package/luci/applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/Makefile [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/mwan3.css [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/ar/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/bg/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/bn_BD/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/ca/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/cs/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/da/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/de/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/el/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/en/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/es/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/fi/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/fr/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/he/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/hi/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/hu/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/it/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/ja/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/ko/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/lt/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/mr/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/ms/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/nb_NO/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/pl/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/pt/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/pt_BR/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/ro/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/ru/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/sk/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/sv/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/templates/mwan3.pot [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/tr/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/uk/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/vi/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/zh_Hans/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/po/zh_Hant/mwan3.po [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 [new file with mode: 0755]
package/luci/applications/luci-app-mwan3/root/usr/libexec/luci-mwan3 [new file with mode: 0755]
package/luci/applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json [new file with mode: 0644]
package/luci/applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/Makefile [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/README.md [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/luasrc/view/wifischedule/file_viewer.htm [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/ar/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/bg/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/bn_BD/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/ca/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/cs/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/da/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/de/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/el/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/en/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/es/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/fi/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/fr/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/he/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/hi/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/hu/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/it/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/ja/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/ko/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/lt/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/mr/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/ms/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/nb_NO/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/nl/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/pl/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/pt/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/pt_BR/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/ro/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/ru/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/sk/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/sv/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/templates/wifischedule.pot [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/tr/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/uk/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/vi/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/yue/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/zh_Hans/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/po/zh_Hant/wifischedule.po [new file with mode: 0644]
package/luci/applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json [new file with mode: 0644]
package/luci/applications/luci-app-wol/Makefile [new file with mode: 0644]
package/luci/applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/ar/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/bg/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/bn_BD/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/ca/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/cs/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/da/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/de/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/el/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/en/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/es/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/fi/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/fr/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/he/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/hi/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/hu/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/id/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/it/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/ja/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/ko/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/lt/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/mr/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/ms/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/nb_NO/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/nl/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/pl/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/pt/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/pt_BR/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/ro/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/ru/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/sk/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/sv/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/templates/wol.pot [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/tr/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/uk/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/vi/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/zh_Hans/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/po/zh_Hant/wol.po [new file with mode: 0644]
package/luci/applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json [new file with mode: 0644]
package/luci/applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json [new file with mode: 0644]
package/luci/modules/luci-base/src/contrib/lemon [new file with mode: 0755]
package/network/config/bind/Config.in [new file with mode: 0644]
package/network/config/bind/Makefile [new file with mode: 0644]
package/network/config/bind/files/bind/bind.keys [new file with mode: 0644]
package/network/config/bind/files/bind/db.0 [new file with mode: 0644]
package/network/config/bind/files/bind/db.127 [new file with mode: 0644]
package/network/config/bind/files/bind/db.255 [new file with mode: 0644]
package/network/config/bind/files/bind/db.local [new file with mode: 0644]
package/network/config/bind/files/bind/db.root [new file with mode: 0644]
package/network/config/bind/files/bind/named.conf.example [new file with mode: 0644]
package/network/config/bind/files/named.init [new file with mode: 0644]
package/network/config/mwan3/Makefile [new file with mode: 0644]
package/network/config/mwan3/files/etc/config/mwan3 [new file with mode: 0644]
package/network/config/mwan3/files/etc/hotplug.d/iface/15-mwan3 [new file with mode: 0644]
package/network/config/mwan3/files/etc/hotplug.d/iface/16-mwan3-user [new file with mode: 0644]
package/network/config/mwan3/files/etc/init.d/mwan3 [new file with mode: 0755]
package/network/config/mwan3/files/etc/mwan3.user [new file with mode: 0644]
package/network/config/mwan3/files/etc/uci-defaults/mwan3-migrate-flush_conntrack [new file with mode: 0644]
package/network/config/mwan3/files/lib/mwan3/common.sh [new file with mode: 0644]
package/network/config/mwan3/files/lib/mwan3/mwan3.sh [new file with mode: 0644]
package/network/config/mwan3/files/usr/libexec/rpcd/mwan3 [new file with mode: 0755]
package/network/config/mwan3/files/usr/sbin/mwan3 [new file with mode: 0755]
package/network/config/mwan3/files/usr/sbin/mwan3rtmon [new file with mode: 0755]
package/network/config/mwan3/files/usr/sbin/mwan3track [new file with mode: 0755]
package/network/config/mwan3/src/sockopt_wrap.c [new file with mode: 0644]
package/network/config/nfs-kernel-server/Config.in [new file with mode: 0644]
package/network/config/nfs-kernel-server/Makefile [new file with mode: 0644]
package/network/config/nfs-kernel-server/files/nfsd.exports [new file with mode: 0644]
package/network/config/nfs-kernel-server/files/nfsd.init [new file with mode: 0644]
package/network/config/nfs-kernel-server/patches/101-musl-getservbyport.patch [new file with mode: 0644]
package/network/config/nfs-kernel-server/patches/110-move-hardcoded-rundir.patch [new file with mode: 0644]
package/network/config/nfs-kernel-server/patches/130-musl-svcgssd-sysconf.patch [new file with mode: 0644]
package/network/config/nfs-kernel-server/patches/200-fix-macos-build.patch [new file with mode: 0644]
package/network/config/pbr/Makefile [new file with mode: 0644]
package/network/config/pbr/files/README.md [new file with mode: 0644]
package/network/config/pbr/files/etc/config/pbr [new file with mode: 0644]
package/network/config/pbr/files/etc/config/pbr.iptables [new file with mode: 0644]
package/network/config/pbr/files/etc/hotplug.d/firewall/70-pbr [new file with mode: 0755]
package/network/config/pbr/files/etc/hotplug.d/iface/70-pbr [new file with mode: 0644]
package/network/config/pbr/files/etc/init.d/pbr.init [new file with mode: 0755]
package/network/config/pbr/files/etc/uci-defaults/90-pbr [new file with mode: 0644]
package/network/config/pbr/files/etc/uci-defaults/91-pbr [new file with mode: 0644]
package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_forward/30-pbr.nft [new file with mode: 0644]
package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_input/30-pbr.nft [new file with mode: 0644]
package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_output/30-pbr.nft [new file with mode: 0644]
package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_postrouting/30-pbr.nft [new file with mode: 0644]
package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_prerouting/30-pbr.nft [new file with mode: 0644]
package/network/config/pbr/files/usr/share/nftables.d/table-post/30-pbr.nft [new file with mode: 0644]
package/network/config/pbr/files/usr/share/pbr/pbr.firewall.include [new file with mode: 0644]
package/network/config/pbr/files/usr/share/pbr/pbr.user.aws [new file with mode: 0644]
package/network/config/pbr/files/usr/share/pbr/pbr.user.netflix [new file with mode: 0644]
package/network/config/pbr/test.sh [new file with mode: 0644]
package/network/config/rpcbind/Makefile [new file with mode: 0644]
package/network/config/rpcbind/files/rpcbind.init [new file with mode: 0644]
package/network/config/rpcbind/patches/001-CVE-2017-8779-dos-via-memory-consumption.patch [new file with mode: 0644]
package/network/services/acme-acmesh/Makefile [new file with mode: 0644]
package/network/services/acme-acmesh/files/hook.sh [new file with mode: 0644]
package/network/services/acme-common/Makefile [new file with mode: 0644]
package/network/services/acme-common/files/acme-notify.sh [new file with mode: 0644]
package/network/services/acme-common/files/acme.config [new file with mode: 0644]
package/network/services/acme-common/files/acme.init [new file with mode: 0644]
package/network/services/acme-common/files/acme.uci-defaults [new file with mode: 0644]
package/network/services/acme-common/files/functions.sh [new file with mode: 0644]
package/network/services/acme/Makefile [new file with mode: 0644]
package/network/services/darkstat/Makefile [new file with mode: 0644]
package/network/services/darkstat/files/darkstat.config [new file with mode: 0644]
package/network/services/darkstat/files/darkstat.init [new file with mode: 0755]
package/network/services/darkstat/patches/100-do-not-use-NI_IDN.patch [new file with mode: 0644]
package/network/services/darkstat/patches/101-allow-multiple-local-interfaces.patch [new file with mode: 0644]
package/network/services/ddns-scripts/Makefile [new file with mode: 0644]
package/network/services/ddns-scripts/files/etc/config/ddns [new file with mode: 0644]
package/network/services/ddns-scripts/files/etc/hotplug.d/iface/ddns [new file with mode: 0644]
package/network/services/ddns-scripts/files/etc/init.d/ddns [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/bin/ddns.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_lucihelper.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_cloudflare_com_v4.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_cnkuai_cn.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_digitalocean_com_v2.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_dnspod_cn.sh [new file with mode: 0755]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_freedns_42_pl.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_gandi_net.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_gcp_v1.sh [new file with mode: 0755]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_godaddy_com_v1.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_luadns_v1.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_no-ip_com.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_ns1_com.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_nsupdate.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_one_com.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_pdns.sh [new file with mode: 0755]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_route53_v1.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/lib/ddns/update_transip_nl.sh [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/3322.org.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-basicauth.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-keyauth.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-v2-basic.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-v2-token.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/all-inkl.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/bind-nsupdate.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/changeip.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/cloud.google.com-v1.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/cloudflare.com-v4.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/cnkuai.cn.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/core-networks.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/ddnss.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/ddo.jp.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/desec.io.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dhis.org.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/digitalocean.com-v2.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsdynamic.org.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsever.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsexit.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnshome.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsmadeeasy.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsmax.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsomatic.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnspark.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dnspod.cn.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/do.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/domopoli.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/duckdns.org.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/duiadns.net.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dy.fi.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dyn.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dyndns.it.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dyndns.org.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dynu.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/dynv6.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/easydns.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/freedns.42.pl.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/gandi.net.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/godaddy.com-v1.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/goip.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/google.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/he.net.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/hosting.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/infomaniak.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/inwx.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/ipnodns.ru.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/joker.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/loopia.se.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/luadns.com-v1.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/moniker.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/mydns.jp.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/myonlineportal.net.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/mythic-beasts.com-v2.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/mythic-beasts.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/namecheap.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/njal.la.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/no-ip.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/no-ip.pl.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/now-dns.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/ns1.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/nsupdate.info.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/one.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/opendns.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/oray.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/ovh.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/pdns.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/regfish.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/route53-v1.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/schokokeks.org.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/selfhost.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/simply.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/sitelutions.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/spdyn.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/strato.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/system-ns.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/thatip.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/transip.nl.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/twodns.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/udmedia.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/variomedia.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/xlhost.de.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/default/zoneedit.com.json [new file with mode: 0644]
package/network/services/ddns-scripts/files/usr/share/ddns/list [new file with mode: 0644]
package/network/services/ddns-scripts/samples/ddns.config_sample [new file with mode: 0644]
package/network/services/ddns-scripts/samples/getlocalip_sample.sh [new file with mode: 0755]
package/network/services/ddns-scripts/samples/slaac_sample.sh [new file with mode: 0755]
package/network/services/ddns-scripts/samples/update_sample.sh [new file with mode: 0644]
package/network/services/etherwake-nfqueue/Makefile [new file with mode: 0644]
package/network/services/etherwake-nfqueue/README.md [new file with mode: 0644]
package/network/services/etherwake-nfqueue/files/etherwake-nfqueue.config [new file with mode: 0644]
package/network/services/etherwake-nfqueue/files/etherwake-nfqueue.init [new file with mode: 0644]
package/network/services/etherwake/Makefile [new file with mode: 0644]
package/network/services/etherwake/files/etherwake.config [new file with mode: 0644]
package/network/services/etherwake/files/etherwake.init [new file with mode: 0644]
package/network/services/etherwake/patches/110-format_security_fix.patch [new file with mode: 0644]
package/network/services/etherwake/patches/120-musl-compat.patch [new file with mode: 0644]
package/network/services/krb5/Makefile [new file with mode: 0644]
package/network/services/krb5/files/krb5kdc [new file with mode: 0644]
package/network/services/mwan3/Makefile [new file with mode: 0644]
package/network/services/mwan3/files/etc/config/mwan3 [new file with mode: 0644]
package/network/services/mwan3/files/etc/hotplug.d/iface/15-mwan3 [new file with mode: 0644]
package/network/services/mwan3/files/etc/hotplug.d/iface/16-mwan3-user [new file with mode: 0644]
package/network/services/mwan3/files/etc/init.d/mwan3 [new file with mode: 0755]
package/network/services/mwan3/files/etc/mwan3.user [new file with mode: 0644]
package/network/services/mwan3/files/etc/uci-defaults/mwan3-migrate-flush_conntrack [new file with mode: 0644]
package/network/services/mwan3/files/lib/mwan3/common.sh [new file with mode: 0644]
package/network/services/mwan3/files/lib/mwan3/mwan3.sh [new file with mode: 0644]
package/network/services/mwan3/files/usr/libexec/rpcd/mwan3 [new file with mode: 0755]
package/network/services/mwan3/files/usr/sbin/mwan3 [new file with mode: 0755]
package/network/services/mwan3/files/usr/sbin/mwan3rtmon [new file with mode: 0755]
package/network/services/mwan3/files/usr/sbin/mwan3track [new file with mode: 0755]
package/network/services/mwan3/src/sockopt_wrap.c [new file with mode: 0644]
package/network/services/netatalk/Makefile [new file with mode: 0644]
package/network/services/netatalk/files/afpd.init [new file with mode: 0644]
package/network/services/nsd/Makefile [new file with mode: 0644]
package/network/services/nsd/files/nsd.init [new file with mode: 0644]
package/network/services/nsd/patches/010-Fix-build-with-without-ssl.patch [new file with mode: 0644]
package/network/services/socat/Makefile [new file with mode: 0644]
package/network/services/socat/files/socat.config [new file with mode: 0644]
package/network/services/socat/files/socat.init [new file with mode: 0644]
package/network/services/socat/patches/200-openssl-deprecated.patch [new file with mode: 0644]
package/network/services/wifidog/Makefile [new file with mode: 0644]
package/network/services/wifidog/files/wifidog.init [new file with mode: 0644]
package/network/services/wifidog/patches/010-simple_http-Convert-to-WolfSSL.patch [new file with mode: 0644]
package/network/services/wifidog/patches/011-use-tls-above-1.patch [new file with mode: 0644]
package/network/services/wifidog/patches/020-Modify-get-ip-from-iface-method.patch [new file with mode: 0644]
package/network/services/wifischedule/LICENSE [new file with mode: 0644]
package/network/services/wifischedule/Makefile [new file with mode: 0644]
package/network/services/wifischedule/README.md [new file with mode: 0644]
package/network/services/wifischedule/net/etc/config/wifi_schedule [new file with mode: 0644]
package/network/services/wifischedule/net/usr/bin/wifi_schedule.sh [new file with mode: 0755]
package/network/services/xinetd/Makefile [new file with mode: 0644]
package/network/services/xinetd/files/xinetd.init [new file with mode: 0644]
package/network/services/xinetd/files/xinetd.uci.conf.sample [new file with mode: 0644]
package/network/services/xinetd/patches/001-ar.patch [new file with mode: 0644]
package/network/services/xinetd/patches/002-destdir.patch [new file with mode: 0644]
package/network/services/xinetd/patches/003-rpc_fix.patch [new file with mode: 0644]
package/network/services/xinetd/patches/004-ident-bind.patch [new file with mode: 0644]
package/network/services/xinetd/patches/005-format.patch [new file with mode: 0644]
package/network/utils/netcat/Makefile [new file with mode: 0644]
package/network/utils/netcat/patches/001-netcat_flag_count.patch [new file with mode: 0644]
package/network/utils/netcat/patches/002-udp_listen_fix.patch [new file with mode: 0644]
package/network/utils/netperf/Makefile [new file with mode: 0644]
package/network/utils/netperf/files/netserver.init [new file with mode: 0644]
package/network/utils/netperf/patches/010-gcc10_multiple_definition_fix.patch [new file with mode: 0644]
package/network/utils/wget/Makefile [new file with mode: 0644]
package/utils/bash/Makefile [new file with mode: 0644]
package/utils/bash/files/etc/bash.bashrc [new file with mode: 0644]
package/utils/bash/files/etc/profile.d/sys_bashrc.sh [new file with mode: 0644]
package/utils/bash/patches/900-no_doc.patch [new file with mode: 0644]
package/utils/bash/patches/901-startup-files.patch [new file with mode: 0644]
package/utils/bash/patches/902-missing-params.patch [new file with mode: 0644]
package/utils/dmidecode/Makefile [new file with mode: 0644]
package/utils/dosfstools/Makefile [new file with mode: 0644]
package/utils/findutils/Makefile [new file with mode: 0644]
package/utils/flashrom/Makefile [new file with mode: 0644]
package/utils/flashrom/flashrom.mk [new file with mode: 0644]
package/utils/flashrom/patches/010-bitbang.patch [new file with mode: 0644]
package/utils/flashrom/patches/020-raw-access.patch [new file with mode: 0644]
package/utils/flashrom/patches/030-ppc.patch [new file with mode: 0644]
package/utils/flashrom/patches/040-uclibc.patch [new file with mode: 0644]
package/utils/lvm2/Makefile [new file with mode: 0644]
package/utils/lvm2/files/lvm2.hotplug [new file with mode: 0644]
package/utils/lvm2/files/lvm2.init [new file with mode: 0644]
package/utils/lvm2/files/lvm2.preinit [new file with mode: 0644]
package/utils/lvm2/patches/002-const-stdio.patch [new file with mode: 0644]
package/utils/lvm2/patches/003-no-mallinfo.patch [new file with mode: 0644]
package/utils/mksh/Makefile [new file with mode: 0644]
package/utils/mksh/patches/100-dot_mkshrc [new file with mode: 0644]
package/utils/nano/Makefile
package/utils/nano/files/ucode.nanorc [new file with mode: 0644]
package/utils/nano/patches/0001-post80-fix-minibar-do-not-falsely-report.patch [new file with mode: 0644]
package/utils/procps-ng/Makefile [new file with mode: 0644]
package/utils/procps-ng/patches/100-no-tests-docs.patch [new file with mode: 0644]
package/utils/rrdtool1/Makefile [new file with mode: 0644]
package/utils/rrdtool1/patches/001-no_ordering_cd_joke.patch [new file with mode: 0644]
package/utils/rrdtool1/patches/002-no_timezone.patch [new file with mode: 0644]
package/utils/rrdtool1/patches/020-x86-float-cast.patch [new file with mode: 0644]
package/utils/rrdtool1/patches/030-pod2man-stderr.patch [new file with mode: 0644]
package/utils/rrdtool1/patches/040-no-e-notation-on-log-display.patch [new file with mode: 0644]
package/utils/rrdtool1/patches/050-no-doc.patch [new file with mode: 0644]
package/utils/rrdtool1/patches/100-new-long-rrd.patch [new file with mode: 0644]
package/utils/tcsh/Makefile [new file with mode: 0644]
package/utils/tcsh/patches/001-sysmalloc.patch [new file with mode: 0644]
package/utils/tcsh/patches/010-wint.patch [new file with mode: 0644]
package/utils/tmux/Makefile [new file with mode: 0644]
package/utils/tmux/test.sh [new file with mode: 0644]
package/utils/ttyd/Makefile [new file with mode: 0644]
package/utils/ttyd/files/ttyd.config [new file with mode: 0644]
package/utils/ttyd/files/ttyd.init [new file with mode: 0644]
package/utils/ttyd/patches/100-log-to-syslog.patch [new file with mode: 0644]
package/utils/vim/Makefile [new file with mode: 0644]
package/utils/vim/files/vimrc [new file with mode: 0644]
package/utils/vim/files/vimrc.full [new file with mode: 0644]
package/utils/vim/patches/002-remove_helptags_generation.patch [new file with mode: 0644]
package/utils/vim/patches/010-no-msgfmt.patch [new file with mode: 0644]
package/utils/vim/scripts/uname [new file with mode: 0755]
package/utils/vim/test.sh [new file with mode: 0644]
package/utils/zsh/Makefile [new file with mode: 0644]
package/utils/zsh/patches/001-50658-test-Enable-to-switch-between-C-UTF-8-locales-.patch [new file with mode: 0644]
package/utils/zsh/patches/002-51723-migrate-pcre-module-to-pcre2.patch [new file with mode: 0644]
package/utils/zsh/patches/003-51728-assign-pcre-named-capture-groups-to-a-hash.patch [new file with mode: 0644]
package/utils/zsh/patches/004-51738-support-pcre-s-alternative-DFA-matching-algori.patch [new file with mode: 0644]
package/utils/zsh/patches/005-51877-do-not-build-pcre-module-if-pcre2-config-is-no.patch [new file with mode: 0644]

diff --git a/package/admin/htop/Makefile b/package/admin/htop/Makefile
new file mode 100644 (file)
index 0000000..923f0e3
--- /dev/null
@@ -0,0 +1,62 @@
+#
+# Copyright (C) 2007-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=htop
+PKG_VERSION:=3.3.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/htop-dev/htop/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=1e5cc328eee2bd1acff89f860e3179ea24b85df3ac483433f92a29977b14b045
+
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:htop:htop
+
+
+PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/htop
+  SECTION:=admin
+  CATEGORY:=Administration
+  TITLE:=Interactive processes viewer
+  DEPENDS:=+libncurses
+  URL:=https://hisham.hm/htop/
+  MAINTAINER:=Etienne CHAMPETIER <champetier.etienne@gmail.com>
+endef
+
+define Package/htop/description
+ Htop is an ncursed-based process viewer similar to top, but
+ it allows to scroll the list vertically and horizontally to
+ see all processes and their full command lines.
+endef
+
+CONFIGURE_ARGS += \
+       --disable-sensors \
+       --enable-affinity \
+       --disable-capabilities \
+       --disable-delayacct \
+       --disable-unicode \
+       --disable-unwind \
+       --disable-hwloc
+
+CONFIGURE_VARS += \
+       ac_cv_file__proc_stat=yes \
+       ac_cv_file__proc_meminfo=yes
+
+define Package/htop/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/$(PKG_NAME) $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,htop))
diff --git a/package/lang/chicken-scheme/Makefile b/package/lang/chicken-scheme/Makefile
new file mode 100644 (file)
index 0000000..c7fb98d
--- /dev/null
@@ -0,0 +1,141 @@
+# Copyright (C) 2019-2020 Jerônimo Cordoni Pellegrini <j_p@aleph0.info>
+#
+# This file is free software, licensed under the GNU General Public License v3
+# or later.
+# See /LICENSE for details
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=chicken-scheme
+PKG_VERSION:=5.2.0
+PKG_RELEASE:=2
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/chicken-$(PKG_VERSION)
+PKG_SOURCE:=chicken-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://code.call-cc.org/releases/$(PKG_VERSION)/
+PKG_HASH:=819149c8ce7303a9b381d3fdc1d5765c5f9ac4dee6f627d1652f47966a8780fa
+PKG_MAINTAINER:=Jeronimo Pellegrini <j_p@aleph0.info>
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/chicken-scheme/Default
+  TITLE:=Chicken Scheme
+  SECTION:=lang
+  CATEGORY:=Languages
+  URL:=https://call-cc.org
+  ABI_VERSION:=11
+endef
+
+##
+## chicken-scheme-interpreter
+##
+
+define Package/chicken-scheme-interpreter
+$(call Package/chicken-scheme/Default)
+  TITLE+=interpreter only
+  CONFLICTS:=chicken-scheme-full
+endef
+
+define Package/chicken-scheme-interpreter/description
+  Chicken is an implementation of the Scheme language. It is portable, efficient, and supports 
+  the R5RS and R7RS (work in progress) standards, and many extensions.
+  Chicken can be used as a scripting language to automate tasks.
+  This package contains the interpreter, 'csi', only --
+  the compiler and the package installer are not included because they depend on a C compiler.
+  For more information, please refer to the Chicken Scheme website at https://call-cc.org.
+endef
+
+MAKE_FLAGS += PLATFORM=linux C_COMPILER="$(TARGET_CC)" LINKER="$(TARGET_CC)" PREFIX=/usr C_COMPILER_OPTIMIZATION_OPTIONS="$(TARGET_CFLAGS)"
+
+# not installed:
+# - csc and chicken, the compiler
+# - the include dir (only useful with the compiler)
+# - install, uninstall, status, and chicken-do, which deal with modules
+#   (installation of more modules depends on the compiler)
+# - profiler
+# - feathers, the debugger
+# - libchicken.a, the static library
+define Package/chicken-scheme-interpreter/install
+       $(INSTALL_DIR)  $(1)/usr/bin
+       $(INSTALL_DIR)  $(1)/usr/lib/chicken/$(ABI_VERSION)
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csi                 $(1)/usr/bin/
+       $(CP) $(PKG_BUILD_DIR)/libchicken.so.$(ABI_VERSION) $(1)/usr/lib/
+       $(CP) $(PKG_BUILD_DIR)/libchicken.so                $(1)/usr/lib/
+       $(CP) $(PKG_BUILD_DIR)/*.import.so                  $(1)/usr/lib/chicken/$(ABI_VERSION)/
+       $(CP) $(PKG_BUILD_DIR)/types.db                     $(1)/usr/lib/chicken/$(ABI_VERSION)/
+endef
+
+$(eval $(call BuildPackage,chicken-scheme-interpreter))
+
+
+
+##
+## chicken-scheme-full
+##
+
+# mips-openwrt-linux-musl-gcc dowsn't seem to link with libchicken.so.
+# already tried -lchicken and passing /usr/lib/libchicken.so on the command
+# line.
+# also tried -Wl,-R/usr/lib,-R/usr/lib/chicken/$(ABI_VERSION)
+#
+# current solution: we do not strip binaries in chicken-scheme-full
+# we do this by unsetting STRIP and RSTRIP, *and* reloading rules.mk
+#
+STRIP:=:
+RSTRIP:=:
+include $(TOPDIR)/rules.mk
+
+define Package/chicken-scheme-full
+$(call Package/chicken-scheme/Default)
+  TITLE+=full package
+  # csc depends on gcc; chicken-install uses the 'install' command from coreutils
+  EXTRA_DEPENDS:= gcc, coreutils-install
+endef
+
+define Package/chicken-scheme-full/description
+  Chicken is an implementation of the Scheme language. It is portable, efficient, and supports 
+  the R5RS and R7RS (work in progress) standards, and many extensions.
+  Chicken can be used as a scripting language to automate tasks.
+  This package contains the interpreter, 'csi'; the compiler, 'csc';
+  the tools for installing and removing eggs (modules); the profiler and
+  the debugger.
+  Note that this package depends on gcc, which is quite large (more than 100Mb).
+  For more information, please refer to the Chicken Scheme website at https://call-cc.org.
+endef
+
+
+# not installed:
+# - libchicken.a, the static library
+define Package/chicken-scheme-full/install
+       $(INSTALL_DIR)  $(1)/usr/bin
+       $(INSTALL_DIR)  $(1)/usr/lib/chicken/$(ABI_VERSION)
+       $(INSTALL_DIR)  $(1)/usr/include/chicken
+       $(INSTALL_DIR)  $(1)/usr/share/chicken
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csi                 $(1)/usr/bin/
+       $(CP) $(PKG_BUILD_DIR)/libchicken.so.$(ABI_VERSION) $(1)/usr/lib/
+       $(CP) $(PKG_BUILD_DIR)/libchicken.so                $(1)/usr/lib/
+       $(CP) $(PKG_BUILD_DIR)/*.import.so                  $(1)/usr/lib/chicken/$(ABI_VERSION)/
+       $(CP) $(PKG_BUILD_DIR)/types.db                     $(1)/usr/lib/chicken/$(ABI_VERSION)/
+       # csc
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/csc                     $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken                 $(1)/usr/bin/
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken.h              $(1)/usr/include/chicken/
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/chicken-config.h       $(1)/usr/include/chicken/
+       # chicken-install
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-install         $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-uninstall       $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-status          $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-do              $(1)/usr/bin/
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/setup.defaults         $(1)/usr/share/chicken/
+       # profile
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/chicken-profile         $(1)/usr/bin/
+       # feathers
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers.tcl            $(1)/usr/share/chicken/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/feathers                $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,chicken-scheme-full))
index 1ea497c561d51e8b656b18544e211a855902a67f..4948dfefb61e2fb4a60d36f143b8702bea423a76 100644 (file)
@@ -9,7 +9,7 @@ include $(TOPDIR)/rules.mk
 
 PKG_NAME:=avahi
 PKG_VERSION:=0.8
-PKG_RELEASE:=8
+PKG_RELEASE:=9
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
 PKG_SOURCE_URL:=https://github.com/lathiat/avahi/releases/download/v$(PKG_VERSION) \
@@ -217,23 +217,6 @@ $(call Package/avahi/Default/description)
  For more information please see the avahi documentation.
 endef
 
-define Package/libavahi-compat-libdnssd
-  $(call Package/avahi/Default)
-  SECTION:=libs
-  CATEGORY:=Libraries
-  VARIANT:=dbus
-  DEPENDS:=+libavahi-client
-  TITLE+= (libdnssd)
-endef
-
-define Package/libavahi-compat-libdnssd/description
-$(call Package/avahi/Default/description)
- .
- This packages adds the libavahi-compat-libdnssd library.
- It also automatically adds the required libavahi-client package.
- For more information please see the avahi documentation.
-endef
-
 define Package/avahi-utils
   $(call Package/avahi/Default)
   SUBMENU:=IP Addresses and Names
@@ -294,10 +277,6 @@ CONFIGURE_ARGS += \
        --with-autoipd-group=nogroup
 
 ifeq ($(BUILD_VARIANT),dbus)
-ifneq ($(CONFIG_PACKAGE_libavahi-compat-libdnssd),)
-CONFIGURE_ARGS += \
-       --enable-compat-libdns_sd
-endif
 CONFIGURE_ARGS += \
        --enable-dbus
 else
@@ -314,11 +293,6 @@ define Build/InstallDev
        $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
        $(INSTALL_DIR) $(1)/usr/lib
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libavahi-* $(1)/usr/lib/
-ifneq ($(CONFIG_PACKAGE_libavahi-compat-libdnssd),)
-ifeq ($(BUILD_VARIANT),dbus)
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdns_sd* $(1)/usr/lib/
-endif
-endif
        $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
        $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/* $(1)/usr/lib/pkgconfig/
 endef
@@ -341,11 +315,6 @@ define Package/libavahi-client/install
        $(CP) $(PKG_INSTALL_DIR)/usr/lib/libavahi-client.so.* $(1)/usr/lib/
 endef
 
-define Package/libavahi-compat-libdnssd/install
-       $(INSTALL_DIR) $(1)/usr/lib
-       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdns_sd.so* $(1)/usr/lib/
-endef
-
 define Package/avahi-utils/install
        $(INSTALL_DIR) $(1)/usr/bin
        $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin/
@@ -393,7 +362,6 @@ define Package/avahi-dnsconfd/install
 endef
 
 $(eval $(call BuildPackage,libavahi-client))
-$(eval $(call BuildPackage,libavahi-compat-libdnssd))
 $(eval $(call BuildPackage,avahi-utils))
 $(eval $(call BuildPackage,libavahi-dbus-support))
 $(eval $(call BuildPackage,libavahi-nodbus-support))
diff --git a/package/libs/avahi/patches/300-CVE-2023-38469.patch b/package/libs/avahi/patches/300-CVE-2023-38469.patch
new file mode 100644 (file)
index 0000000..cdc99b2
--- /dev/null
@@ -0,0 +1,41 @@
+From a337a1ba7d15853fb56deef1f464529af6e3a1cf Mon Sep 17 00:00:00 2001
+From: Evgeny Vereshchagin <evvers@ya.ru>
+Date: Mon, 23 Oct 2023 20:29:31 +0000
+Subject: [PATCH] core: reject overly long TXT resource records
+
+Closes https://github.com/lathiat/avahi/issues/455
+
+CVE-2023-38469
+---
+ avahi-core/rr.c | 9 ++++++++-
+ 1 file changed, 8 insertions(+), 1 deletion(-)
+
+--- a/avahi-core/rr.c
++++ b/avahi-core/rr.c
+@@ -32,6 +32,7 @@
+ #include <avahi-common/malloc.h>
+ #include <avahi-common/defs.h>
++#include "dns.h"
+ #include "rr.h"
+ #include "log.h"
+ #include "util.h"
+@@ -688,11 +689,17 @@ int avahi_record_is_valid(AvahiRecord *r
+         case AVAHI_DNS_TYPE_TXT: {
+             AvahiStringList *strlst;
++            size_t used = 0;
+-            for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next)
++            for (strlst = r->data.txt.string_list; strlst; strlst = strlst->next) {
+                 if (strlst->size > 255 || strlst->size <= 0)
+                     return 0;
++                used += 1+strlst->size;
++                if (used > AVAHI_DNS_RDATA_MAX)
++                    return 0;
++            }
++
+             return 1;
+         }
+     }
diff --git a/package/libs/avahi/patches/301-CVE-2023-38470.patch b/package/libs/avahi/patches/301-CVE-2023-38470.patch
new file mode 100644 (file)
index 0000000..8f0e743
--- /dev/null
@@ -0,0 +1,48 @@
+From b6cf29f98adce7355e8c51a6af1e338a5f94e16e Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Petr=20Men=C5=A1=C3=ADk?= <pemensik@redhat.com>
+Date: Tue, 11 Apr 2023 15:29:59 +0200
+Subject: [PATCH] Ensure each label is at least one byte long
+
+The only allowed exception is single dot, where it should return empty
+string.
+
+Fixes #454.
+---
+ avahi-common/domain-test.c | 14 ++++++++++++++
+ avahi-common/domain.c      |  2 +-
+ 2 files changed, 15 insertions(+), 1 deletion(-)
+
+--- a/avahi-common/domain-test.c
++++ b/avahi-common/domain-test.c
+@@ -45,6 +45,20 @@ int main(AVAHI_GCC_UNUSED int argc, AVAH
+     printf("%s\n", s = avahi_normalize_name_strdup("fo\\\\o\\..f oo."));
+     avahi_free(s);
++    printf("%s\n", s = avahi_normalize_name_strdup("."));
++    avahi_free(s);
++
++    s = avahi_normalize_name_strdup(",.=.}.=.?-.}.=.?.?.}.}.?.?.?.z.?.?.}.}."
++                  "}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.=.=.?.?.}.}.?.?.}.}.}"
++                  ".?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.=.=.?.?.}.}.?.?.?.zM.?`"
++                  "?.}.}.}.?.?.?.r.=.?.}.=.?.?.}.?.?.?.}.=.?.?.}??.}.}.?.?."
++                  "?.z.?.?.}.}.}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM.?`?.}.}.}."
++                  "??.?.zM.?`?.}.}.}.?.?.?.r.=.?.}.=.?.?.}.?.?.?.}.=.?.?.}?"
++                  "?.}.}.?.?.?.z.?.?.}.}.}.?.?.?.r.=.=.}.=.?.}}.}.?.?.?.zM."
++                  "?`?.}.}.}.?.?.?.r.=.=.?.?`.?.?}.}.}.?.?.?.r.=.?.}.=.?.?."
++                  "}.?.?.?.}.=.?.?.}");
++    assert(s == NULL);
++
+     printf("%i\n", avahi_domain_equal("\\065aa bbb\\.\\046cc.cc\\\\.dee.fff.", "Aaa BBB\\.\\.cc.cc\\\\.dee.fff"));
+     printf("%i\n", avahi_domain_equal("A", "a"));
+--- a/avahi-common/domain.c
++++ b/avahi-common/domain.c
+@@ -201,7 +201,7 @@ char *avahi_normalize_name(const char *s
+         }
+         if (!empty) {
+-            if (size < 1)
++            if (size < 2)
+                 return NULL;
+             *(r++) = '.';
diff --git a/package/libs/avahi/patches/302-CVE-2023-38471.patch b/package/libs/avahi/patches/302-CVE-2023-38471.patch
new file mode 100644 (file)
index 0000000..584d3c5
--- /dev/null
@@ -0,0 +1,66 @@
+From d486bca7e7912c6a4b547a3c607db0d0d3124bbf Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Mon, 23 Oct 2023 13:38:35 +0200
+Subject: [PATCH] core: extract host name using avahi_unescape_label()
+
+Previously we could create invalid escape sequence when we split the
+string on dot. For example, from valid host name "foo\\.bar" we have
+created invalid name "foo\\" and tried to set that as the host name
+which crashed the daemon.
+
+Fixes #453
+
+CVE-2023-38471
+---
+ avahi-core/server.c | 27 +++++++++++++++++++++------
+ 1 file changed, 21 insertions(+), 6 deletions(-)
+
+--- a/avahi-core/server.c
++++ b/avahi-core/server.c
+@@ -1295,7 +1295,11 @@ static void update_fqdn(AvahiServer *s)
+ }
+ int avahi_server_set_host_name(AvahiServer *s, const char *host_name) {
+-    char *hn = NULL;
++    char label_escaped[AVAHI_LABEL_MAX*4+1];
++    char label[AVAHI_LABEL_MAX];
++    char *hn = NULL, *h;
++    size_t len;
++
+     assert(s);
+     AVAHI_CHECK_VALIDITY(s, !host_name || avahi_is_valid_host_name(host_name), AVAHI_ERR_INVALID_HOST_NAME);
+@@ -1305,17 +1309,28 @@ int avahi_server_set_host_name(AvahiServ
+     else
+         hn = avahi_normalize_name_strdup(host_name);
+-    hn[strcspn(hn, ".")] = 0;
++    h = hn;
++    if (!avahi_unescape_label((const char **)&hn, label, sizeof(label))) {
++        avahi_free(h);
++        return AVAHI_ERR_INVALID_HOST_NAME;
++    }
++
++    avahi_free(h);
+-    if (avahi_domain_equal(s->host_name, hn) && s->state != AVAHI_SERVER_COLLISION) {
+-        avahi_free(hn);
++    h = label_escaped;
++    len = sizeof(label_escaped);
++    if (!avahi_escape_label(label, strlen(label), &h, &len))
++        return AVAHI_ERR_INVALID_HOST_NAME;
++
++    if (avahi_domain_equal(s->host_name, label_escaped) && s->state != AVAHI_SERVER_COLLISION)
+         return avahi_server_set_errno(s, AVAHI_ERR_NO_CHANGE);
+-    }
+     withdraw_host_rrs(s);
+     avahi_free(s->host_name);
+-    s->host_name = hn;
++    s->host_name = avahi_strdup(label_escaped);
++    if (!s->host_name)
++        return AVAHI_ERR_NO_MEMORY;
+     update_fqdn(s);
diff --git a/package/libs/avahi/patches/303-CVE-2023-38472.patch b/package/libs/avahi/patches/303-CVE-2023-38472.patch
new file mode 100644 (file)
index 0000000..2d18926
--- /dev/null
@@ -0,0 +1,36 @@
+From d886dc5b1d3d2b76aaa38289245acfdfa979ca6c Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Thu, 19 Oct 2023 17:36:44 +0200
+Subject: [PATCH] core: make sure there is rdata to process before parsing it
+
+Fixes #452
+
+CVE-2023-38472
+---
+ avahi-client/client-test.c      | 3 +++
+ avahi-daemon/dbus-entry-group.c | 2 +-
+ 2 files changed, 4 insertions(+), 1 deletion(-)
+
+--- a/avahi-client/client-test.c
++++ b/avahi-client/client-test.c
+@@ -258,6 +258,9 @@ int main (AVAHI_GCC_UNUSED int argc, AVA
+     printf("%s\n", avahi_strerror(avahi_entry_group_add_service (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "Lathiat's Site", "_http._tcp", NULL, NULL, 80, "foo=bar", NULL)));
+     printf("add_record: %d\n", avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "TestX", 0x01, 0x10, 120, "\5booya", 6));
++    error = avahi_entry_group_add_record (group, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, 0, "TestX", 0x01, 0x10, 120, "", 0);
++    assert(error != AVAHI_OK);
++
+     avahi_entry_group_commit (group);
+     domain = avahi_domain_browser_new (avahi, AVAHI_IF_UNSPEC, AVAHI_PROTO_UNSPEC, NULL, AVAHI_DOMAIN_BROWSER_BROWSE, 0, avahi_domain_browser_callback, (char*) "omghai3u");
+--- a/avahi-daemon/dbus-entry-group.c
++++ b/avahi-daemon/dbus-entry-group.c
+@@ -340,7 +340,7 @@ DBusHandlerResult avahi_dbus_msg_entry_g
+         if (!(r = avahi_record_new_full (name, clazz, type, ttl)))
+             return avahi_dbus_respond_error(c, m, AVAHI_ERR_NO_MEMORY, NULL);
+-        if (avahi_rdata_parse (r, rdata, size) < 0) {
++        if (!rdata || avahi_rdata_parse (r, rdata, size) < 0) {
+             avahi_record_unref (r);
+             return avahi_dbus_respond_error(c, m, AVAHI_ERR_INVALID_RDATA, NULL);
+         }
diff --git a/package/libs/avahi/patches/304-CVE-2023-38473.patch b/package/libs/avahi/patches/304-CVE-2023-38473.patch
new file mode 100644 (file)
index 0000000..7071751
--- /dev/null
@@ -0,0 +1,100 @@
+From 5edc17b7913cac824daa09fca9976c9c19e88822 Mon Sep 17 00:00:00 2001
+From: Michal Sekletar <msekleta@redhat.com>
+Date: Wed, 11 Oct 2023 17:45:44 +0200
+Subject: [PATCH] common: derive alternative host name from its unescaped
+ version
+
+Normalization of input makes sure we don't have to deal with special
+cases like unescaped dot at the end of label.
+
+Fixes #451 #487
+CVE-2023-38473
+---
+ avahi-common/alternative-test.c |  3 +++
+ avahi-common/alternative.c      | 27 +++++++++++++++++++--------
+ 2 files changed, 22 insertions(+), 8 deletions(-)
+
+--- a/avahi-common/alternative-test.c
++++ b/avahi-common/alternative-test.c
+@@ -31,6 +31,9 @@ int main(AVAHI_GCC_UNUSED int argc, AVAH
+     const char* const test_strings[] = {
+         "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
+         "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXüüüüüüü",
++        ").",
++        "\\.",
++        "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\\\",
+         "gurke",
+         "-",
+         " #",
+--- a/avahi-common/alternative.c
++++ b/avahi-common/alternative.c
+@@ -49,15 +49,20 @@ static void drop_incomplete_utf8(char *c
+ }
+ char *avahi_alternative_host_name(const char *s) {
++    char label[AVAHI_LABEL_MAX], alternative[AVAHI_LABEL_MAX*4+1];
++    char *alt, *r, *ret;
+     const char *e;
+-    char *r;
++    size_t len;
+     assert(s);
+     if (!avahi_is_valid_host_name(s))
+         return NULL;
+-    if ((e = strrchr(s, '-'))) {
++    if (!avahi_unescape_label(&s, label, sizeof(label)))
++        return NULL;
++
++    if ((e = strrchr(label, '-'))) {
+         const char *p;
+         e++;
+@@ -74,19 +79,18 @@ char *avahi_alternative_host_name(const
+     if (e) {
+         char *c, *m;
+-        size_t l;
+         int n;
+         n = atoi(e)+1;
+         if (!(m = avahi_strdup_printf("%i", n)))
+             return NULL;
+-        l = e-s-1;
++        len = e-label-1;
+-        if (l >= AVAHI_LABEL_MAX-1-strlen(m)-1)
+-            l = AVAHI_LABEL_MAX-1-strlen(m)-1;
++        if (len >= AVAHI_LABEL_MAX-1-strlen(m)-1)
++            len = AVAHI_LABEL_MAX-1-strlen(m)-1;
+-        if (!(c = avahi_strndup(s, l))) {
++        if (!(c = avahi_strndup(label, len))) {
+             avahi_free(m);
+             return NULL;
+         }
+@@ -100,7 +104,7 @@ char *avahi_alternative_host_name(const
+     } else {
+         char *c;
+-        if (!(c = avahi_strndup(s, AVAHI_LABEL_MAX-1-2)))
++        if (!(c = avahi_strndup(label, AVAHI_LABEL_MAX-1-2)))
+             return NULL;
+         drop_incomplete_utf8(c);
+@@ -109,6 +113,13 @@ char *avahi_alternative_host_name(const
+         avahi_free(c);
+     }
++    alt = alternative;
++    len = sizeof(alternative);
++    ret = avahi_escape_label(r, strlen(r), &alt, &len);
++
++    avahi_free(r);
++    r = avahi_strdup(ret);
++
+     assert(avahi_is_valid_host_name(r));
+     return r;
diff --git a/package/libs/confuse/Makefile b/package/libs/confuse/Makefile
new file mode 100644 (file)
index 0000000..f060994
--- /dev/null
@@ -0,0 +1,72 @@
+#
+# Copyright (C) 2006-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=confuse
+PKG_VERSION:=3.3
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://github.com/martinh/libconfuse/releases/download/v$(PKG_VERSION)
+PKG_HASH:=1dd50a0320e135a55025b23fcdbb3f0a81913b6d0b0a9df8cc2fdf3b3dc67010
+
+PKG_MAINTAINER:=
+PKG_LICENSE:=ISC
+PKG_LICENSE_FILES:=LICENSE
+PKG_CPE_ID:=cpe:/a:libconfuse_project:libconfuse
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/confuse
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=libConfuse is a configuration file parser library
+  URL:=https://github.com/martinh/libconfuse
+endef
+
+define Package/confuse/description
+       libConfuse is a configuration file parser library, licensed under the
+       terms of the ISC license, and written in C. It supports sections and
+       (lists of) values (strings, integers, floats, booleans or other
+       sections), as well as some other features (such as single/double-quoted
+       strings, environment variable expansion, functions and nested include
+       statements). It makes it very easy to add configuration file capability
+       to a program using a simple API.
+
+       The goal of libConfuse is not to be the configuration file parser
+       library with a gazillion of features. Instead, it aims to be easy to use
+       and quick to integrate with your code. libConfuse was called libcfg
+       before, but was changed to not confuse with other similar libraries.
+endef
+
+CONFIGURE_ARGS += \
+       --enable-shared \
+       --enable-static \
+       --disable-rpath \
+       --without-libiconv-prefix \
+       --without-libintl-prefix \
+       --disable-examples \
+       --with-pic
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/confuse.h $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libconfuse.{a,so*} $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libconfuse.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/confuse/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libconfuse.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,confuse))
diff --git a/package/libs/db47/Makefile b/package/libs/db47/Makefile
new file mode 100644 (file)
index 0000000..adf3dcf
--- /dev/null
@@ -0,0 +1,99 @@
+#
+# Copyright (C) 2009-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+BASE_VERSION:=4.7.25
+
+PKG_NAME:=db47
+PKG_VERSION:=$(BASE_VERSION).4.NC
+PKG_RELEASE:=7
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/db-$(BASE_VERSION).NC
+PKG_SOURCE:=db-$(BASE_VERSION).NC.tar.gz
+PKG_SOURCE_URL:=http://download.oracle.com/berkeley-db/
+PKG_HASH:=cd39c711023ff44c01d3c8ff0323eef7318660772b24f287556e6bf676a12535
+
+PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
+PKG_LICENSE:=Sleepycat
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_DEPENDS:=libxml2
+PKG_FIXUP:=autoreconf
+PKG_LIBTOOL_PATHS:=. build_unix
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libdb47
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Berkeley DB library (4.7)
+  URL:=http://www.oracle.com/us/products/database/berkeley-db
+  PROVIDES:=libdb47-full
+endef
+
+define Package/libdb47/description
+  Berkeley DB library (4.7).
+endef
+
+define Package/libdb47xx
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+libdb47 +libstdcpp
+  TITLE:=Berkeley DB library (4.7) for C++
+  URL:=http://www.oracle.com/us/products/database/berkeley-db
+  PROVIDES:=libdb47xx-full
+endef
+
+define Package/libdb47xx/description
+  Berkeley DB library (4.7).  C++ wrapper.
+endef
+
+CONFIGURE_PATH = build_unix
+CONFIGURE_CMD = ../dist/configure
+
+CONFIGURE_ARGS += \
+       --enable-shared \
+       --enable-static \
+       --disable-java \
+       --with-mutex=POSIX/pthreads/library \
+       --disable-tcl \
+       --disable-rpc \
+       --enable-compat185 \
+       --disable-debug \
+       $(if $(CONFIG_PACKAGE_libdb47xx),--enable-cxx,--disable-cxx)
+
+TARGET_CFLAGS += $(FPIC)
+
+define Build/Compile
+       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR)/build_unix \
+               DESTDIR="$(PKG_INSTALL_DIR)" all
+       $(MAKE) -C $(PKG_BUILD_DIR)/build_unix \
+               DESTDIR="$(PKG_INSTALL_DIR)" install
+endef
+
+define Package/libdb47/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdb-*.so $(1)/usr/lib/
+endef
+
+define Package/libdb47xx/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdb_cxx-*.so $(1)/usr/lib/
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/db.h $(1)/usr/include/
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/db_cxx.h $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdb*.{a,so} $(1)/usr/lib
+endef
+
+$(eval $(call BuildPackage,libdb47))
+$(eval $(call BuildPackage,libdb47xx))
diff --git a/package/libs/db47/patches/010-patch.4.7.25.1.patch b/package/libs/db47/patches/010-patch.4.7.25.1.patch
new file mode 100644 (file)
index 0000000..f1fd472
--- /dev/null
@@ -0,0 +1,55 @@
+--- a/sequence/sequence.c
++++ b/sequence/sequence.c
+@@ -187,7 +187,11 @@ __seq_open_pp(seq, txn, keyp, flags)
+       if ((ret = __db_get_flags(dbp, &tflags)) != 0)
+               goto err;
+-      if (DB_IS_READONLY(dbp)) {
++      /*
++       * We can let replication clients open sequences, but must
++       * check later that they do not update them.
++       */
++      if (F_ISSET(dbp, DB_AM_RDONLY)) {
+               ret = __db_rdonly(dbp->env, "DB_SEQUENCE->open");
+               goto err;
+       }
+@@ -244,6 +248,11 @@ retry:    if ((ret = __db_get(dbp, ip,
+               if ((ret != DB_NOTFOUND && ret != DB_KEYEMPTY) ||
+                   !LF_ISSET(DB_CREATE))
+                       goto err;
++              if (IS_REP_CLIENT(env) &&
++                  !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
++                      ret = __db_rdonly(env, "DB_SEQUENCE->open");
++                      goto err;
++              }
+               ret = 0;
+               rp = &seq->seq_record;
+@@ -296,7 +305,12 @@ retry:    if ((ret = __db_get(dbp, ip,
+        */
+       rp = seq->seq_data.data;
+       if (rp->seq_version == DB_SEQUENCE_OLDVER) {
+-oldver:               rp->seq_version = DB_SEQUENCE_VERSION;
++oldver:               if (IS_REP_CLIENT(env) &&
++                  !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
++                      ret = __db_rdonly(env, "DB_SEQUENCE->open");
++                      goto err;
++              }
++              rp->seq_version = DB_SEQUENCE_VERSION;
+               if (!F_ISSET(env, ENV_LITTLEENDIAN)) {
+                       if (IS_DB_AUTO_COMMIT(dbp, txn)) {
+                               if ((ret =
+@@ -707,6 +721,13 @@ __seq_get(seq, txn, delta, retp, flags)
+       MUTEX_LOCK(env, seq->mtx_seq);
++      if (handle_check && IS_REP_CLIENT(env) &&
++          !F_ISSET(dbp, DB_AM_NOT_DURABLE)) {
++              ret = __db_rdonly(env, "DB_SEQUENCE->get");
++              goto err;
++      }
++
++
+       if (rp->seq_min + delta > rp->seq_max) {
+               __db_errx(env, "Sequence overflow");
+               ret = EINVAL;
diff --git a/package/libs/db47/patches/020-patch.4.7.25.2.patch b/package/libs/db47/patches/020-patch.4.7.25.2.patch
new file mode 100644 (file)
index 0000000..ddf830a
--- /dev/null
@@ -0,0 +1,42 @@
+--- a/lock/lock.c
++++ b/lock/lock.c
+@@ -1274,10 +1274,12 @@ __lock_put_internal(lt, lockp, obj_ndx,
+               SH_TAILQ_REMOVE(
+                   &lt->obj_tab[obj_ndx], sh_obj, links, __db_lockobj);
+               if (sh_obj->lockobj.size > sizeof(sh_obj->objdata)) {
+-                      LOCK_REGION_LOCK(env);
++                      if (region->part_t_size != 1)
++                              LOCK_REGION_LOCK(env);
+                       __env_alloc_free(&lt->reginfo,
+                           SH_DBT_PTR(&sh_obj->lockobj));
+-                      LOCK_REGION_UNLOCK(env);
++                      if (region->part_t_size != 1)
++                              LOCK_REGION_UNLOCK(env);
+               }
+               SH_TAILQ_INSERT_HEAD(
+                   &FREE_OBJS(lt, part_id), sh_obj, links, __db_lockobj);
+@@ -1467,15 +1469,21 @@ retry: SH_TAILQ_FOREACH(sh_obj, &lt->obj
+               if (obj->size <= sizeof(sh_obj->objdata))
+                       p = sh_obj->objdata;
+               else {
+-                      LOCK_REGION_LOCK(env);
++                      /*
++                       * If we have only one partition, the region is locked.
++                       */
++                      if (region->part_t_size != 1)
++                              LOCK_REGION_LOCK(env);
+                       if ((ret =
+                           __env_alloc(&lt->reginfo, obj->size, &p)) != 0) {
+                               __db_errx(env,
+                                   "No space for lock object storage");
+-                              LOCK_REGION_UNLOCK(env);
++                              if (region->part_t_size != 1)
++                                      LOCK_REGION_UNLOCK(env);
+                               goto err;
+                       }
+-                      LOCK_REGION_UNLOCK(env);
++                      if (region->part_t_size != 1)
++                              LOCK_REGION_UNLOCK(env);
+               }
+               memcpy(p, obj->data, obj->size);
diff --git a/package/libs/db47/patches/030-patch.4.7.25.3.patch b/package/libs/db47/patches/030-patch.4.7.25.3.patch
new file mode 100644 (file)
index 0000000..12bbedd
--- /dev/null
@@ -0,0 +1,211 @@
+--- a/lock/lock_deadlock.c
++++ b/lock/lock_deadlock.c
+@@ -121,7 +121,7 @@ __lock_detect(env, atype, rejectp)
+       DB_LOCKTAB *lt;
+       db_timespec now;
+       locker_info *idmap;
+-      u_int32_t *bitmap, *copymap, **deadp, **free_me, *tmpmap;
++      u_int32_t *bitmap, *copymap, **deadp, **deadlist, *tmpmap;
+       u_int32_t i, cid, keeper, killid, limit, nalloc, nlockers;
+       u_int32_t lock_max, txn_max;
+       int ret, status;
+@@ -133,7 +133,8 @@ __lock_detect(env, atype, rejectp)
+       if (IS_REP_CLIENT(env))
+               atype = DB_LOCK_MINWRITE;
+-      free_me = NULL;
++      copymap = tmpmap = NULL;
++      deadlist = NULL;
+       lt = env->lk_handle;
+       if (rejectp != NULL)
+@@ -179,11 +180,11 @@ __lock_detect(env, atype, rejectp)
+       memcpy(copymap, bitmap, nlockers * sizeof(u_int32_t) * nalloc);
+       if ((ret = __os_calloc(env, sizeof(u_int32_t), nalloc, &tmpmap)) != 0)
+-              goto err1;
++              goto err;
+       /* Find a deadlock. */
+       if ((ret =
+-          __dd_find(env, bitmap, idmap, nlockers, nalloc, &deadp)) != 0)
++          __dd_find(env, bitmap, idmap, nlockers, nalloc, &deadlist)) != 0)
+               return (ret);
+       /*
+@@ -204,8 +205,7 @@ __lock_detect(env, atype, rejectp)
+               txn_max = TXN_MAXIMUM;
+       killid = BAD_KILLID;
+-      free_me = deadp;
+-      for (; *deadp != NULL; deadp++) {
++      for (deadp = deadlist; *deadp != NULL; deadp++) {
+               if (rejectp != NULL)
+                       ++*rejectp;
+               killid = (u_int32_t)(*deadp - bitmap) / nalloc;
+@@ -342,11 +342,12 @@ dokill:          if (killid == BAD_KILLID) {
+                       __db_msg(env,
+                           "Aborting locker %lx", (u_long)idmap[killid].id);
+       }
+-      __os_free(env, tmpmap);
+-err1: __os_free(env, copymap);
+-
+-err:  if (free_me != NULL)
+-              __os_free(env, free_me);
++err:  if(copymap != NULL)
++              __os_free(env, copymap);
++      if (deadlist != NULL)
++              __os_free(env, deadlist);
++      if(tmpmap != NULL)
++              __os_free(env, tmpmap);
+       __os_free(env, bitmap);
+       __os_free(env, idmap);
+@@ -360,6 +361,17 @@ err:      if (free_me != NULL)
+ #define       DD_INVALID_ID   ((u_int32_t) -1)
++/*
++ * __dd_build --
++ *    Build the lock dependency bit maps.
++ * Notes on synchronization:  
++ *    LOCK_SYSTEM_LOCK is used to hold objects locked when we have
++ *            a single partition.
++ *    LOCK_LOCKERS is held while we are walking the lockers list and
++ *            to single thread the use of lockerp->dd_id.
++ *    LOCK_DD protects the DD list of objects.
++ */
++
+ static int
+ __dd_build(env, atype, bmp, nlockers, allocp, idmap, rejectp)
+       ENV *env;
+@@ -393,6 +405,7 @@ __dd_build(env, atype, bmp, nlockers, al
+        * In particular we do not build the conflict array and our caller
+        * needs to expect this.
+        */
++      LOCK_SYSTEM_LOCK(lt, region);
+       if (atype == DB_LOCK_EXPIRE) {
+ skip:         LOCK_DD(env, region);
+               op = SH_TAILQ_FIRST(&region->dd_objs, __db_lockobj);
+@@ -430,17 +443,18 @@ skip:            LOCK_DD(env, region);
+                       OBJECT_UNLOCK(lt, region, indx);
+               }
+               UNLOCK_DD(env, region);
++              LOCK_SYSTEM_UNLOCK(lt, region);
+               goto done;
+       }
+       /*
+-       * We'll check how many lockers there are, add a few more in for
+-       * good measure and then allocate all the structures.  Then we'll
+-       * verify that we have enough room when we go back in and get the
+-       * mutex the second time.
++       * Allocate after locking the region
++       * to make sure the structures are large enough.
+        */
+-retry:        count = region->stat.st_nlockers;
++      LOCK_LOCKERS(env, region);
++      count = region->stat.st_nlockers;
+       if (count == 0) {
++              UNLOCK_LOCKERS(env, region);
+               *nlockers = 0;
+               return (0);
+       }
+@@ -448,50 +462,37 @@ retry:   count = region->stat.st_nlockers;
+       if (FLD_ISSET(env->dbenv->verbose, DB_VERB_DEADLOCK))
+               __db_msg(env, "%lu lockers", (u_long)count);
+-      count += 20;
+       nentries = (u_int32_t)DB_ALIGN(count, 32) / 32;
+-      /*
+-       * Allocate enough space for a count by count bitmap matrix.
+-       *
+-       * XXX
+-       * We can probably save the malloc's between iterations just
+-       * reallocing if necessary because count grew by too much.
+-       */
++      /* Allocate enough space for a count by count bitmap matrix. */
+       if ((ret = __os_calloc(env, (size_t)count,
+-          sizeof(u_int32_t) * nentries, &bitmap)) != 0)
++          sizeof(u_int32_t) * nentries, &bitmap)) != 0) {
++              UNLOCK_LOCKERS(env, region);
+               return (ret);
++      }
+       if ((ret = __os_calloc(env,
+           sizeof(u_int32_t), nentries, &tmpmap)) != 0) {
++              UNLOCK_LOCKERS(env, region);
+               __os_free(env, bitmap);
+               return (ret);
+       }
+       if ((ret = __os_calloc(env,
+           (size_t)count, sizeof(locker_info), &id_array)) != 0) {
++              UNLOCK_LOCKERS(env, region);
+               __os_free(env, bitmap);
+               __os_free(env, tmpmap);
+               return (ret);
+       }
+       /*
+-       * Now go back in and actually fill in the matrix.
+-       */
+-      if (region->stat.st_nlockers > count) {
+-              __os_free(env, bitmap);
+-              __os_free(env, tmpmap);
+-              __os_free(env, id_array);
+-              goto retry;
+-      }
+-
+-      /*
+        * First we go through and assign each locker a deadlock detector id.
+        */
+       id = 0;
+-      LOCK_LOCKERS(env, region);
+       SH_TAILQ_FOREACH(lip, &region->lockers, ulinks, __db_locker) {
+               if (lip->master_locker == INVALID_ROFF) {
++                      DB_ASSERT(env, id < count);
+                       lip->dd_id = id++;
+                       id_array[lip->dd_id].id = lip->id;
+                       switch (atype) {
+@@ -510,7 +511,6 @@ retry:     count = region->stat.st_nlockers;
+                       lip->dd_id = DD_INVALID_ID;
+       }
+-      UNLOCK_LOCKERS(env, region);
+       /*
+        * We only need consider objects that have waiters, so we use
+@@ -669,7 +669,6 @@ again:             memset(bitmap, 0, count * sizeof
+        * status after building the bit maps so that we will not detect
+        * a blocked transaction without noting that it is already aborting.
+        */
+-      LOCK_LOCKERS(env, region);
+       for (id = 0; id < count; id++) {
+               if (!id_array[id].valid)
+                       continue;
+@@ -738,6 +737,7 @@ get_lock:          id_array[id].last_lock = R_OF
+                       id_array[id].in_abort = 1;
+       }
+       UNLOCK_LOCKERS(env, region);
++      LOCK_SYSTEM_UNLOCK(lt, region);
+       /*
+        * Now we can release everything except the bitmap matrix that we
+@@ -839,6 +839,7 @@ __dd_abort(env, info, statusp)
+       ret = 0;
+       /* We must lock so this locker cannot go away while we abort it. */
++      LOCK_SYSTEM_LOCK(lt, region);
+       LOCK_LOCKERS(env, region);
+       /*
+@@ -895,6 +896,7 @@ __dd_abort(env, info, statusp)
+ done: OBJECT_UNLOCK(lt, region, info->last_ndx);
+ err:
+ out:  UNLOCK_LOCKERS(env, region);
++      LOCK_SYSTEM_UNLOCK(lt, region);
+       return (ret);
+ }
diff --git a/package/libs/db47/patches/040-patch.4.7.25.4.patch b/package/libs/db47/patches/040-patch.4.7.25.4.patch
new file mode 100644 (file)
index 0000000..7db4061
--- /dev/null
@@ -0,0 +1,118 @@
+--- a/dbinc/repmgr.h
++++ b/dbinc/repmgr.h
+@@ -374,6 +374,7 @@ typedef struct {
+ #define       SITE_FROM_EID(eid)      (&db_rep->sites[eid])
+ #define       EID_FROM_SITE(s)        ((int)((s) - (&db_rep->sites[0])))
+ #define       IS_VALID_EID(e)         ((e) >= 0)
++#define       IS_KNOWN_REMOTE_SITE(e) ((e) >= 0 && ((u_int)(e)) < db_rep->site_cnt)
+ #define       SELF_EID                INT_MAX
+ #define       IS_PEER_POLICY(p) ((p) == DB_REPMGR_ACKS_ALL_PEERS ||           \
+--- a/rep/rep_elect.c
++++ b/rep/rep_elect.c
+@@ -33,7 +33,7 @@ static int __rep_elect_init
+ static int __rep_fire_elected __P((ENV *, REP *, u_int32_t));
+ static void __rep_elect_master __P((ENV *, REP *));
+ static int __rep_tally __P((ENV *, REP *, int, u_int32_t *, u_int32_t, roff_t));
+-static int __rep_wait __P((ENV *, db_timeout_t *, int *, int, u_int32_t));
++static int __rep_wait __P((ENV *, db_timeout_t *, int, u_int32_t));
+ /*
+  * __rep_elect --
+@@ -55,7 +55,7 @@ __rep_elect(dbenv, given_nsites, nvotes,
+       ENV *env;
+       LOG *lp;
+       REP *rep;
+-      int done, eid, elected, full_elect, locked, in_progress, need_req;
++      int done, elected, full_elect, locked, in_progress, need_req;
+       int ret, send_vote, t_ret;
+       u_int32_t ack, ctlflags, egen, nsites, orig_tally, priority, realpri;
+       u_int32_t tiebreaker;
+@@ -181,8 +181,7 @@ __rep_elect(dbenv, given_nsites, nvotes,
+                       REP_SYSTEM_UNLOCK(env);
+                       (void)__rep_send_message(env, DB_EID_BROADCAST,
+                           REP_MASTER_REQ, NULL, NULL, 0, 0);
+-                      ret = __rep_wait(env, &to, &eid,
+-                          0, REP_F_EPHASE0);
++                      ret = __rep_wait(env, &to, 0, REP_F_EPHASE0);
+                       REP_SYSTEM_LOCK(env);
+                       F_CLR(rep, REP_F_EPHASE0);
+                       switch (ret) {
+@@ -286,11 +285,11 @@ restart:
+               REP_SYSTEM_LOCK(env);
+               goto vote;
+       }
+-      ret = __rep_wait(env, &to, &eid, full_elect, REP_F_EPHASE1);
++      ret = __rep_wait(env, &to, full_elect, REP_F_EPHASE1);
+       switch (ret) {
+               case 0:
+                       /* Check if election complete or phase complete. */
+-                      if (eid != DB_EID_INVALID && !IN_ELECTION(rep)) {
++                      if (!IN_ELECTION(rep)) {
+                               RPRINT(env, DB_VERB_REP_ELECT,
+                                   (env, "Ended election phase 1"));
+                               goto edone;
+@@ -398,15 +397,12 @@ phase2:
+               REP_SYSTEM_LOCK(env);
+               goto i_won;
+       }
+-      ret = __rep_wait(env, &to, &eid, full_elect, REP_F_EPHASE2);
++      ret = __rep_wait(env, &to, full_elect, REP_F_EPHASE2);
+       RPRINT(env, DB_VERB_REP_ELECT,
+           (env, "Ended election phase 2 %d", ret));
+       switch (ret) {
+               case 0:
+-                      if (eid != DB_EID_INVALID)
+-                              goto edone;
+-                      ret = DB_REP_UNAVAIL;
+-                      break;
++                      goto edone;
+               case DB_REP_EGENCHG:
+                       if (to > timeout)
+                               to = timeout;
+@@ -1050,13 +1046,6 @@ __rep_elect_master(env, rep)
+       ENV *env;
+       REP *rep;
+ {
+-      /*
+-       * We often come through here twice, sometimes even more.  We mustn't
+-       * let the redundant calls affect stats counting.  But rep_elect relies
+-       * on this first part for setting eidp.
+-       */
+-      rep->master_id = rep->eid;
+-
+       if (F_ISSET(rep, REP_F_MASTERELECT | REP_F_MASTER)) {
+               /* We've been through here already; avoid double counting. */
+               return;
+@@ -1093,10 +1082,10 @@ __rep_fire_elected(env, rep, egen)
+       (timeout > 5000000) ? 500000 : ((timeout >= 10) ? timeout / 10 : 1);
+ static int
+-__rep_wait(env, timeoutp, eidp, full_elect, flags)
++__rep_wait(env, timeoutp, full_elect, flags)
+       ENV *env;
+       db_timeout_t *timeoutp;
+-      int *eidp, full_elect;
++      int full_elect;
+       u_int32_t flags;
+ {
+       DB_REP *db_rep;
+@@ -1174,7 +1163,6 @@ __rep_wait(env, timeoutp, eidp, full_ele
+                       F_CLR(rep, REP_F_EGENUPDATE);
+                       ret = DB_REP_EGENCHG;
+               } else if (phase_over) {
+-                      *eidp = rep->master_id;
+                       done = 1;
+                       ret = 0;
+               }
+--- a/repmgr/repmgr_net.c
++++ b/repmgr/repmgr_net.c
+@@ -100,6 +100,8 @@ __repmgr_send(dbenv, control, rec, lsnp,
+                   control, rec, &nsites_sent, &npeers_sent)) != 0)
+                       goto out;
+       } else {
++              DB_ASSERT(env, IS_KNOWN_REMOTE_SITE(eid));
++
+               /*
+                * If this is a request that can be sent anywhere, then see if
+                * we can send it to our peer (to save load on the master), but
diff --git a/package/libs/db47/patches/100-repmgr-format-security.patch b/package/libs/db47/patches/100-repmgr-format-security.patch
new file mode 100644 (file)
index 0000000..58cfafd
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/repmgr/repmgr_net.c
++++ b/repmgr/repmgr_net.c
+@@ -1136,7 +1136,7 @@ __repmgr_listen(env)
+       }
+       ret = net_errno;
+-      __db_err(env, ret, why);
++      __db_err(env, ret, "%s", why);
+ clean:        if (s != INVALID_SOCKET)
+               (void)closesocket(s);
+       return (ret);
diff --git a/package/libs/giflib/Makefile b/package/libs/giflib/Makefile
new file mode 100644 (file)
index 0000000..a6174e9
--- /dev/null
@@ -0,0 +1,79 @@
+#
+# Copyright (C) 2006-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=giflib
+PKG_VERSION:=5.2.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@SF/giflib
+PKG_HASH:=31da5562f44c5f15d63340a09a4fd62b48c45620cd302f77a6d9acf0077879bd
+
+PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:giflib_project:giflib
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+PKG_BUILD_FLAGS:=gc-sections
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/giflib
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=GIF libraries
+  URL:=https://sourceforge.net/projects/giflib
+endef
+
+define Package/giflib/description
+  giflib is a library for reading and writing gif images.
+  It is API and ABI compatible with libungif which was in wide use while
+  the LZW compression algorithm was patented.
+endef
+
+define Package/giflib-utils
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=GIF utilities
+  URL:=https://sourceforge.net/projects/giflib
+endef
+
+define Package/giflib-utils/description
+  These are the utilities that come with giflib.
+endef
+
+TARGET_CFLAGS += $(FPIC)
+TARGET_LDFLAGS += -Wl,--as-needed
+
+MAKE_FLAGS += \
+       CFLAGS="$(TARGET_CFLAGS)" \
+       LDFLAGS="$(TARGET_LDFLAGS)" \
+       PREFIX=$(CONFIGURE_PREFIX)
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/{lib,include}
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libgif.so* $(1)/usr/lib
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/lib/libgif.a $(1)/usr/lib
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/*.h $(1)/usr/include
+endef
+
+define Package/giflib/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libgif.so* $(1)/usr/lib
+endef
+
+define Package/giflib-utils/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/* $(1)/usr/bin
+endef
+
+$(eval $(call BuildPackage,giflib))
+$(eval $(call BuildPackage,giflib-utils))
diff --git a/package/libs/keyutils/Makefile b/package/libs/keyutils/Makefile
new file mode 100644 (file)
index 0000000..dee1755
--- /dev/null
@@ -0,0 +1,88 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=keyutils
+PKG_VERSION:=1.6.3
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://git.kernel.org/pub/scm/linux/kernel/git/dhowells/keyutils.git/snapshot/
+PKG_HASH:=a61d5706136ae4c05bd48f86186bcfdbd88dd8bd5107e3e195c924cfc1b39bb4
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libkeyutils
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Key utilities library
+  URL:=https://people.redhat.com/dhowells/keyutils/
+  LICENSE:=LGPL-2.1-or-later
+  LICENSE_FILES:=LICENSE.LGPL
+  ABI_VERSION:=1
+endef
+
+define Package/keyctl
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Encryption
+  TITLE:=keyctl
+  DEPENDS:=+libkeyutils
+  LICENSE:=GPL-2.0-or-later
+  LICENSE_FILES:=LICENSE.GPL
+endef
+
+define Package/keyutils
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Encryption
+  TITLE:=keyutils (request-key and key.dns_resolver)
+  DEPENDS:=+libkeyutils
+  LICENSE:=GPL-2.0-or-later
+  LICENSE_FILES:=LICENSE.GPL
+endef
+
+define Package/keyutils/description
+  Key utilities
+endef
+
+MAKE_FLAGS += \
+       BINDIR=/usr/bin \
+       LIBDIR=/usr/lib \
+       SBINDIR=/usr/sbin \
+       CFLAGS="$(TARGET_CFLAGS) $(FPIC)"
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libkeyutils.a $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libkeyutils.so.$(ABI_VERSION)* $(1)/usr/lib/
+endef
+
+define Package/libkeyutils/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libkeyutils.so.$(ABI_VERSION)* $(1)/usr/lib/
+endef
+
+define Package/keyutils/install
+       $(INSTALL_DIR) $(1)/usr/sbin $(1)/etc/keyutils $(1)/etc/request-key.d
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/request-key $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/key.dns_resolver $(1)/usr/sbin/
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/request-key.conf $(1)/etc/
+endef
+
+define Package/keyctl/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/keyctl $(1)/usr/bin
+endef
+
+$(eval $(call BuildPackage,libkeyutils))
+$(eval $(call BuildPackage,keyutils))
+$(eval $(call BuildPackage,keyctl))
diff --git a/package/libs/keyutils/patches/010-reproducible-build.patch b/package/libs/keyutils/patches/010-reproducible-build.patch
new file mode 100644 (file)
index 0000000..0507f91
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile
++++ b/Makefile
+@@ -109,7 +109,7 @@ all: keyctl request-key key.dns_resolver
+ ###############################################################################
+ #RPATH = -Wl,-rpath,$(LIBDIR)
+-VCPPFLAGS     := -DPKGBUILD="\"$(shell date -u +%F)\""
++VCPPFLAGS     := -DPKGBUILD="\"for OpenWrt"\"
+ VCPPFLAGS     += -DPKGVERSION="\"keyutils-$(VERSION)\""
+ VCPPFLAGS     += -DAPIVERSION="\"libkeyutils-$(APIVERSION)\""
diff --git a/package/libs/keyutils/patches/020-rindex.patch b/package/libs/keyutils/patches/020-rindex.patch
new file mode 100644 (file)
index 0000000..5137518
--- /dev/null
@@ -0,0 +1,17 @@
+--- a/key.dns_resolver.c
++++ b/key.dns_resolver.c
+@@ -717,12 +717,12 @@ int main(int argc, char *argv[])
+       keyend = buf + ktlen + 1;
+       /* the actual key description follows the last semicolon */
+-      keyend = rindex(keyend, ';');
++      keyend = strrchr(keyend, ';');
+       if (!keyend)
+               error("Invalid key description: %s", buf);
+       keyend++;
+-      name = index(keyend, ':');
++      name = strchr(keyend, ':');
+       if (!name)
+               dns_query_a_or_aaaa(keyend, callout_info);
diff --git a/package/libs/libaio/Makefile b/package/libs/libaio/Makefile
new file mode 100644 (file)
index 0000000..e836876
--- /dev/null
@@ -0,0 +1,47 @@
+#
+# Copyright (C) 2007-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libaio
+PKG_VERSION:=0.3.113
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://releases.pagure.org/libaio
+PKG_HASH:=2c44d1c5fd0d43752287c9ae1eb9c023f04ef848ea8d4aafa46e9aedb678200b
+
+PKG_MAINTAINER:=
+PKG_LICENSE:=LGPL-2.1-only
+PKG_LICENSE_FILES:=COPYING
+
+PKG_BUILD_PARALLEL:=1
+PKG_BUILD_FLAGS:=no-mips16
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libaio
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Linux kernel AIO interface access library
+  URL:=http://lse.sourceforge.net/io/aio.html
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/libaio.h $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libaio.{a,so*} $(1)/usr/lib/
+endef
+
+define Package/libaio/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libaio.so.* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libaio))
diff --git a/package/libs/libaio/patches/001_arches.patch b/package/libs/libaio/patches/001_arches.patch
new file mode 100644 (file)
index 0000000..569c9a1
--- /dev/null
@@ -0,0 +1,135 @@
+Description: Add/fix support for m68k, mips, paris, sparc
+Author: Guillem Jover <guillem@debian.org>
+Origin: vendor
+Forwarded: no
+Last-Update: 2014-10-09
+
+
+---
+ harness/main.c       |   10 +++++++++
+ src/libaio.h         |    1 
+ src/syscall-m68k.h   |    5 ++++
+ src/syscall-mips.h   |   54 +++++++++++++++++++++++++++++++++++++++++++++++++++
+ src/syscall-parisc.h |    6 +++++
+ src/syscall.h        |    6 +++++
+ 6 files changed, 82 insertions(+)
+
+--- /dev/null
++++ b/src/syscall-m68k.h
+@@ -0,0 +1,5 @@
++#define __NR_io_setup         241
++#define __NR_io_destroy               242
++#define __NR_io_getevents     243
++#define __NR_io_submit                244
++#define __NR_io_cancel                245
+--- a/src/syscall.h
++++ b/src/syscall.h
+@@ -27,6 +27,12 @@
+ #include "syscall-arm.h"
+ #elif defined(__sparc__)
+ #include "syscall-sparc.h"
++#elif defined(__m68k__)
++#include "syscall-m68k.h"
++#elif defined(__hppa__)
++#include "syscall-parisc.h"
++#elif defined(__mips__)
++#include "syscall-mips.h"
+ #elif defined(__aarch64__) || defined(__loongarch__) || defined(__riscv)
+ #include "syscall-generic.h"
+ #else
+--- /dev/null
++++ b/src/syscall-mips.h
+@@ -0,0 +1,54 @@
++/*
++ * This file is subject to the terms and conditions of the GNU General Public
++ * License.  See the file "COPYING" in the main directory of this archive
++ * for more details.
++ *
++ * Copyright (C) 1995, 96, 97, 98, 99, 2000 by Ralf Baechle
++ * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
++ */
++
++#ifndef _MIPS_SIM_ABI32
++#define _MIPS_SIM_ABI32                       1
++#define _MIPS_SIM_NABI32              2
++#define _MIPS_SIM_ABI64                       3
++#endif
++
++#if _MIPS_SIM == _MIPS_SIM_ABI32
++
++/*
++ * Linux o32 style syscalls are in the range from 4000 to 4999.
++ */
++#define __NR_Linux                    4000
++#define __NR_io_setup                 (__NR_Linux + 241)
++#define __NR_io_destroy                       (__NR_Linux + 242)
++#define __NR_io_getevents             (__NR_Linux + 243)
++#define __NR_io_submit                        (__NR_Linux + 244)
++#define __NR_io_cancel                        (__NR_Linux + 245)
++
++#endif /* _MIPS_SIM == _MIPS_SIM_ABI32 */
++
++#if _MIPS_SIM == _MIPS_SIM_ABI64
++
++/*
++ * Linux 64-bit syscalls are in the range from 5000 to 5999.
++ */
++#define __NR_Linux                    5000
++#define __NR_io_setup                 (__NR_Linux + 200)
++#define __NR_io_destroy                       (__NR_Linux + 201)
++#define __NR_io_getevents             (__NR_Linux + 202)
++#define __NR_io_submit                        (__NR_Linux + 203)
++#define __NR_io_cancel                        (__NR_Linux + 204)
++#endif /* _MIPS_SIM == _MIPS_SIM_ABI64 */
++
++#if _MIPS_SIM == _MIPS_SIM_NABI32
++
++/*
++ * Linux N32 syscalls are in the range from 6000 to 6999.
++ */
++#define __NR_Linux                    6000
++#define __NR_io_setup                 (__NR_Linux + 200)
++#define __NR_io_destroy                       (__NR_Linux + 201)
++#define __NR_io_getevents             (__NR_Linux + 202)
++#define __NR_io_submit                        (__NR_Linux + 203)
++#define __NR_io_cancel                        (__NR_Linux + 204)
++#endif /* _MIPS_SIM == _MIPS_SIM_NABI32 */
+--- a/src/libaio.h
++++ b/src/libaio.h
+@@ -74,6 +74,7 @@ typedef enum io_iocb_cmd {
+ /* big endian, 64 bits */
+ #elif defined(__powerpc64__) || defined(__s390x__) || \
++      (defined(__hppa__) && defined(__arch64__)) || \
+       (defined(__sparc__) && defined(__arch64__)) || \
+       (defined(__aarch64__) && defined(__AARCH64EB__)) || \
+       (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
+--- /dev/null
++++ b/src/syscall-parisc.h
+@@ -0,0 +1,6 @@
++#define __NR_Linux                0
++#define __NR_io_setup           (__NR_Linux + 215)
++#define __NR_io_destroy         (__NR_Linux + 216)
++#define __NR_io_getevents       (__NR_Linux + 217)
++#define __NR_io_submit          (__NR_Linux + 218)
++#define __NR_io_cancel          (__NR_Linux + 219)
+--- a/harness/main.c
++++ b/harness/main.c
+@@ -12,7 +12,17 @@
+ #include <libaio.h>
+ #if __LP64__ == 0
++#if defined(__i386__) || defined(__powerpc__) || defined(__mips__)
+ #define KERNEL_RW_POINTER     ((void *)0xc0010000)
++#elif defined(__arm__) || defined(__m68k__) || defined(__s390__)
++#define KERNEL_RW_POINTER     ((void *)0x00010000)
++#elif defined(__hppa__)
++#define KERNEL_RW_POINTER     ((void *)0x10100000)
++#elif defined(__sparc__)
++#define KERNEL_RW_POINTER     ((void *)0xf0010000)
++#else
++#error Unknown kernel memory address.
++#endif
+ #else
+ //#warning Not really sure where kernel memory is.  Guessing.
+ #define KERNEL_RW_POINTER     ((void *)0xffffffff81000000)
diff --git a/package/libs/libaio/patches/002_arches_sh.patch b/package/libs/libaio/patches/002_arches_sh.patch
new file mode 100644 (file)
index 0000000..db6abea
--- /dev/null
@@ -0,0 +1,66 @@
+Author: Nobuhiro Iwamatsu <iwamatsu@nigauri.org>
+Description: Add SH supprt
+ The test-suite logs can be found at:
+ .
+ <https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=535288>
+
+
+---
+ harness/main.c   |    2 +-
+ src/libaio.h     |    4 +++-
+ src/syscall-sh.h |    6 ++++++
+ src/syscall.h    |    2 ++
+ 4 files changed, 12 insertions(+), 2 deletions(-)
+
+
+--- a/harness/main.c
++++ b/harness/main.c
+@@ -14,7 +14,7 @@
+ #if __LP64__ == 0
+ #if defined(__i386__) || defined(__powerpc__) || defined(__mips__)
+ #define KERNEL_RW_POINTER     ((void *)0xc0010000)
+-#elif defined(__arm__) || defined(__m68k__) || defined(__s390__)
++#elif defined(__arm__) || defined(__m68k__) || defined(__s390__) || defined(__sh__)
+ #define KERNEL_RW_POINTER     ((void *)0x00010000)
+ #elif defined(__hppa__)
+ #define KERNEL_RW_POINTER     ((void *)0x10100000)
+--- a/src/libaio.h
++++ b/src/libaio.h
+@@ -52,7 +52,8 @@ typedef enum io_iocb_cmd {
+ /* little endian, 32 bits */
+ #if defined(__i386__) || (defined(__arm__) && !defined(__ARMEB__)) || \
+-    defined(__sh__) || defined(__bfin__) || defined(__MIPSEL__) || \
++    (defined(__sh__) && defined(__LITTLE_ENDIAN__)) || \
++    defined(__bfin__) || defined(__MIPSEL__) || \
+     defined(__cris__) || defined(__loongarch32) || \
+     (defined(__riscv) && __riscv_xlen == 32) || \
+     (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
+@@ -86,6 +87,7 @@ typedef enum io_iocb_cmd {
+ /* big endian, 32 bits */
+ #elif defined(__PPC__) || defined(__s390__) || \
+       (defined(__arm__) && defined(__ARMEB__)) || \
++      (defined(__sh__) && defined (__BIG_ENDIAN__)) || \
+       defined(__sparc__) || defined(__MIPSEB__) || defined(__m68k__) || \
+       defined(__hppa__) || defined(__frv__) || defined(__avr32__) || \
+       (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
+--- /dev/null
++++ b/src/syscall-sh.h
+@@ -0,0 +1,6 @@
++/* Copy from ./arch/sh/include/asm/unistd_32.h */
++#define __NR_io_setup       245
++#define __NR_io_destroy     246
++#define __NR_io_getevents   247
++#define __NR_io_submit      248
++#define __NR_io_cancel      249
+--- a/src/syscall.h
++++ b/src/syscall.h
+@@ -33,6 +33,8 @@
+ #include "syscall-parisc.h"
+ #elif defined(__mips__)
+ #include "syscall-mips.h"
++#elif defined(__sh__)
++#include "syscall-sh.h"
+ #elif defined(__aarch64__) || defined(__loongarch__) || defined(__riscv)
+ #include "syscall-generic.h"
+ #else
diff --git a/package/libs/libaio/patches/003_arches_mips_fix_padding.patch b/package/libs/libaio/patches/003_arches_mips_fix_padding.patch
new file mode 100644 (file)
index 0000000..539d236
--- /dev/null
@@ -0,0 +1,38 @@
+Description: Fix structure padding for mips64
+Author: Guillem Jover <guillem@debian.org>
+Forwarded: no
+Last-Update: 2014-07-23
+
+
+---
+ src/libaio.h |    5 ++++-
+ 1 file changed, 4 insertions(+), 1 deletion(-)
+
+--- a/src/libaio.h
++++ b/src/libaio.h
+@@ -53,7 +53,8 @@ typedef enum io_iocb_cmd {
+ /* little endian, 32 bits */
+ #if defined(__i386__) || (defined(__arm__) && !defined(__ARMEB__)) || \
+     (defined(__sh__) && defined(__LITTLE_ENDIAN__)) || \
+-    defined(__bfin__) || defined(__MIPSEL__) || \
++    defined(__bfin__) || \
++    (defined(__MIPSEL__) && !defined(__mips64)) || \
+     defined(__cris__) || defined(__loongarch32) || \
+     (defined(__riscv) && __riscv_xlen == 32) || \
+     (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
+@@ -64,6 +65,7 @@ typedef enum io_iocb_cmd {
+ /* little endian, 64 bits */
+ #elif defined(__ia64__) || defined(__x86_64__) || defined(__alpha__) || \
++      (defined(__mips64) && defined(__MIPSEL__)) || \
+       (defined(__aarch64__) && defined(__AARCH64EL__)) || \
+       defined(__loongarch64) || \
+       (defined(__riscv) && __riscv_xlen == 64) || \
+@@ -77,6 +79,7 @@ typedef enum io_iocb_cmd {
+ #elif defined(__powerpc64__) || defined(__s390x__) || \
+       (defined(__hppa__) && defined(__arch64__)) || \
+       (defined(__sparc__) && defined(__arch64__)) || \
++      (defined(__mips64) && defined(__MIPSEB__)) || \
+       (defined(__aarch64__) && defined(__AARCH64EB__)) || \
+       (defined(__GNUC__) && defined(__BYTE_ORDER__) && \
+            __BYTE_ORDER__ == __ORDER_BIG_ENDIAN__ && __SIZEOF_LONG__ == 8)
diff --git a/package/libs/libaio/patches/004_arches_x32.patch b/package/libs/libaio/patches/004_arches_x32.patch
new file mode 100644 (file)
index 0000000..22d3d9b
--- /dev/null
@@ -0,0 +1,43 @@
+Description: Add support for x32 (from the Yocto project)
+Author: Daniel Schepler <dschepler@gmail.com>
+Origin: vendor
+Forwarded: no
+Bug-Debian: 702183
+Last-Update: 2013-05-06
+
+
+---
+ harness/main.c       |    2 +-
+ src/syscall-x86_64.h |   10 ++++++++++
+ 2 files changed, 11 insertions(+), 1 deletion(-)
+
+--- a/src/syscall-x86_64.h
++++ b/src/syscall-x86_64.h
+@@ -1,6 +1,16 @@
++#ifndef __NR_io_setup
+ #define __NR_io_setup         206
++#endif
++#ifndef __NR_io_destroy
+ #define __NR_io_destroy               207
++#endif
++#ifndef __NR_io_getevents
+ #define __NR_io_getevents     208
++#endif
++#ifndef __NR_io_submit
+ #define __NR_io_submit                209
++#endif
++#ifndef __NR_io_cancel
+ #define __NR_io_cancel                210
++#endif
+ #define __NR_io_pgetevents    333
+--- a/harness/main.c
++++ b/harness/main.c
+@@ -14,7 +14,7 @@
+ #if __LP64__ == 0
+ #if defined(__i386__) || defined(__powerpc__) || defined(__mips__)
+ #define KERNEL_RW_POINTER     ((void *)0xc0010000)
+-#elif defined(__arm__) || defined(__m68k__) || defined(__s390__) || defined(__sh__)
++#elif defined(__arm__) || defined(__m68k__) || defined(__s390__) || defined(__sh__) || defined(__x86_64__)
+ #define KERNEL_RW_POINTER     ((void *)0x00010000)
+ #elif defined(__hppa__)
+ #define KERNEL_RW_POINTER     ((void *)0x10100000)
diff --git a/package/libs/libftdi1/Makefile b/package/libs/libftdi1/Makefile
new file mode 100644 (file)
index 0000000..60985f1
--- /dev/null
@@ -0,0 +1,92 @@
+#
+# Copyright (C) 2014-2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libftdi1
+PKG_VERSION:=1.5
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://www.intra2net.com/en/developer/libftdi/download/
+PKG_HASH:=7c7091e9c86196148bd41177b4590dccb1510bfe6cea5bf7407ff194482eb049
+
+PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
+PKG_LICENSE:=LGPL-2.1-only
+PKG_LICENSE_FILES:=COPYING.LIB
+
+CMAKE_INSTALL:=1
+PKG_BUILD_FLAGS:=no-mips16
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/libftdi1
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+libusb-1.0
+  TITLE:=Library to talk to FTDI chips
+  URL:=http://www.intra2net.com/en/developer/libftdi/
+endef
+
+define Package/libftdi1/description
+  libFTDI - FTDI USB driver with bitbang mode
+  libFTDI is an open source library to talk to FTDI chips: FT232BM, FT245BM, FT2232C, FT2232H, FT4232H, FT2232D and FT245R, including the popular bitbang mode. 
+  The library is linked with your program in userspace, no kernel driver required.
+endef
+
+define Package/ftdi_eeprom
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=+confuse +libftdi1
+  TITLE:=Tool for reading/erasing/flashing FTDI USB chip eeproms
+  URL:=http://www.intra2net.com/en/developer/libftdi/
+endef
+
+define Package/ftdi_eeprom/description
+  ftdi_eeprom is a small tool for reading/erasing/flashing FTDI USB chip
+  eeproms. It uses libftdi to access the chip, so you will need to have
+  the required permissions on the device.
+
+  The ftdi_sio module should not be loaded.
+
+  You have to unplug and replug your device to get the new values to be
+  read. Otherwise, you will still get the old values.
+endef
+
+CMAKE_OPTIONS += \
+       -DBUILD_TESTS=OFF \
+       -DDOCUMENTATION=OFF \
+       -DEXAMPLES=OFF
+
+define Build/InstallDev
+       $(call Build/InstallDev/cmake,$(1))
+       $(SED) 's,/usr/bin,/usr,g' $(1)/usr/lib/pkgconfig/libftdi1.pc
+       $(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/libftdi1.pc
+       $(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/libftdi1.pc
+       $(SED) 's,/usr/bin,/usr,g' $(1)/usr/lib/pkgconfig/libftdipp1.pc
+       $(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/libftdipp1.pc
+       $(SED) 's,/usr/lib,$$$${exec_prefix}/lib,g' $(1)/usr/lib/pkgconfig/libftdipp1.pc
+       $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/libftdi1-config
+       $(INSTALL_DIR) $(2)/bin
+       $(LN) ../../usr/bin/libftdi1-config $(2)/bin/libftdi1-config
+endef
+
+define Package/libftdi1/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/libftdi1-config $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libftdi1.so.* $(1)/usr/lib/
+endef
+
+define Package/ftdi_eeprom/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ftdi_eeprom $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,libftdi1))
+$(eval $(call BuildPackage,ftdi_eeprom))
diff --git a/package/libs/libftdi1/patches/100-fix-x86_64-build.patch b/package/libs/libftdi1/patches/100-fix-x86_64-build.patch
new file mode 100644 (file)
index 0000000..12861d9
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/CMakeLists.txt
++++ b/CMakeLists.txt
+@@ -57,7 +57,7 @@ if ( NOT DEFINED LIB_SUFFIX )
+       AND NOT EXISTS "/etc/debian_version"
+       AND NOT EXISTS "/etc/arch-release" )
+     if ( "${CMAKE_SIZEOF_VOID_P}" EQUAL "8" )
+-      set ( LIB_SUFFIX 64 )
++      set ( LIB_SUFFIX "" )
+     endif ()
+   endif ()
+ endif ()
diff --git a/package/libs/libnetfilter-queue/Makefile b/package/libs/libnetfilter-queue/Makefile
new file mode 100644 (file)
index 0000000..abe7aa3
--- /dev/null
@@ -0,0 +1,72 @@
+#
+# Copyright (C) 2009-2013 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libnetfilter_queue
+PKG_VERSION:=1.0.5
+PKG_RELEASE:=4
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=https://www.netfilter.org/projects/libnetfilter_queue/files
+PKG_HASH:=f9ff3c11305d6e03d81405957bdc11aea18e0d315c3e3f48da53a24ba251b9f5
+
+PKG_FIXUP:=autoreconf
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=COPYING
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libnetfilter-queue
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+libmnl +libnfnetlink
+  TITLE:=Userspace API to packets queued by kernel packet filter
+  URL:=https://www.netfilter.org/projects/libnetfilter_queue/
+  ABI_VERSION:=1
+endef
+
+define Package/libnetfilter-queue/description
+ libnetfilter_queue is a userspace library providing a programming
+ interface (API) to packets that have been queued by the kernel
+ packet filter.
+endef
+
+TARGET_CFLAGS += $(FPIC) -D_GNU_SOURCE=1
+
+CONFIGURE_ARGS += \
+       --enable-static \
+       --enable-shared \
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include/libnetfilter_queue
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/include/libnetfilter_queue/*.h \
+               $(1)/usr/include/libnetfilter_queue/
+
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/lib/libnetfilter_queue.{so*,a,la} \
+               $(1)/usr/lib/
+
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libnetfilter_queue.pc \
+               $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/libnetfilter-queue/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) \
+               $(PKG_INSTALL_DIR)/usr/lib/libnetfilter_queue.so.* \
+               $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libnetfilter-queue))
diff --git a/package/libs/libnetfilter-queue/patches/0001-src-add-pkt_buff-function-for-ICMP.patch b/package/libs/libnetfilter-queue/patches/0001-src-add-pkt_buff-function-for-ICMP.patch
new file mode 100644 (file)
index 0000000..7d8346c
--- /dev/null
@@ -0,0 +1,100 @@
+From 662c8f44d53492d2e0ebd430dadef12d580ec330 Mon Sep 17 00:00:00 2001
+From: Etan Kissling <etan_kissling@apple.com>
+Date: Tue, 19 Jan 2021 16:05:39 +0100
+Subject: [PATCH] src: add pkt_buff function for ICMP
+
+Add support for processing ICMP packets using pkt_buff, similar to
+existing library support for TCP and UDP.
+
+Signed-off-by: Etan Kissling <etan_kissling@apple.com>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ include/libnetfilter_queue/Makefile.am        |  1 +
+ .../libnetfilter_queue_icmp.h                 |  8 ++++
+ src/Makefile.am                               |  1 +
+ src/extra/icmp.c                              | 48 +++++++++++++++++++
+ 4 files changed, 58 insertions(+)
+ create mode 100644 include/libnetfilter_queue/libnetfilter_queue_icmp.h
+ create mode 100644 src/extra/icmp.c
+
+--- a/include/libnetfilter_queue/Makefile.am
++++ b/include/libnetfilter_queue/Makefile.am
+@@ -1,5 +1,6 @@
+ pkginclude_HEADERS = libnetfilter_queue.h     \
+                    linux_nfnetlink_queue.h    \
++                   libnetfilter_queue_icmp.h  \
+                    libnetfilter_queue_ipv4.h  \
+                    libnetfilter_queue_ipv6.h  \
+                    libnetfilter_queue_tcp.h   \
+--- /dev/null
++++ b/include/libnetfilter_queue/libnetfilter_queue_icmp.h
+@@ -0,0 +1,8 @@
++#ifndef _LIBNFQUEUE_ICMP_H_
++#define _LIBNFQUEUE_ICMP_H_
++
++struct pkt_buff;
++
++struct icmphdr *nfq_icmp_get_hdr(struct pkt_buff *pktb);
++
++#endif
+--- a/src/Makefile.am
++++ b/src/Makefile.am
+@@ -31,6 +31,7 @@ libnetfilter_queue_la_LDFLAGS = -Wc,-nos
+ libnetfilter_queue_la_SOURCES = libnetfilter_queue.c  \
+                               nlmsg.c                 \
+                               extra/checksum.c        \
++                              extra/icmp.c            \
+                               extra/ipv6.c            \
+                               extra/tcp.c             \
+                               extra/ipv4.c            \
+--- /dev/null
++++ b/src/extra/icmp.c
+@@ -0,0 +1,48 @@
++/*
++ * (C) 2012 by Pablo Neira Ayuso <pablo@netfilter.org>
++ *
++ * This program is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * This code has been sponsored by Vyatta Inc. <http://www.vyatta.com>
++ */
++
++#include <stdio.h>
++#define _GNU_SOURCE
++#include <netinet/ip_icmp.h>
++
++#include <libnetfilter_queue/libnetfilter_queue_icmp.h>
++
++#include "internal.h"
++
++/**
++ * \defgroup icmp ICMP helper functions
++ * @{
++ */
++
++/**
++ * nfq_icmp_get_hdr - get the ICMP header.
++ * \param pktb: pointer to user-space network packet buffer
++ * \returns validated pointer to the ICMP header or NULL if the ICMP header was
++ * not set or if a minimal length check fails.
++ * \note You have to call nfq_ip_set_transport_header() or
++ * nfq_ip6_set_transport_header() first to set the ICMP header.
++ */
++EXPORT_SYMBOL
++struct icmphdr *nfq_icmp_get_hdr(struct pkt_buff *pktb)
++{
++      if (pktb->transport_header == NULL)
++              return NULL;
++
++      /* No room for the ICMP header. */
++      if (pktb_tail(pktb) - pktb->transport_header < sizeof(struct icmphdr))
++              return NULL;
++
++      return (struct icmphdr *)pktb->transport_header;
++}
++
++/**
++ * @}
++ */
diff --git a/package/libs/libnetfilter-queue/patches/0002-src-fix-IPv6-header-handling.patch b/package/libs/libnetfilter-queue/patches/0002-src-fix-IPv6-header-handling.patch
new file mode 100644 (file)
index 0000000..83713f3
--- /dev/null
@@ -0,0 +1,52 @@
+From 51f25df304aeaa6c1b02ef7456a61278ee70c102 Mon Sep 17 00:00:00 2001
+From: Etan Kissling <etan_kissling@apple.com>
+Date: Tue, 9 Feb 2021 23:51:33 +0100
+Subject: [PATCH] src: fix IPv6 header handling
+
+This corrects issues in IPv6 header handling that sometimes resulted
+in an endless loop.
+
+Signed-off-by: Etan Kissling <etan_kissling@apple.com>
+Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
+---
+ src/extra/ipv6.c | 15 +++++++++++++--
+ 1 file changed, 13 insertions(+), 2 deletions(-)
+
+--- a/src/extra/ipv6.c
++++ b/src/extra/ipv6.c
+@@ -67,10 +67,19 @@ int nfq_ip6_set_transport_header(struct
+       uint8_t nexthdr = ip6h->ip6_nxt;
+       uint8_t *cur = (uint8_t *)ip6h + sizeof(struct ip6_hdr);
+-      while (nexthdr != target) {
++      while (nexthdr == IPPROTO_HOPOPTS ||
++             nexthdr == IPPROTO_ROUTING ||
++             nexthdr == IPPROTO_FRAGMENT ||
++             nexthdr == IPPROTO_AH ||
++             nexthdr == IPPROTO_NONE ||
++             nexthdr == IPPROTO_DSTOPTS) {
+               struct ip6_ext *ip6_ext;
+               uint32_t hdrlen;
++              /* Extension header was requested, we're done. */
++              if (nexthdr == target)
++                      break;
++
+               /* No more extensions, we're done. */
+               if (nexthdr == IPPROTO_NONE) {
+                       cur = NULL;
+@@ -107,11 +116,13 @@ int nfq_ip6_set_transport_header(struct
+               } else if (nexthdr == IPPROTO_AH)
+                       hdrlen = (ip6_ext->ip6e_len + 2) << 2;
+               else
+-                      hdrlen = ip6_ext->ip6e_len;
++                      hdrlen = (ip6_ext->ip6e_len + 1) << 3;
+               nexthdr = ip6_ext->ip6e_nxt;
+               cur += hdrlen;
+       }
++      if (nexthdr != target)
++              cur = NULL;
+       pktb->transport_header = cur;
+       return cur ? 1 : 0;
+ }
diff --git a/package/libs/libssh/Makefile b/package/libs/libssh/Makefile
new file mode 100644 (file)
index 0000000..d2b1e7d
--- /dev/null
@@ -0,0 +1,68 @@
+#
+# Copyright (C) 2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libssh
+PKG_VERSION:=0.10.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=https://www.libssh.org/files/0.10/
+PKG_HASH:=07392c54ab61476288d1c1f0a7c557b50211797ad00c34c3af2bbc4dbc4bd97d
+
+PKG_MAINTAINER:=Mislav Novakovic <mislav.novakovic@sartura.hr>
+PKG_LICENSE:=LGPL-2.1-or-later BSD-2-Clause
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:libssh:libssh
+
+CMAKE_INSTALL:=1
+CMAKE_BINARY_SUBDIR:=build
+PKG_BUILD_FLAGS:=no-mips16
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/libssh
+  SECTION:=libs
+  CATEGORY:=Libraries
+  URL:=$(PKG_SOURCE_URL)
+  TITLE:=SSH library
+  DEPENDS:=+libpthread +librt +zlib +libopenssl
+endef
+
+define Package/libssh/description
+ libssh is a mulitplatform C library implementing the SSHv2 and SSHv1 protocol
+ for client and server implementations.
+endef
+
+CMAKE_OPTIONS += \
+       -DHAVE_STRTOULL=1 \
+       -DHAVE_GETADDRINFO=1 \
+       -DHAVE_TERMIOS_H=1 \
+       -DWITH_EXAMPLES:BOOL=OFF \
+       -DWITH_GCRYPT:BOOL=OFF \
+       -DWITH_GSSAPI:BOOL=OFF \
+       -DWITH_LIBZ:BOOL=ON \
+       -DWITH_NACL:BOOL=OFF \
+       -DWITH_PCAP:BOOL=OFF \
+       -DWITH_SERVER:BOOL=ON \
+       -DWITH_SFTP:BOOL=ON \
+       -UWITH_STACK_CLASH_PROTECTION \
+       -DWITH_STACK_CLASH_PROTECTION=0 \
+       -UWITH_STACK_PROTECTOR \
+       -DWITH_STACK_PROTECTOR=0 \
+       -UWITH_STACK_PROTECTOR_STRONG \
+       -DWITH_STACK_PROTECTOR_STRONG=0 \
+       -DHAVE_WORDS_BIGENDIAN=$(if $(CONFIG_BIG_ENDIAN),1,0)
+
+define Package/libssh/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libssh* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libssh))
diff --git a/package/libs/libtirpc/Makefile b/package/libs/libtirpc/Makefile
new file mode 100644 (file)
index 0000000..3982c39
--- /dev/null
@@ -0,0 +1,56 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libtirpc
+PKG_VERSION:=1.3.3
+PKG_RELEASE:=1
+
+PKG_SOURCE_URL:=@SF/libtirpc
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_HASH:=6474e98851d9f6f33871957ddee9714fdcd9d8a5ee9abb5a98d63ea2e60e12f3
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=COPYING
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+HOST_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+
+define Package/libtirpc
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Library TI RPC for RPC bindings
+  URL:=http://libtirpc.sourceforge.net/
+  DEPENDS:=+libpthread
+endef
+
+CONFIGURE_ARGS += --disable-gssapi
+HOST_CONFIGURE_ARGS += --disable-gssapi --disable-shared
+
+ifeq ($(HOST_OS),Darwin)
+HOST_CONFIGURE_ARGS += --disable-symvers
+endif
+
+TARGET_CFLAGS += -DGQ
+HOST_CFLAGS += -DGQ
+
+define Package/libtirpc/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libtirpc.so* $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/etc
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/netconfig $(1)/etc/
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libtirpc.{a,so*} $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libtirpc.pc $(1)/usr/lib/pkgconfig/libtirpc.pc
+endef
+
+$(eval $(call HostBuild))
+$(eval $(call BuildPackage,libtirpc))
diff --git a/package/libs/libtirpc/patches/001-clang.patch b/package/libs/libtirpc/patches/001-clang.patch
new file mode 100644 (file)
index 0000000..53da7f8
--- /dev/null
@@ -0,0 +1,103 @@
+--- a/tirpc/reentrant.h
++++ b/tirpc/reentrant.h
+@@ -36,7 +36,7 @@
+  * These definitions are only guaranteed to be valid on Linux. 
+  */
+-#if defined(__linux__)
++#if defined(__linux__) || defined(__MACH__)
+ #include <pthread.h>
+--- a/tirpc/rpc/rpcent.h
++++ b/tirpc/rpc/rpcent.h
+@@ -50,7 +50,7 @@ extern "C" {
+ /* These are defined in /usr/include/rpc/netdb.h, unless we are using
+    the C library without RPC support. */
+-#if defined(__UCLIBC__) && !defined(__UCLIBC_HAS_RPC__) || !defined(__GLIBC__)
++#if (defined(__UCLIBC__) && !defined(__UCLIBC_HAS_RPC__) || !defined(__GLIBC__)) && !defined(__MACH__)
+ struct rpcent {
+       char    *r_name;        /* name of server for this rpc program */
+       char    **r_aliases;    /* alias list */
+--- a/src/rpc_com.h
++++ b/src/rpc_com.h
+@@ -63,6 +63,14 @@ void __xprt_set_raddr(SVCXPRT *, const s
+ extern int __svc_maxrec;
++#ifndef SOL_IP
++#define SOL_IP IPPROTO_IP
++#endif
++
++#ifndef SOL_IPV6
++#define SOL_IPV6 IPPROTO_IPV6
++#endif
++
+ #ifdef __cplusplus
+ }
+ #endif
+--- a/src/svc_dg.c
++++ b/src/svc_dg.c
+@@ -37,6 +37,11 @@
+  *
+  * Does some caching in the hopes of achieving execute-at-most-once semantics.
+  */
++
++#ifdef __APPLE__
++#define __APPLE_USE_RFC_3542
++#endif
++
+ #include <pthread.h>
+ #include <reentrant.h>
+ #include <sys/types.h>
+--- a/src/svc_raw.c
++++ b/src/svc_raw.c
+@@ -43,6 +43,7 @@
+ #include <sys/types.h>
+ #include <rpc/raw.h>
+ #include <stdlib.h>
++#include <string.h>
+ #ifndef UDPMSGSIZE
+ #define       UDPMSGSIZE 8800
+--- a/src/getpeereid.c
++++ b/src/getpeereid.c
+@@ -29,12 +29,17 @@
+ #include <sys/socket.h>
+ #include <sys/un.h>
++#if __APPLE__ || __FreeBSD__
++#include <sys/ucred.h>
++#endif
++
+ #include <errno.h>
+ #include <unistd.h>
+ int
+ getpeereid(int s, uid_t *euid, gid_t *egid)
+ {
++#if defined(SO_PEERCRED)
+       struct ucred uc;
+       socklen_t uclen;
+       int error;
+@@ -48,4 +53,19 @@ getpeereid(int s, uid_t *euid, gid_t *eg
+       *euid = uc.uid;
+       *egid = uc.gid;
+       return (0);
++#elif defined(LOCAL_PEERCRED)
++      struct xucred uc;
++      socklen_t uclen;
++      int error;
++
++      uclen = sizeof(uc);
++      error = getsockopt(s, SOL_LOCAL, LOCAL_PEERCRED, &uc, &uclen); /*  SCM_CREDENTIALS */
++      if (error != 0)
++              return (error);
++      *euid = uc.cr_uid;
++      *egid = uc.cr_gid;
++      return (0);
++#else
++      return (ENOTSUP);
++#endif
+  }
diff --git a/package/libs/libuv/Makefile b/package/libs/libuv/Makefile
new file mode 100644 (file)
index 0000000..df691ed
--- /dev/null
@@ -0,0 +1,59 @@
+#
+# Copyright (C) 2015-2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libuv
+PKG_VERSION:=1.48.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://dist.libuv.org/dist/v$(PKG_VERSION)/
+PKG_HASH:=7f1db8ac368d89d1baf163bac1ea5fe5120697a73910c8ae6b2fffb3551d59fb
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-v$(PKG_VERSION)
+
+PKG_MAINTAINER:=Marko Ratkaj <markoratkaj@gmail.com>
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+PKG_CPE_ID:=cpe:/a:libuv_project:libuv
+
+CMAKE_BINARY_SUBDIR:=out/cmake
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/libuv
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=Cross-platform asychronous I/O library
+  URL:=https://libuv.org/
+  DEPENDS:=+libpthread +librt
+  ABI_VERSION:=1
+endef
+
+define Package/libuv/description
+ libuv is a multi-platform support library with a focus on asynchronous I/O. It
+ was primarily developed for use by Node.js, but it's also used by Luvit, Julia,
+ pyuv, and others.
+endef
+
+CMAKE_OPTIONS += -DBUILD_TESTING=OFF
+
+define Build/InstallDev
+       $(call Build/InstallDev/cmake,$(1))
+       $(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/libuv.pc
+       $(SED) 's,/usr/lib,$$$${prefix}/lib,g' $(1)/usr/lib/pkgconfig/libuv.pc
+       $(SED) 's,/usr/include,$$$${prefix}/include,g' $(1)/usr/lib/pkgconfig/libuv-static.pc
+       $(SED) 's,/usr/lib,$$$${prefix}/lib,g' $(1)/usr/lib/pkgconfig/libuv-static.pc
+endef
+
+define Package/libuv/install
+       $(INSTALL_DIR) $(1)/usr/lib/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libuv.so* $(1)/usr/lib/
+endef
+
+$(eval $(call BuildPackage,libuv))
diff --git a/package/libs/libwebsockets/Makefile b/package/libs/libwebsockets/Makefile
new file mode 100644 (file)
index 0000000..c71510b
--- /dev/null
@@ -0,0 +1,113 @@
+#
+# Copyright (C) 2014-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=libwebsockets
+PKG_VERSION:=4.3.2
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_SUBDIR:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_URL:=https://codeload.github.com/warmcat/libwebsockets/tar.gz/v$(PKG_VERSION)?
+PKG_HASH:=6a85a1bccf25acc7e8e5383e4934c9b32a102880d1e4c37c70b27ae2a42406e1
+
+PKG_SOURCE_VERSION:=v$(PKG_VERSION)
+
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_BUILD_DEPENDS:=libubox
+
+CMAKE_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+CMAKE_OPTIONS += -DLWS_IPV6=$(if $(CONFIG_IPV6),ON,OFF)
+CMAKE_OPTIONS += -DISABLE_WERROR=ON
+CMAKE_OPTIONS += -DCMAKE_BUILD_TYPE=Release
+CMAKE_OPTIONS += -DLWS_WITH_EXTERNAL_POLL=ON
+CMAKE_OPTIONS += -DLWS_WITH_ULOOP=ON
+
+# turn off all test apps
+CMAKE_OPTIONS += -DLWS_WITHOUT_TESTAPPS=ON
+CMAKE_OPTIONS += -DLWS_WITHOUT_TEST_SERVER=ON
+CMAKE_OPTIONS += -DLWS_WITHOUT_TEST_SERVER_EXTPOLL=ON
+CMAKE_OPTIONS += -DLWS_WITHOUT_TEST_PING=ON
+CMAKE_OPTIONS += -DLWS_WITHOUT_TEST_CLIENT=ON
+
+define Package/libwebsockets/Default
+       SECTION:=libs
+       CATEGORY:=Libraries
+       TITLE:=libwebsockets
+       DEPENDS:=+zlib +libcap +libubox
+       URL:=https://libwebsockets.org
+       MAINTAINER:=Karl Palsson <karlp@etactica.com>
+endef
+
+define Package/libwebsockets-openssl
+       $(call Package/libwebsockets/Default)
+       TITLE += (OpenSSL)
+       DEPENDS += +libopenssl
+       VARIANT:=openssl
+       CONFLICTS:=libwebsockets-full
+endef
+
+define Package/libwebsockets-mbedtls
+       $(call Package/$(PKG_NAME)/Default)
+       TITLE += (mbedTLS)
+       DEPENDS += +libmbedtls
+       VARIANT:=mbedtls
+       PROVIDES:=libwebsockets
+       CONFLICTS:=libwebsockets-openssl
+endef
+
+define Package/libwebsockets-full
+       $(call Package/libwebsockets/Default)
+       TITLE += (Full - OpenSSL, libuv, plugins, CGI)
+       DEPENDS += +libopenssl +libuv
+       VARIANT:=full
+       PROVIDES:=libwebsockets libwebsockets-openssl
+endef
+
+ifeq ($(BUILD_VARIANT),openssl)
+    CMAKE_OPTIONS += -DLWS_OPENSSL_CLIENT_CERTS=/etc/ssl/certs
+    CMAKE_OPTIONS += -DLWS_WITH_SSL=ON
+endif
+
+ifeq ($(BUILD_VARIANT),mbedtls)
+    CMAKE_OPTIONS += -DLWS_WITH_MBEDTLS=1
+endif
+
+ifeq ($(BUILD_VARIANT),full)
+    CMAKE_OPTIONS += -DLWS_OPENSSL_CLIENT_CERTS=/etc/ssl/certs
+    CMAKE_OPTIONS += -DLWS_WITH_SSL=ON
+    CMAKE_OPTIONS += -DLWS_WITH_LIBUV=ON
+    CMAKE_OPTIONS += -DLWS_WITH_PLUGINS=ON
+    CMAKE_OPTIONS += -DLWS_WITH_SERVER_STATUS=ON
+    CMAKE_OPTIONS += -DLWS_WITH_ACCESS_LOG=ON
+    CMAKE_OPTIONS += -DLWS_WITH_CGI=ON
+    CMAKE_OPTIONS += -DLWS_UNIX_SOCK=ON
+endif
+
+define Package/libwebsockets/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libwebsockets*.so* $(1)/usr/lib/
+endef
+
+Package/libwebsockets-mbedtls/install = $(Package/libwebsockets/install)
+Package/libwebsockets-openssl/install = $(Package/libwebsockets/install)
+
+define Package/libwebsockets-full/install
+       $(call Package/libwebsockets/install,$(1))
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libwebsockets-evlib_uv.so* $(1)/usr/lib
+endef
+
+$(eval $(call BuildPackage,libwebsockets-openssl))
+$(eval $(call BuildPackage,libwebsockets-mbedtls))
+$(eval $(call BuildPackage,libwebsockets-full))
diff --git a/package/luci/applications/luci-app-ddns/Makefile b/package/luci/applications/luci-app-ddns/Makefile
new file mode 100644 (file)
index 0000000..2ebb0c8
--- /dev/null
@@ -0,0 +1,20 @@
+#
+# Copyright 2008 Steven Barth <steven@midlink.org>
+# Copyright 2008 Jo-Philipp Wich <jow@openwrt.org>
+# Copyright 2013 Manuel Munz <freifunk at somakoma dot de>
+# Copyright 2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# This is free software, licensed under the Apache License, Version 2.0
+
+include $(TOPDIR)/rules.mk
+
+PKG_LICENSE:=Apache-2.0
+PKG_MAINTAINER:=Ansuel Smith <ansuelsmth@gmail.com>
+
+LUCI_TITLE:=LuCI Support for Dynamic DNS Client (ddns-scripts)
+LUCI_DEPENDS:=+luci-mod-admin-full +luci-lua-runtime +ddns-scripts
+LUCI_PKGARCH:=all
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/package/luci/applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js b/package/luci/applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js
new file mode 100644 (file)
index 0000000..4a234c2
--- /dev/null
@@ -0,0 +1,1162 @@
+'use strict';
+'require ui';
+'require view';
+'require dom';
+'require poll';
+'require uci';
+'require rpc';
+'require fs';
+'require form';
+'require tools.widgets as widgets';
+
+return view.extend({
+
+       NextUpdateStrings : {
+               'Verify' : _("Verify"),
+               'Run once' : _("Run once"),
+               'Disabled' : _("Disabled"),
+               'Stopped' : _("Stopped")
+       },
+
+       time_res : {
+               seconds : 1,
+               minutes : 60,
+               hours : 3600,
+       },
+
+       callGetLogServices: rpc.declare({
+               object: 'luci.ddns',
+               method: 'get_services_log',
+               params: [ 'service_name' ],
+               expect: {  },
+       }),
+
+       callInitAction: rpc.declare({
+               object: 'luci',
+               method: 'setInitAction',
+               params: [ 'name', 'action' ],
+               expect: { result: false }
+       }),
+
+       callDDnsGetStatus: rpc.declare({
+               object: 'luci.ddns',
+               method: 'get_ddns_state',
+               expect: {  }
+       }),
+
+       callDDnsGetEnv: rpc.declare({
+               object: 'luci.ddns',
+               method: 'get_env',
+               expect: {  }
+       }),
+
+       callDDnsGetServicesStatus: rpc.declare({
+               object: 'luci.ddns',
+               method: 'get_services_status',
+               expect: {  }
+       }),
+
+       services: {},
+
+       /*
+        * Services list is gen by 3 different source:
+        * 1. /usr/share/ddns/default contains the service installed by opkg
+        * 2. /usr/share/ddns/custom contains any service installed by the
+        *    user or the ddns script (for example when service are
+        *    downloaded)
+        * 3. /usr/share/ddns/list contains all the service that can be
+        *    downloaded by using the ddns script ('service on demand' feature)
+        *
+        * (Special services that requires a dedicated package ARE NOT
+        * supported by the 'service on demand' feature)
+        */
+       callGenServiceList: function(m, ev) {
+               return Promise.all([
+                       L.resolveDefault(fs.list('/usr/share/ddns/default'), []),
+                       L.resolveDefault(fs.list('/usr/share/ddns/custom'), []),
+                       L.resolveDefault(fs.read('/usr/share/ddns/list'), null)
+               ]).then(L.bind(function (data) {
+                       var default_service = data[0],
+                               custom_service = data[1],
+                               list_service = data[2] && data[2].split("\n") || [],
+                               _this = this;
+
+                       this.services = {};
+
+                       default_service.forEach(function (service) {
+                               _this.services[service.name.replace('.json','')] = true
+                       });
+
+                       custom_service.forEach(function (service) {
+                               _this.services[service.name.replace('.json','')] = true
+                       });
+
+                       this.services = Object.fromEntries(Object.entries(this.services).sort());
+
+                       list_service.forEach(function (service) {
+                               if (!_this.services[service])
+                                       _this.services[service] = false;
+                       });
+               }, this))
+       },
+
+       /*
+       * Check if the service is supported.
+       * If the script doesn't find any json assume a 'service on demand' install.
+       * If a json is found check if the ip type is supported.
+       * Invalidate the service_name if is not supported.
+       */
+       handleCheckService : function(s, service_name, ipv6, ev, section_id) {
+
+               var value = service_name.formvalue(section_id);
+               s.service_supported = null;
+               service_name.triggerValidation(section_id);
+
+               return this.handleGetServiceData(value)
+                       .then(L.bind(function (service_data) {
+                               if (value != '-' && service_data) {
+                                       service_data = JSON.parse(service_data);
+                                       if (ipv6.formvalue(section_id) == "1" && !service_data.ipv6) {
+                                               s.service_supported = false;
+                                               return;
+                                       }
+                               }
+                               s.service_supported = true;
+                       }, service_name))
+                       .then(L.bind(service_name.triggerValidation, service_name, section_id))
+       },
+
+       handleGetServiceData: function(service) {
+               return Promise.all([
+                       L.resolveDefault(fs.read('/usr/share/ddns/custom/'+service+'.json'), null),
+                       L.resolveDefault(fs.read('/usr/share/ddns/default/'+service+'.json'), null)
+               ]).then(function(data) {
+                       return data[0] || data[1] || null;
+               })
+       },
+
+       handleInstallService: function(m, service_name, section_id, section, _this, ev) {
+               var service = service_name.formvalue(section_id)
+               return fs.exec('/usr/bin/ddns', ['service', 'install', service])
+                       .then(L.bind(_this.callGenServiceList, _this))
+                       .then(L.bind(m.render, m))
+                       .then(L.bind(this.renderMoreOptionsModal, this, section))
+                       .catch(function(e) { ui.addNotification(null, E('p', e.message)) });
+       },
+
+       handleRefreshServicesList: function(m, ev) {
+               return fs.exec('/usr/bin/ddns', ['service', 'update'])
+                       .then(L.bind(this.load, this))
+                       .then(L.bind(this.render, this))
+                       .catch(function(e) { ui.addNotification(null, E('p', e.message)) });
+       },
+
+       handleReloadDDnsRule: function(m, section_id, ev) {
+               return fs.exec('/usr/lib/ddns/dynamic_dns_lucihelper.sh',
+                                                       [ '-S', section_id, '--', 'start' ])
+                       .then(L.bind(m.load, m))
+                       .then(L.bind(m.render, m))
+                       .catch(function(e) { ui.addNotification(null, E('p', e.message)) });
+       },
+
+       HandleStopDDnsRule: function(m, section_id, ev) {
+               return fs.exec('/usr/lib/ddns/dynamic_dns_lucihelper.sh',
+                                                       [ '-S', section_id, '--', 'start' ])
+                       .then(L.bind(m.render, m))
+                       .catch(function(e) { ui.addNotification(null, E('p', e.message)) });
+       },
+
+       handleToggleDDns: function(m, ev) {
+               return this.callInitAction('ddns', 'enabled')
+                       .then(L.bind(function (action) { return this.callInitAction('ddns', action ? 'disable' : 'enable')}, this))
+                       .then(L.bind(function (action) { return this.callInitAction('ddns', action ? 'stop' : 'start')}, this))
+                       .then(L.bind(m.render, m))
+                       .catch(function(e) { ui.addNotification(null, E('p', e.message)) });
+       },
+
+       handleRestartDDns: function(m, ev) {
+               return this.callInitAction('ddns', 'restart')
+                       .then(L.bind(m.render, m));
+       },
+
+       poll_status: function(map, data) {
+               var status = data[1] || [], service = data[0] || [], rows = map.querySelectorAll('.cbi-section-table-row[data-sid]'),
+                       section_id, cfg_detail_ip, cfg_update, cfg_status, host, ip, last_update,
+                       next_update, service_status, reload, cfg_enabled, stop,
+                       ddns_enabled = map.querySelector('[data-name="_enabled"]').querySelector('.cbi-value-field'),
+                       ddns_toggle = map.querySelector('[data-name="_toggle"]').querySelector('button'),
+                       services_list = map.querySelector('[data-name="_services_list"]').querySelector('.cbi-value-field');
+
+               ddns_toggle.innerHTML = status['_enabled'] ? _('Stop DDNS') : _('Start DDNS')
+               services_list.innerHTML = status['_services_list'];
+
+               dom.content(ddns_enabled, function() {
+                       return E([], [
+                               E('div', {}, status['_enabled'] ? _('DDNS Autostart enabled') : [
+                                       _('DDNS Autostart disabled'),
+                                       E('div', { 'class' : 'cbi-value-description' },
+                                       _("Currently DDNS updates are not started at boot or on interface events.") + "<br />" +
+                                       _("This is the default if you run DDNS scripts by yourself (i.e. via cron with force_interval set to '0')"))
+                               ]),]);
+               });
+
+               for (var i = 0; i < rows.length; i++) {
+                       section_id = rows[i].getAttribute('data-sid');
+                       cfg_detail_ip = rows[i].querySelector('[data-name="_cfg_detail_ip"]');
+                       cfg_update = rows[i].querySelector('[data-name="_cfg_update"]');
+                       cfg_status = rows[i].querySelector('[data-name="_cfg_status"]');
+                       reload = rows[i].querySelector('.cbi-section-actions .reload');
+                       stop = rows[i].querySelector('.cbi-section-actions .stop');
+                       cfg_enabled = uci.get('ddns', section_id, 'enabled');
+
+                       reload.disabled = (status['_enabled'] == 0 || cfg_enabled == 0);
+
+                       host = uci.get('ddns', section_id, 'lookup_host') || _('Configuration Error');
+                       ip =  _('No Data');
+                       last_update = _('Never');
+                       next_update = _('Unknown');
+                       service_status = '<b>' + _('Not Running') + '</b>';
+
+                       if (service[section_id]) {
+                               stop.disabled = (!service[section_id].pid || (service[section_id].pid && cfg_enabled == '1'));
+                               if (service[section_id].ip)
+                                       ip = service[section_id].ip;
+                               if (service[section_id].last_update)
+                                       last_update = service[section_id].last_update;
+                               if (service[section_id].next_update)
+                                       next_update = this.NextUpdateStrings[service[section_id].next_update] || service[section_id].next_update;
+                               if (service[section_id].pid)
+                                       service_status = '<b>' + _('Running') + '</b> : ' + service[section_id].pid;
+                       }
+
+                       cfg_detail_ip.innerHTML = host + '<br />' + ip;
+                       cfg_update.innerHTML = last_update + '<br />' + next_update;
+                       cfg_status.innerHTML = service_status;
+               }
+
+               return;
+       },
+
+       load: function() {
+               return Promise.all([
+                       this.callDDnsGetServicesStatus(),
+                       this.callDDnsGetStatus(),
+                       this.callDDnsGetEnv(),
+                       this.callGenServiceList(),
+                       uci.load('ddns')
+               ]);
+       },
+
+       render: function(data) {
+               var resolved = data[0] || [];
+               var status = data[1] || [];
+               var env = data[2] || [];
+               var logdir = uci.get('ddns', 'global', 'ddns_logdir') || "/var/log/ddns";
+
+               var _this = this;
+
+               var m, s, o;
+
+               m = new form.Map('ddns', _('Dynamic DNS'));
+
+               s = m.section(form.NamedSection, 'global', 'ddns',);
+
+               s.tab('info', _('Information'));
+               s.tab('global', _('Global Settings'));
+
+               o = s.taboption('info', form.DummyValue, '_version', _('Dynamic DNS Version'));
+               o.cfgvalue = function() {
+                       return status[this.option];
+               };
+
+               o = s.taboption('info', form.DummyValue, '_enabled', _('State'));
+               o.cfgvalue = function() {
+                       var res = status[this.option];
+                       if (!res) {
+                               this.description = _("Currently DDNS updates are not started at boot or on interface events.") + "<br />" +
+                               _("This is the default if you run DDNS scripts by yourself (i.e. via cron with force_interval set to '0')")
+                       }
+                       return res ? _('DDNS Autostart enabled') : _('DDNS Autostart disabled')
+               };
+
+               o = s.taboption('info', form.Button, '_toggle');
+               o.title      = '&#160;';
+               o.inputtitle = _((status['_enabled'] ? 'stop' : 'start').toUpperCase() + ' DDns');
+               o.inputstyle = 'apply';
+               o.onclick = L.bind(this.handleToggleDDns, this, m);
+
+               o = s.taboption('info', form.Button, '_restart');
+               o.title      = '&#160;';
+               o.inputtitle = _('Restart DDns');
+               o.inputstyle = 'apply';
+               o.onclick = L.bind(this.handleRestartDDns, this, m);
+
+               o = s.taboption('info', form.DummyValue, '_services_list', _('Services list last update'));
+               o.cfgvalue = function() {
+                       return status[this.option];
+               };
+
+               o = s.taboption('info', form.Button, '_refresh_services');
+               o.title      = '&#160;';
+               o.inputtitle = _('Update DDns Services List');
+               o.inputstyle = 'apply';
+               o.onclick = L.bind(this.handleRefreshServicesList, this, m);
+
+               // DDns hints
+
+               if (!env['has_ipv6']) {
+                       o = s.taboption('info', form.DummyValue, '_no_ipv6');
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("IPv6 not supported") + '</b>';
+                       o.cfgvalue = function() { return _("IPv6 is currently not (fully) supported by this system") + "<br />" +
+                       _("Please follow the instructions on OpenWrt's homepage to enable IPv6 support") + "<br />" +
+                       _("or update your system to the latest OpenWrt Release")};
+               }
+
+               if (!env['has_ssl']) {
+                       o = s.taboption('info', form.DummyValue, '_no_https');
+                       o.titleref = L.url("admin", "system", "opkg")
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("HTTPS not supported") + '</b>';
+                       o.cfgvalue = function() { return _("Neither GNU Wget with SSL nor cURL installed to support secure updates via HTTPS protocol.") +
+                       "<br />- " +
+                       _("You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-*ssl' package.") +
+                       "<br />- " +
+                       _("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.")};
+               }
+
+               if (!env['has_bindnet']) {
+                       o = s.taboption('info', form.DummyValue, '_no_bind_network');
+                       o.titleref = L.url("admin", "system", "opkg")
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("Binding to a specific network not supported") + '</b>';
+                       o.cfgvalue = function() { return _("Neither GNU Wget with SSL nor cURL installed to select a network to use for communication.") +
+                       "<br />- " +
+                       _("You should install 'wget' or 'curl' package.") +
+                       "<br />- " +
+                       _("GNU Wget will use the IP of given network, cURL will use the physical interface.") +
+                       "<br />- " +
+                       _("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.")};
+               }
+
+               if (!env['has_proxy']) {
+                       o = s.taboption('info', form.DummyValue, '_no_proxy');
+                       o.titleref = L.url("admin", "system", "opkg")
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("cURL without Proxy Support") + '</b>';
+                       o.cfgvalue = function() { return _("cURL is installed, but libcurl was compiled without proxy support.") +
+                       "<br />- " +
+                       _("You should install 'wget' or 'uclient-fetch' package or replace libcurl.") +
+                       "<br />- " +
+                       _("In some versions cURL/libcurl in OpenWrt is compiled without proxy support.")};
+               }
+
+               if (!env['has_forceip']) {
+                       o = s.taboption('info', form.DummyValue, '_no_force_ip');
+                       o.titleref = L.url("admin", "system", "opkg")
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("Force IP Version not supported") + '</b>';
+                       o.cfgvalue = function() { return _("BusyBox's nslookup and Wget do not support to specify " +
+                               "the IP version to use for communication with DDNS Provider!") +
+                               "<br />- " + _("You should install 'wget' or 'curl' or 'uclient-fetch' package.")
+                       };
+               }
+
+               if (!env['has_bindhost']) {
+                       o = s.taboption('info', form.DummyValue, '_no_dnstcp');
+                       o.titleref = L.url("admin", "system", "opkg")
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("DNS requests via TCP not supported") + '</b>';
+                       o.cfgvalue = function() { return _("BusyBox's nslookup and hostip do not support to specify to use TCP " +
+                               "instead of default UDP when requesting DNS server!") +
+                               "<br />- " +
+                               _("You should install 'bind-host' or 'knot-host' or 'drill' package for DNS requests.")};
+               }
+
+               if (!env['has_dnsserver']) {
+                       o = s.taboption('info', form.DummyValue, '_no_dnsserver');
+                       o.titleref = L.url("admin", "system", "opkg")
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("Using specific DNS Server not supported") + '</b>';
+                       o.cfgvalue = function() { return _("BusyBox's nslookup in the current compiled version " +
+                       "does not handle given DNS Servers correctly!") +
+               "<br />- " +
+               _("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.")};
+               }
+
+               if (env['has_ssl'] && !env['has_cacerts']) {
+                       o = s.taboption('info', form.DummyValue, '_no_certs');
+                       o.titleref = L.url("admin", "system", "opkg")
+                       o.rawhtml  = true;
+                       o.title = '<b>' + _("No certificates found") + '</b>';
+                       o.cfgvalue = function() { return _("If using secure communication you should verify server certificates!") +
+                       "<br />- " +
+                       _("Install 'ca-certificates' package or needed certificates " +
+                               "by hand into /etc/ssl/certs default directory")};
+               }
+
+               // Advanced Configuration Section
+
+               o = s.taboption('global', form.Flag, 'upd_privateip', _("Allow non-public IP's"));
+               o.description = _("Non-public and by default blocked IP's") + ':'
+               + '<br /><strong>IPv4: </strong>'
+               + '0/8, 10/8, 100.64/10, 127/8, 169.254/16, 172.16/12, 192.168/16'
+               + '<br /><strong>IPv6: </strong>'
+               + '::/32, f000::/4"';
+               o.default = "0";
+               o.optional = true;
+
+               o = s.taboption('global', form.Value, 'ddns_dateformat', _('Date format'));
+               o.description = '<a href="http://www.cplusplus.com/reference/ctime/strftime/" target="_blank">'
+                       + _("For supported codes look here")
+                       + '</a><br />' +
+                       _('Current setting: ') + '<b>' + status['_curr_dateformat'] + '</b>';
+               o.default = "%F %R"
+               o.optional = true;
+               o.rmempty = true;
+
+               o = s.taboption('global', form.Value, 'ddns_rundir', _('Status directory'));
+               o.description = _('Directory contains PID and other status information for each running section.');
+               o.default = "/var/run/ddns";
+               o.optional = true;
+               o.rmempty = true;
+
+               o = s.taboption('global', form.Value, 'ddns_logdir', _('Log directory'));
+               o.description = _('Directory contains Log files for each running section.');
+               o.default = "/var/log/ddns";
+               o.optional = true;
+               o.rmempty = true;
+               o.validate = function(section_id, formvalue) {
+                       if (formvalue.indexOf('../') !== -1)
+                               return _('"../" not allowed in path for Security Reason.')
+
+                       return true;
+               }
+
+               o = s.taboption('global', form.Value, 'ddns_loglines', _('Log length'));
+               o.description = _('Number of last lines stored in log files');
+               o.datatype = 'min(1)';
+               o.default = '250';
+
+               if (env['has_wget'] && env['has_curl']) {
+
+                       o = s.taboption('global', form.Flag, 'use_curl', _('Use cURL'));
+                       o.description = _('If Wget and cURL package are installed, Wget is used for communication by default.');
+                       o.default = "0";
+                       o.optional = true;
+                       o.rmempty = true;
+
+               }
+
+               o = s.taboption('global', form.Value, 'cacert', _('Ca Certs path'));
+               o.description = _('Ca Certs path that will be used to download services data. Set IGNORE to skip certificate validation.');
+               o.placeholder = 'IGNORE';
+
+               o = s.taboption('global', form.Value, 'services_url', _('Services URL Download'));
+               o.description = _('Url used to download services file. By default is the master openwrt ddns package repo.');
+               o.placeholder = 'https://raw.githubusercontent.com/openwrt/packages/master/net/ddns-scripts/files';
+
+               // DDns services
+               s = m.section(form.GridSection, 'service', _('Services'));
+               s.anonymous = true;
+               s.addremove = true;
+               s.addbtntitle = _('Add new services...');
+
+               s.anonymous = true;
+               s.addremove = true;
+               s.sortable  = true;
+
+               s.handleCreateDDnsRule = function(m, name, service_name, ipv6, ev) {
+                       var section_id = name.isValid('_new_') ? name.formvalue('_new_') : null,
+                               service_value = service_name.isValid('_new_') ? service_name.formvalue('_new_') : null,
+                               ipv6_value = ipv6.isValid('_new_') ? ipv6.formvalue('_new_') : null;
+
+                       if (section_id == null || section_id == '' || service_value == null || section_id == '' || ipv6_value == null || ipv6_value == '')
+                               return;
+
+                       return m.save(function() {
+                               uci.add('ddns', 'service', section_id);
+                               if (service_value != '-') {
+                                       uci.set('ddns', section_id, 'service_name', service_value);
+                               }
+                               uci.set('ddns', section_id, 'use_ipv6', ipv6_value);
+                       }).then(L.bind(m.children[1].renderMoreOptionsModal, m.children[1], section_id));
+               };
+
+               s.handleAdd = function(ev) {
+                       var m2 = new form.Map('ddns'),
+                               s2 = m2.section(form.NamedSection, '_new_'),
+                               name, ipv6, service_name;
+
+                       s2.render = function() {
+                               return Promise.all([
+                                       {},
+                                       this.renderUCISection('_new_')
+                               ]).then(this.renderContents.bind(this));
+                       };
+
+                       name = s2.option(form.Value, 'name', _('Name'));
+                       name.rmempty = false;
+                       name.datatype = 'uciname';
+                       name.placeholder = _('New DDns Service…');
+                       name.validate = function(section_id, value) {
+                               if (uci.get('ddns', value) != null)
+                                       return _('The service name is already used');
+
+                               return true;
+                       };
+
+                       ipv6 = s2.option( form.ListValue, 'use_ipv6',
+                               _("IP address version"),
+                               _("Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"));
+                       ipv6.default = '0';
+                       ipv6.value("0", _("IPv4-Address"))
+                       if (env["has_ipv6"]) {
+                               ipv6.value("1", _("IPv6-Address"))
+                       }
+
+                       service_name = s2.option(form.ListValue, 'service_name',
+                                       String.format('%s', _("DDNS Service provider")));
+                       service_name.value('-',"-- " + _("custom") + " --");
+                       Object.keys(_this.services).sort().forEach(name => service_name.value(name));
+                       service_name.validate = function(section_id, value) {
+                               if (value == '') return _("Select a service");
+                               if (s2.service_supported == null) return _("Checking the service support...");
+                               if (!s2.service_supported) return _("Service doesn't support this ip type");
+                               return true;
+                       };
+
+                       ipv6.onchange = L.bind(_this.handleCheckService, _this, s2, service_name, ipv6);
+                       service_name.onchange = L.bind(_this.handleCheckService, _this, s2, service_name, ipv6);
+
+                       m2.render().then(L.bind(function(nodes) {
+                               ui.showModal(_('Add new services...'), [
+                                       nodes,
+                                       E('div', { 'class': 'right' }, [
+                                               E('button', {
+                                                       'class': 'btn',
+                                                       'click': ui.hideModal
+                                               }, _('Cancel')), ' ',
+                                               E('button', {
+                                                       'class': 'cbi-button cbi-button-positive important',
+                                                       'click': ui.createHandlerFn(this, 'handleCreateDDnsRule', m, name, service_name, ipv6)
+                                               }, _('Create service'))
+                                       ])
+                               ], 'cbi-modal');
+
+                               nodes.querySelector('[id="%s"] input[type="text"]'.format(name.cbid('_new_'))).focus();
+                       }, this));
+               };
+
+               s.renderRowActions = function(section_id) {
+                       var tdEl = this.super('renderRowActions', [ section_id, _('Edit') ]),
+                               cfg_enabled = uci.get('ddns', section_id, 'enabled'),
+                               reload_opt = {
+                                       'class': 'cbi-button cbi-button-neutral reload',
+                                       'click': ui.createHandlerFn(_this, 'handleReloadDDnsRule', m, section_id),
+                                       'title': _('Reload this service'),
+                               },
+                               stop_opt = {
+                                       'class': 'cbi-button cbi-button-neutral stop',
+                                       'click': ui.createHandlerFn(_this, 'HandleStopDDnsRule', m, section_id),
+                                       'title': _('Stop this service'),
+                               };
+
+                       if (status['_enabled'] == 0 || cfg_enabled == 0)
+                               reload_opt['disabled'] = 'disabled';
+
+                       if (!resolved[section_id] || !resolved[section_id].pid ||
+                                       (resolved[section_id].pid && cfg_enabled == '1'))
+                               stop_opt['disabled'] = 'disabled';
+
+                       dom.content(tdEl.lastChild, [
+                               E('button', stop_opt, _('Stop')),
+                               E('button', reload_opt, _('Reload')),
+                               tdEl.lastChild.childNodes[0],
+                               tdEl.lastChild.childNodes[1],
+                               tdEl.lastChild.childNodes[2]
+                       ]);
+
+                       return tdEl;
+               };
+
+               s.modaltitle = function(section_id) {
+                       return _('DDns Service') + ' » ' + section_id;
+               };
+
+               s.addModalOptions = function(s, section_id) {
+
+                       var service = uci.get('ddns', section_id, 'service_name') || '-',
+                               ipv6 = uci.get('ddns', section_id, 'use_ipv6'), service_name, use_ipv6;
+
+                       return _this.handleGetServiceData(service).then(L.bind(function (service_data) {
+                               s.service_available = true;
+                               s.service_supported = true;
+
+                               if (service != '-') {
+                                       if (!service_data)
+                                               s.service_available = false;
+                                       else {
+                                               service_data = JSON.parse(service_data);
+                                               if (ipv6 == "1" && !service_data.ipv6)
+                                                       s.service_supported = false;
+                                       }
+                               }
+
+                               s.tab('basic', _('Basic Settings'));
+                               s.tab('advanced', _('Advanced Settings'));
+                               s.tab('timer', _('Timer Settings'));
+                               s.tab('logview', _('Log File Viewer'));
+
+                               o = s.taboption('basic', form.Flag, 'enabled',
+                                       _('Enabled'),
+                                       _("If this service section is disabled it could not be started.")
+                                       + "<br />" +
+                                       _("Neither from LuCI interface nor from console."));
+                               o.modalonly = true;
+                               o.rmempty  = false;
+                               o.default = '1';
+
+                               o = s.taboption('basic', form.Value, 'lookup_host',
+                                       _("Lookup Hostname"),
+                                       _("Hostname/FQDN to validate, if IP update happen or necessary"));
+                               o.rmempty = false;
+                               o.placeholder = "myhost.example.com";
+                               o.datatype = 'and(minlength(3),hostname("strict"))';
+                               o.modalonly = true;
+
+                               use_ipv6 = s.taboption('basic', form.ListValue, 'use_ipv6',
+                                       _("IP address version"),
+                                       _("Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"));
+                               use_ipv6.default = '0';
+                               use_ipv6.modalonly = true;
+                               use_ipv6.rmempty  = false;
+                               use_ipv6.value("0", _("IPv4-Address"))
+                               if (env["has_ipv6"]) {
+                                       use_ipv6.value("1", _("IPv6-Address"))
+                               }
+
+                               service_name = s.taboption('basic', form.ListValue, 'service_name',
+                                       String.format('%s', _("DDNS Service provider")));
+                               service_name.modalonly = true;
+                               service_name.value('-',"-- " + _("custom") + " --");
+                               Object.keys(_this.services).sort().forEach(name => service_name.value(name));
+                               service_name.cfgvalue = function(section_id) {
+                                       return uci.get('ddns', section_id, 'service_name') || '-';
+                               };
+                               service_name.write = function(section_id, service) {
+                                       if (service != '-') {
+                                               uci.set('ddns', section_id, 'update_url', null);
+                                               uci.set('ddns', section_id, 'update_script', null);
+                                               return uci.set('ddns', section_id, 'service_name', service);
+                                       }
+                                       return uci.set('ddns', section_id, 'service_name', null);
+                               };
+                               service_name.validate = function(section_id, value) {
+                                       if (value == '') return _("Select a service");
+                                       if (s.service_available == null) return _("Checking the service support...");
+                                       if (!s.service_available) return _('Service not installed');
+                                       if (!s.service_supported) return _("Service doesn't support this ip type");
+                                       return true;
+                               };
+
+                               service_name.onchange = L.bind(_this.handleCheckService, _this, s, service_name, use_ipv6);
+                               use_ipv6.onchange = L.bind(_this.handleCheckService, _this, s, service_name, use_ipv6);
+
+                               if (!s.service_available) {
+                                       o = s.taboption('basic', form.Button, '_download_service');
+                                       o.modalonly  = true;
+                                       o.title      = _('Service not installed');
+                                       o.inputtitle = _('Install Service');
+                                       o.inputstyle = 'apply';
+                                       o.onclick = L.bind(_this.handleInstallService,
+                                               this, m, service_name, section_id, s.section, _this)
+                               }
+
+                               if (!s.service_supported) {
+                                       o = s.taboption('basic', form.DummyValue, '_not_supported', '&nbsp');
+                                       o.cfgvalue = function () {
+                                               return _("Service doesn't support this ip type")
+                                       };
+                               }
+
+                               var service_switch = s.taboption('basic', form.Button, '_switch_proto');
+                               service_switch.modalonly  = true;
+                               service_switch.title      = _('Really switch service?');
+                               service_switch.inputtitle = _('Switch service');
+                               service_switch.inputstyle = 'apply';
+                               service_switch.onclick = L.bind(function(ev) {
+                                       if (!s.service_supported) return;
+
+                                       return s.map.save()
+                                               .then(L.bind(m.load, m))
+                                               .then(L.bind(m.render, m))
+                                               .then(L.bind(this.renderMoreOptionsModal, this, s.section));
+                               }, this);
+
+                               if (s.service_available && s.service_supported) {
+
+                                       o = s.taboption('basic', form.Value, 'update_url',
+                                               _("Custom update-URL"),
+                                               _("Update URL to be used for updating your DDNS Provider.")
+                                               + "<br />" +
+                                               _("Follow instructions you will find on their WEB page."));
+                                       o.modalonly = true;
+                                       o.rmempty = true;
+                                       o.optional = true;
+                                       o.depends("service_name","-");
+                                       o.validate = function(section_id, value) {
+                                               var other = this.section.children.filter(function(o) { return o.option == 'update_script' })[0].formvalue(section_id);
+
+                                               if ((value == "" && other == "") || (value != "" && other != "")) {
+                                                       return _("Insert a Update Script OR a Update URL");
+                                               }
+
+                                               return true;
+                                       };
+
+                                       o = s.taboption('basic', form.Value, 'update_script',
+                                               _("Custom update-script"),
+                                               _("Custom update script to be used for updating your DDNS Provider."));
+                                       o.modalonly = true;
+                                       o.rmempty = true;
+                                       o.optional = true;
+                                       o.depends("service_name","-");
+                                       o.validate = function(section_id, value) {
+                                               var other = this.section.children.filter(function(o) { return o.option == 'update_url' })[0].formvalue(section_id);
+
+                                               if ((value == "" && other == "") || (value != "" && other != "")) {
+                                                       return _("Insert a Update Script OR a Update URL");
+                                               }
+
+                                               return true;
+                                       };
+
+                                       o = s.taboption('basic', form.Value, 'domain',
+                                               _("Domain"),
+                                               _("Replaces [DOMAIN] in Update-URL (URL-encoded)"));
+                                       o.modalonly = true;
+                                       o.rmempty = false;
+
+                                       o = s.taboption('basic', form.Value, 'username',
+                                               _("Username"),
+                                               _("Replaces [USERNAME] in Update-URL (URL-encoded)"));
+                                       o.modalonly = true;
+                                       o.rmempty = false;
+
+                                       o = s.taboption('basic', form.Value, 'password',
+                                               _("Password"),
+                                               _("Replaces [PASSWORD] in Update-URL (URL-encoded)"));
+                                       o.password = true;
+                                       o.modalonly = true;
+                                       o.rmempty = false;
+
+                                       o = s.taboption('basic', form.Value, 'param_enc',
+                                               _("Optional Encoded Parameter"),
+                                               _("Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"));
+                                       o.optional = true;
+                                       o.modalonly = true;
+
+                                       o = s.taboption('basic', form.Value, 'param_opt',
+                                               _("Optional Parameter"),
+                                               _("Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"));
+                                       o.optional = true;
+                                       o.modalonly = true;
+
+                                       if (env['has_ssl']) {
+                                               o = s.taboption('basic', form.Flag, 'use_https',
+                                                       _("Use HTTP Secure"),
+                                                       _("Enable secure communication with DDNS provider"));
+                                               o.optional = true;
+                                               o.modalonly = true;
+
+                                               o = s.taboption('basic', form.Value, 'cacert',
+                                                       _("Path to CA-Certificate"),
+                                                       _("directory or path/file")
+                                                       + "<br />" +
+                                                       _("or")
+                                                       + '<b>' + " IGNORE " + '</b>' +
+                                                       _("to run HTTPS without verification of server certificates (insecure)"));
+                                               o.modalonly = true;
+                                               o.depends("use_https", "1");
+                                               o.placeholder = "/etc/ssl/certs";
+                                               o.rmempty = false;
+                                       };
+
+
+                                       o = s.taboption('advanced', form.ListValue, 'ip_source',
+                                               _("IP address source"),
+                                               _("Defines the source to read systems IP-Address from, that will be send to the DDNS provider"));
+                                       o.modalonly = true;
+                                       o.default = "network";
+                                       o.value("network", _("Network"));
+                                       o.value("web", _("URL"));
+                                       o.value("interface", _("Interface"));
+                                       o.value("script", _("Script"));
+                                       o.write = function(section_id, formvalue) {
+                                               switch(formvalue) {
+                                                       case 'network':
+                                                               uci.set('ddns', section_id, "ip_url",null);
+                                                               uci.set('ddns', section_id, "ip_interface",null);
+                                                               uci.set('ddns', section_id, "ip_script",null);
+                                                               break;
+                                                       case 'web':
+                                                               uci.set('ddns', section_id, "ip_network",null);
+                                                               uci.set('ddns', section_id, "ip_interface",null);
+                                                               uci.set('ddns', section_id, "ip_script",null);
+                                                               break;
+                                                       case 'interface':
+                                                               uci.set('ddns', section_id, "ip_network",null);
+                                                               uci.set('ddns', section_id, "ip_url",null);
+                                                               uci.set('ddns', section_id, "ip_script",null);
+                                                               break;
+                                                       case 'script':
+                                                               uci.set('ddns', section_id, "ip_network",null);
+                                                               uci.set('ddns', section_id, "ip_url",null);
+                                                               uci.set('ddns', section_id, "ip_interface",null);
+                                                               break;
+                                                       default:
+                                                               break;
+                                               };
+
+                                               return uci.set('ddns', section_id, 'ip_source', formvalue )
+                                       };
+
+                                       o = s.taboption('advanced', widgets.NetworkSelect, 'ip_network',
+                                               _("Network"),
+                                               _("Defines the network to read systems IP-Address from"));
+                                       o.depends('ip_source','network');
+                                       o.modalonly = true;
+                                       o.default = 'wan';
+                                       o.multiple = false;
+
+                                       o = s.taboption('advanced', form.Value, 'ip_url',
+                                               _("URL to detect"),
+                                               _("Defines the Web page to read systems IP-Address from.")
+                                               + '<br />' +
+                                               String.format('%s %s', _('Example for IPv4'), ': http://checkip.dyndns.com')
+                                               + '<br />' +
+                                               String.format('%s %s', _('Example for IPv6'), ': http://checkipv6.dyndns.com'));
+                                       o.depends("ip_source", "web")
+                                       o.modalonly = true;
+
+                                       o = s.taboption('advanced', widgets.DeviceSelect, 'ip_interface',
+                                               _("Interface"),
+                                               _("Defines the interface to read systems IP-Address from"));
+                                       o.modalonly = true;
+                                       o.depends("ip_source", "interface")
+                                       o.multiple = false;
+                                       o.default = 'wan';
+
+                                       o = s.taboption('advanced', form.Value, 'ip_script',
+                                               _("Script"),
+                                               _("User defined script to read systems IP-Address"));
+                                       o.modalonly = true;
+                                       o.depends("ip_source", "script")
+                                       o.placeholder = "/path/to/script.sh"
+
+                                       o = s.taboption('advanced', widgets.DeviceSelect, 'interface',
+                                               _("Event Network"),
+                                               _("Network on which the ddns-updater scripts will be started"));
+                                       o.modalonly = true;
+                                       o.multiple = false;
+                                       o.default = 'wan';
+                                       o.depends("ip_source", "web");
+                                       o.depends("ip_source", "script");
+
+                                       o = s.taboption('advanced', form.DummyValue, '_interface',
+                                               _("Event Network"),
+                                               _("Network on which the ddns-updater scripts will be started"));
+                                       o.depends("ip_source", "interface");
+                                       o.depends("ip_source", "network");
+                                       o.forcewrite = true;
+                                       o.modalonly = true;
+                                       o.cfgvalue = function(section_id) {
+                                               return uci.get('ddns', section_id, 'interface') || _('This will be autoset to the selected interface');
+                                       };
+                                       o.write = function(section_id) {
+                                               var opt = this.section.children.filter(function(o) { return o.option == 'ip_source' })[0].formvalue(section_id);
+                                               var val = this.section.children.filter(function(o) { return o.option == 'ip_'+opt })[0].formvalue(section_id);
+                                               return uci.set('ddns', section_id, 'interface', val);
+                                       };
+
+                                       if (env['has_bindnet']) {
+                                               o = s.taboption('advanced', widgets.NetworkSelect, 'bind_network',
+                                                       _("Bind Network"),
+                                                       _('OPTIONAL: Network to use for communication')
+                                                       + '<br />' +
+                                                       _("Network on which the ddns-updater scripts will be started"));
+                                               o.depends("ip_source", "web");
+                                               o.optional = true;
+                                               o.rmempty = true;
+                                               o.modalonly = true;
+                                       }
+
+                                       if (env['has_forceip']) {
+                                               o = s.taboption('advanced', form.Flag, 'force_ipversion',
+                                                       _("Force IP Version"),
+                                                       _('OPTIONAL: Force the usage of pure IPv4/IPv6 only communication.'));
+                                               o.optional = true;
+                                               o.rmempty = true;
+                                               o.modalonly = true;
+                                       }
+
+                                       if (env['has_dnsserver']) {
+                                               o = s.taboption("advanced", form.Value, "dns_server",
+                                                       _("DNS-Server"),
+                                                       _("OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'.")
+                                                       + "<br />" +
+                                                       _("Format: IP or FQDN"));
+                                               o.placeholder = "mydns.lan"
+                                               o.optional = true;
+                                               o.rmempty = true;
+                                               o.modalonly = true;
+                                       }
+
+                                       if (env['has_bindhost']) {
+                                               o = s.taboption("advanced", form.Flag, "force_dnstcp",
+                                                       _("Force TCP on DNS"),
+                                                       _("OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."));
+                                               o.optional = true;
+                                               o.rmempty = true;
+                                               o.modalonly = true;
+                                       }
+
+                                       if (env['has_proxy']) {
+                                               o = s.taboption("advanced", form.Value, "proxy",
+                                                       _("PROXY-Server"),
+                                                       _("OPTIONAL: Proxy-Server for detection and updates.")
+                                                       + "<br />" +
+                                                       String.format('%s: <b>%s</b>', _("Format"), "[user:password@]proxyhost:port")
+                                                       + "<br />" +
+                                                       String.format('%s: <b>%s</b>', _("IPv6 address must be given in square brackets"), "[2001:db8::1]:8080"));
+                                               o.optional = true;
+                                               o.rmempty = true;
+                                               o.modalonly = true;
+                                       }
+
+                                       o = s.taboption("advanced", form.ListValue, "use_syslog",
+                                               _("Log to syslog"),
+                                               _("Writes log messages to syslog. Critical Errors will always be written to syslog."));
+                                       o.modalonly = true;
+                                       o.default = "2"
+                                       o.optional = true;
+                                       o.value("0", _("No logging"))
+                                       o.value("1", _("Info"))
+                                       o.value("2", _("Notice"))
+                                       o.value("3", _("Warning"))
+                                       o.value("4", _("Error"))
+
+                                       o = s.taboption("advanced", form.Flag, "use_logfile",
+                                               _("Log to file"));
+                                       o.default = '1';
+                                       o.optional = true;
+                                       o.modalonly = true;
+                                       o.cfgvalue = function(section_id) {
+                                               this.description = _("Writes detailed messages to log file. File will be truncated automatically.") + "<br />" +
+                                               _("File") + ': "' + logdir + '/' + section_id + '.log"';
+                                               return uci.get('ddns', section_id, 'use_logfile');
+                                       };
+
+
+                                       o = s.taboption("timer", form.Value, "check_interval",
+                                               _("Check Interval"));
+                                       o.placeholder = "30";
+                                       o.modalonly = true;
+                                       o.datatype = 'uinteger';
+                                       o.validate = function(section_id, formvalue) {
+                                               var unit = this.section.children.filter(function(o) { return o.option == 'check_unit' })[0].formvalue(section_id),
+                                                       time_to_sec = _this.time_res[unit || 'minutes'] * formvalue;
+
+                                               if (formvalue && time_to_sec < 300)
+                                                       return _('Values below 5 minutes == 300 seconds are not supported');
+
+                                               return true;
+                                       };
+
+                                       o = s.taboption("timer", form.ListValue, "check_unit",
+                                               _('Check Unit'),
+                                               _("Interval unit to check for changed IP"));
+                                       o.modalonly = true;
+                                       o.default  = "minutes"
+                                       o.value("seconds", _("seconds"));
+                                       o.value("minutes", _("minutes"));
+                                       o.value("hours", _("hours"));
+
+                                       o = s.taboption("timer", form.Value, "force_interval",
+                                               _("Force Interval"),
+                                               _("Interval to force updates send to DDNS Provider")
+                                               + "<br />" +
+                                               _("Setting this parameter to 0 will force the script to only run once"));
+                                       o.placeholder = "72";
+                                       o.optional = true;
+                                       o.modalonly = true;
+                                       o.datatype = 'uinteger';
+                                       o.validate = function(section_id, formvalue) {
+
+                                               if (!formvalue)
+                                                       return true;
+
+                                               var check_unit = this.section.children.filter(function(o) { return o.option == 'check_unit' })[0].formvalue(section_id),
+                                                       check_val = this.section.children.filter(function(o) { return o.option == 'check_interval' })[0].formvalue(section_id),
+                                                       force_unit = this.section.children.filter(function(o) { return o.option == 'force_unit' })[0].formvalue(section_id),
+                                                       check_to_sec = _this.time_res[check_unit || 'minutes'] * ( check_val || '30'),
+                                                       force_to_sec = _this.time_res[force_unit || 'minutes'] * formvalue;
+
+                                               if (force_to_sec != 0 && force_to_sec < check_to_sec)
+                                                       return _("Values lower 'Check Interval' except '0' are not supported");
+
+                                               return true;
+                                       };
+
+                                       o = s.taboption("timer", form.ListValue, "force_unit",
+                                               _('Force Unit'),
+                                               _("Interval unit to force updates sent to DDNS Provider."));
+                                       o.modalonly = true;
+                                       o.optional = true;
+                                       o.default  = "minutes"
+                                       o.value("minutes", _("minutes"));
+                                       o.value("hours", _("hours"));
+                                       o.value("days", _("days"));
+
+                                       o = s.taboption("timer", form.Value, "retry_max_count",
+                                               _("Error Max Retry Counter"),
+                                               _("On Error the script will stop execution after the given number of retries.")
+                                               + "<br />" +
+                                               _("The default setting of '0' will retry infinitely."));
+                                       o.placeholder = "0";
+                                       o.optional = true;
+                                       o.modalonly = true;
+                                       o.datatype = 'uinteger';
+
+                                       o = s.taboption("timer", form.Value, "retry_interval",
+                                               _("Error Retry Interval"),
+                                               _("The interval between which each successive retry commences."));
+                                       o.placeholder = "60";
+                                       o.optional = true;
+                                       o.modalonly = true;
+                                       o.datatype = 'uinteger';
+
+                                       o = s.taboption("timer", form.ListValue, "retry_unit",
+                                               _('Retry Unit'),
+                                               _("Which time units to use for retry counters."));
+                                       o.modalonly = true;
+                                       o.optional = true;
+                                       o.default  = "seconds"
+                                       o.value("seconds", _("seconds"));
+                                       o.value("minutes", _("minutes"));
+
+                                       o = s.taboption('logview', form.Button, '_read_log');
+                                       o.title      = '';
+                                       o.depends('use_logfile','1');
+                                       o.modalonly = true;
+                                       o.inputtitle = _('Read / Reread log file');
+                                       o.inputstyle = 'apply';
+                                       o.onclick = L.bind(function(ev, section_id) {
+                                               return _this.callGetLogServices(section_id).then(L.bind(log_box.update_log, log_box));
+                                       }, this);
+
+                                       var log_box = s.taboption("logview", form.DummyValue, "_logview");
+                                       log_box.depends('use_logfile','1');
+                                       log_box.modalonly = true;
+
+                                       log_box.update_log = L.bind(function(view, log_data) {
+                                               return document.getElementById('log_area').textContent = log_data.result;
+                                       }, o, this);
+
+                                       log_box.render = L.bind(function() {
+                                               return E([
+                                                       E('p', {}, _('This is the current content of the log file in %h for this service.').format(logdir)),
+                                                       E('p', {}, E('textarea', { 'style': 'width:100%', 'rows': 20, 'readonly' : 'readonly', 'id' : 'log_area' }, _('Please press [Read] button') ))
+                                               ]);
+                                       }, o, this);
+                               }
+
+                               for (var i = 0; i < s.children.length; i++) {
+                                       o = s.children[i];
+                                       switch (o.option) {
+                                       case '_switch_proto':
+                                               o.depends({ service_name : service, use_ipv6: ipv6, "!reverse": true })
+                                               continue;
+                                       case 'enabled':
+                                       case 'service_name':
+                                       case 'use_ipv6':
+                                       case 'update_script':
+                                       case 'update_url':
+                                       case 'lookup_host':
+                                               continue;
+
+                                       default:
+                                               if (o.deps.length)
+                                                       for (var j = 0; j < o.deps.length; j++) {
+                                                               o.deps[j].service_name = service;
+                                                               o.deps[j].use_ipv6 = ipv6;
+                                                       }
+                                               else
+                                                       o.depends({service_name: service, use_ipv6: ipv6 });
+                                       }
+                               }
+                       }, this)
+               )};
+
+               o = s.option(form.DummyValue, '_cfg_status', _('Status'));
+               o.modalonly = false;
+               o.textvalue = function(section_id) {
+                       var text = '<b>' + _('Not Running') + '</b>';
+
+                       if (resolved[section_id] && resolved[section_id].pid)
+                               text = '<b>' + _('Running') + '</b> : ' + resolved[section_id].pid;
+
+                       return text;
+               };
+
+               o = s.option(form.DummyValue, '_cfg_name', _('Name'));
+               o.modalonly = false;
+               o.textvalue = function(section_id) {
+                       return '<b>' + section_id + '</b>';
+               };
+
+               o = s.option(form.DummyValue, '_cfg_detail_ip', _('Lookup Hostname') + "<br />" + _('Registered IP'));
+               o.rawhtml   = true;
+               o.modalonly = false;
+               o.textvalue = function(section_id) {
+                       var host = uci.get('ddns', section_id, 'lookup_host') || _('Configuration Error'),
+                               ip = _('No Data');
+                       if (resolved[section_id] && resolved[section_id].ip)
+                               ip = resolved[section_id].ip;
+
+                       return host + '<br />' + ip;
+               };
+
+               o = s.option(form.Flag, 'enabled', _('Enabled'));
+               o.rmempty  = false;
+               o.editable = true;
+               o.modalonly = false;
+
+               o = s.option(form.DummyValue, '_cfg_update', _('Last Update') + "<br />" + _('Next Update'));
+               o.rawhtml   = true;
+               o.modalonly = false;
+               o.textvalue = function(section_id) {
+                       var last_update = _('Never'), next_update = _('Unknown');
+                       if (resolved[section_id]) {
+                               if (resolved[section_id].last_update)
+                                       last_update = resolved[section_id].last_update;
+                               if (resolved[section_id].next_update)
+                                       next_update = _this.NextUpdateStrings[resolved[section_id].next_update] || resolved[section_id].next_update;
+                       }
+
+                       return  last_update + '<br />' + next_update;
+               };
+
+               return m.render().then(L.bind(function(m, nodes) {
+                       poll.add(L.bind(function() {
+                               return Promise.all([
+                                       this.callDDnsGetServicesStatus(),
+                                       this.callDDnsGetStatus()
+                               ]).then(L.bind(this.poll_status, this, nodes));
+                       }, this), 5);
+                       return nodes;
+               }, this, m));
+       }
+});
diff --git a/package/luci/applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js b/package/luci/applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js
new file mode 100644 (file)
index 0000000..d3b35d8
--- /dev/null
@@ -0,0 +1,47 @@
+'use strict';
+'require baseclass';
+'require rpc';
+'require uci';
+
+return baseclass.extend({
+       title: _('Dynamic DNS'),
+
+       callDDnsGetServicesStatus: rpc.declare({
+               object: 'luci.ddns',
+               method: 'get_services_status',
+               expect: {  }
+       }),
+
+       load: function() {
+               return Promise.all([
+                       this.callDDnsGetServicesStatus(),
+                       uci.load('ddns')
+               ]);
+       },
+
+       render: function(data) {
+               var services = data[0];
+
+               var table = E('table', { 'class': 'table' }, [
+                       E('tr', { 'class': 'tr table-titles' }, [
+                               E('th', { 'class': 'th' }, _('Configuration')),
+                               E('th', { 'class': 'th' }, _('Next Update')),
+                               E('th', { 'class': 'th' }, _('Lookup Hostname')),
+                               E('th', { 'class': 'th' }, _('Registered IP')),
+                               E('th', { 'class': 'th' }, _('Network'))
+                       ])
+               ]);
+
+               cbi_update_table(table, Object.keys(services).map(function(key, index) {
+                       return [
+                               key,
+                               services[key].next_update ? _(services[key].next_update) : _('Unknown'),
+                               uci.get('ddns',key,'lookup_host'),
+                               services[key].ip ? services[key].ip : _('No Data'),
+                               (uci.get('ddns',key,'use_ipv6') == '1' ? 'IPv6' : 'IPv4') + ' / ' + uci.get('ddns',key,'interface')
+                       ];
+               }), E('em', _('There is no service configured.')));
+
+               return E([table]);
+       }
+});
diff --git a/package/luci/applications/luci-app-ddns/po/ar/ddns.po b/package/luci/applications/luci-app-ddns/po/ar/ddns.po
new file mode 100644 (file)
index 0000000..66d85de
--- /dev/null
@@ -0,0 +1,918 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-04-12 14:21+0000\n"
+"Last-Translator: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>\n"
+"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/ar/>\n"
+"Language: ar\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" غير مسموح به في المسار لسبب الأمان."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "اضف خدمة جديدة..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "إعدادات متقدمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "السماح لعناوين IP غير العامة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "الإعدادات الأساسية"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "ربط الشبكة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "الربط بشبكة معينة غير مدعوم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"لا يدعم كل من nslookup و Wget من BusyBox تحديد إصدار IP لاستخدامه للتواصل مع "
+"مزود DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"لا يدعم nslookup و hostip الخاص ب BusyBox تحديد استخدام TCP بدلاً من UDP "
+"الافتراضي عند طلب خادم DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"لا يعالج nslookup الخاص ب BusyBox في الإصدار المترجم الحالي خوادم DNS "
+"المحددة بشكل صحيح!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "مسار شهادات Ca"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"مسار شهادات Ca الذي سيتم استخدامه لتنزيل بيانات الخدمات. قم بتعيين IGNORE "
+"لتخطي التحقق من صحة الشهادة."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "إلغاء"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "تحقق الفاصل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "تحقق من الوحدة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "جاري التحقق من دعم الخدمة ..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "ضبط الإعدادات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "خطأ في الاعداد"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "إنشاء الخدمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "الإعداد الحالي:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr "برنامج نصي للتحديث مخصص ليتم استخدامه لتحديث مزود DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "تحديث URL مخصص"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "تحديث البرنامج النصي المخصص"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "بدء تشغيل تلقائي DDNS معطل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "بدء التشغيل التلقائي DDNS قيد التشغيل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "مزود خدمة DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS نظام أسماء النطاقات الديناميكية"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "خدمة DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "طلبات DNS عبر TCP غير مدعومة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "خادم DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "صيغة التاريخ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "يحدد صفحة الويب لقراءة عنوان IP للأنظمة منها."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "يحدد الواجهة لقراءة عنوان IP للأنظمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "يحدد الشبكة لقراءة عنوان IP للأنظمة منها"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr "يحدد المصدر لقراءة عنوان IP للأنظمة ، والذي سيتم إرساله إلى مزود DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "يحدد عنوان IP الذي يتم إرساله \"IPv4 / IPv6\" إلى مزود DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "يحتوي الدليل على ملفات السجل لكل قسم قيد التشغيل."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr "يحتوي الدليل على PID ومعلومات الحالة الأخرى لكل قسم قيد التشغيل."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "غير مفعل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "اختصاص"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "نظام أسماء النطاقات الديناميكية"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "√"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "تحرير"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "تمكين الاتصال الآمن مع مزود DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "مفعل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "خطأ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "الفاصل الزمني لإعادة محاولة الخطأ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "شبكة الأحداث"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "مثال على IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "مثال على IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "ملف"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "اتبع التعليمات التي ستجدها على صفحة الويب الخاصة بهم."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "للحصول على الرموز المدعومة انظر هنا"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "فرض إصدار IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "فرض إصدار IP غير مدعوم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "فرض الفاصل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "فرض TCP على DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "وحدة القوة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "صيغة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "الصيغة: IP أو FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+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 "الاعدادات العامة"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "منح الوصول إلى إجراءات DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS غير مدعوم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr "اسم المضيف / FQDN للتحقق ، إذا حدث تحديث IP أو ضروريًا"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "مصدر عنوان IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "إصدار عنوان IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "عنوان IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "يجب كتابة عنوان IPv6 بين قوسين معقوفين"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 غير مدعوم (بالكامل) بواسطة هذا النظام حاليًا"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 غير مدعوم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "عنوان IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"إذا تم تثبيت حزمة Wget و cURL ، فسيتم استخدام Wget بشكل افتراضي للاتصال."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "إذا تم تعطيل قسم الخدمة هذا ، فلا يمكن بدء تشغيله."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr "في حالة استخدام اتصال آمن ، يجب عليك التحقق من شهادات الخادم!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"في بعض الإصدارات ، يتم تجميع cURL / libcurl في OpenWrt بدون دعم الوكيل."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "معلومات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "معلومة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "أدخل برنامج نصي للتحديث أو عنوان URL للتحديث"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"قم بتثبيت حزمة \"ca-الشهادات\" أو الشهادات المطلوبة يدويًا في الدليل "
+"الافتراضي / etc / ssl / certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "تثبيت الخدمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "واجهه"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "الفاصل الزمني لفرض إرسال التحديثات إلى مزود DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "وحدة الفاصل الزمني للتحقق من تغيير IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr "وحدة الفاصل الزمني لفرض إرسال التحديثات إلى مزود DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "اخر تحديث"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "عارض ملف السجل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "دليل السجل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "طول السجل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "تسجيل الدخول إلى ملف"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "سجل في سجل النظام"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "اسم مضيف البحث"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "اسم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"لم يتم تثبيت GNU Wget مع SSL أو cURL لتحديد شبكة لاستخدامها في الاتصال."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"لم يتم تثبيت GNU Wget مع SSL أو cURL لدعم التحديثات الآمنة عبر بروتوكول "
+"HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "لا من واجهة LuCI ولا من وحدة التحكم."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "شبكة الاتصال"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "الشبكة التي ستبدأ عليها سكربتات محدث ddns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "أبدا"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "خدمة DDns الجديدة …"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "التحديث القادم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "لايوجد بيانات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "لم يتم العثور على شهادات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "لا تسجيل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "غير عام وبشكل افتراضي عناوين IP المحظورة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "لا يعمل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "ملاحضة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "عدد الأسطر الأخيرة المخزنة في ملفات السجل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "اختياري: فرض استخدام اتصال IPv4 / IPv6 الخالص فقط."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr "اختياري: فرض استخدام TCP بدلاً من UDP الافتراضي على طلبات DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "اختياري: شبكة لاستخدامها في الاتصال"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "اختياري: خادم وكيل للكشف والتحديثات."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr "اختياري: استخدم خادم DNS غير افتراضي لاكتشاف \"عنوان IP المسجل\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr "معلمة اختيارية مشفرة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "معلمة اختيارية"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "اختياري: يستبدل [PARAMENC] في Update-URL (بترميز URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "اختياري: يستبدل [PARAMOPT] في Update-URL (ليس بترميز URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "مخدم بروكسي"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "كلمة المرور"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "المسار إلى CA-Certificate"
+
+#: 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 ""
+"يرجى اتباع التعليمات الموجودة على الصفحة الرئيسية ل OpenWrt لتمكين دعم IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "الرجاء الضغط على زر [قراءة]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "قراءة / إعادة قراءة ملف السجل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "حقا تبديل الخدمة؟"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "IP المسجل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "إعادة تحميل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "إعادة تحميل هذه الخدمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "يستبدل [PASSWORD] في تحديث URL (URL المشفر)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "يستبدل [USERNAME] في Update-URL (بترميز URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "أعد تشغيل DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "وحدة إعادة المحاولة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "تشغيل مرة واحدة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "قيد التشغيل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "النص"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "اختر الخدمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "الخدمة لا تدعم هذا النوع من بروتوكول الإنترنت"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "الخدمة غير مثبتة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "خدمات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "تنزيل عنوان URL للخدمات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "آخر تحديث لقائمة الخدمات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"سيؤدي تعيين هذه المعلمة إلى 0 إلى إجبار البرنامج النصي على التشغيل مرة واحدة "
+"فقط"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "ابدأ DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "حالة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "الحالة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "دليل الحالة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "قف"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "وقف DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "أوقف هذه الخدمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "توقفت"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "خدمة التبديل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "الإعداد الافتراضي \"0\" سيعيد المحاولة بلا حدود."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+"عند حدوث خطأ ، سيتوقف البرنامج النصي عن التنفيذ بعد عدد معين من المحاولات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "اسم الخدمة مستخدم الآن"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "لا توجد خدمة مهيأة."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"هذا هو الإعداد الافتراضي إذا قمت بتشغيل نصوص DDNS بنفسك (أي عبر cron مع ضبط "
+"force_interval على \"0\")"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "سيتم تعيين هذا تلقائيًا على الواجهة المحددة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "إعدادات المؤقت"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "محدد موقع المعلومات URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL المراد اكتشافه"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "مجهول"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "تحديث قائمة خدمات DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "تحديث URL لاستخدامه لتحديث مزود DDNS الخاص بك."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"يستخدم عنوان Url لتنزيل ملف الخدمات. بشكل افتراضي ، يتم إعادة تعيين حزمة "
+"openwrt ddns الرئيسية."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "استخدم HTTP Secure"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "استخدم cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "البرنامج النصي المحدد من قبل المستخدم لقراءة عنوان IP للأنظمة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "اسم المستخدم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "استخدام خادم DNS محدد غير مدعوم"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "القيم الأقل من 5 دقائق == 300 ثانية غير معتمدة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "القيم الأقل من \"التحقق من الفاصل الزمني\" باستثناء \"0\" غير مدعومة"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "التحقق"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "تحذير"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"عند \"خطأ\" ، سيقوم البرنامج النصي بإعادة محاولة الإجراء الفاشل بعد وقت معين"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"يكتب رسائل السجل إلى سجل النظام. ستتم دائمًا كتابة الأخطاء الفادحة في سجل "
+"النظام."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"يجب عليك تثبيت حزمة \"bind-host\" أو \"knot-host\" أو \"drill\" أو "
+"\"hostip\" ، إذا كنت بحاجة إلى تحديد خادم DNS لاكتشاف عنوان IP المسجل الخاص "
+"بك."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"يجب عليك تثبيت حزمة \"bind-host\" أو \"knot-host\" أو حزمة \"drill\" لطلبات "
+"DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "يجب عليك تثبيت الحزمة \"wget\" أو \"curl\" أو \"uclient-fetch\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"يجب عليك تثبيت \"wget\" أو \"curl\" أو \"uclient-fetch\" مع الحزمة "
+"\"libustream- * ssl\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "يجب عليك تثبيت الحزمة \"wget\" أو \"curl\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"يجب عليك تثبيت الحزمة \"wget\" أو \"uclient-fetch\" أو استبدال libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "تم تثبيت cURL ، ولكن تم تجميع libcurl بدون دعم الوكيل."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL بدون دعم الوكيل"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "حسب الطلب"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "أيام"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "دليل أو مسار / ملف"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "ساعات"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "دقائق"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "أو"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "أو قم بتحديث نظامك إلى أحدث إصدار من OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "ثواني"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "لتشغيل HTTPS بدون التحقق من شهادات الخادم (غير آمن)"
diff --git a/package/luci/applications/luci-app-ddns/po/bg/ddns.po b/package/luci/applications/luci-app-ddns/po/bg/ddns.po
new file mode 100644 (file)
index 0000000..9f6a6d1
--- /dev/null
@@ -0,0 +1,883 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-02-28 14:29+0000\n"
+"Last-Translator: Boyan Alexiev <nneauu@gmail.com>\n"
+"Language-Team: Bulgarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/bg/>\n"
+"Language: bg\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.5-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" не се разрешава в пътя заради сигурността."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Добавяне на нови услуги..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Разширени настройки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Разрешаване на непублични IP-та"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Основни настройки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Отмени"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Конфигурация"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Забранено"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Редактиране"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Разрешен"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Грешка"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Глобални настройки"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Инфо"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Информация"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Интерфейс"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Име"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Никога"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Състояние"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Спиране"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Спрян"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL адрес"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Неизвестно"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Потребителско име"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/bn_BD/ddns.po b/package/luci/applications/luci-app-ddns/po/bn_BD/ddns.po
new file mode 100644 (file)
index 0000000..41ccaf4
--- /dev/null
@@ -0,0 +1,883 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2021-10-08 17:53+0000\n"
+"Last-Translator: Rayhan Nabi <rayhanjanam@gmail.com>\n"
+"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsddns/bn_BD/>\n"
+"Language: bn_BD\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "নিরাপত্তার কারনে পাথে \"../\" ব্যবহার করা যাবে না।"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "নতুন সার্ভিস যোগ করুন..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "উন্নত সেটিংস"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "নন-পাবলিক আইপি অনুমোদন দিন"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "সাধারন সেটিংস"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "নেটওয়ার্ক বিন্ড"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "একটা নির্দিষ্ট নেটওয়ার্কে বিন্ড সম্ভব না"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "বাতিল করুন"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "কনফিগারেশন"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "নিষ্ক্রিয়"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "সক্রিয়"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "ভুল"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "তথ্য"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "ইন্টারফেস"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "লগ ফাইল ভিউয়ার"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "নেটওয়ার্ক"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "কখনও না"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "নির্দেশনা"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "দয়া করে [পড়ুন] বোতাম টিপুন"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "লগ ফাইল পড়ুন / পুনরায় পড়ুন"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "সেবা"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "অবস্থা"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "অজানা"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "সতর্কতা"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/ca/ddns.po b/package/luci/applications/luci-app-ddns/po/ca/ddns.po
new file mode 100644 (file)
index 0000000..bada0c8
--- /dev/null
@@ -0,0 +1,889 @@
+#  ddns.pot
+#  generated from ./applications/luci-ddns/luasrc/i18n/ddns.en.lua
+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: 2021-09-17 06:52+0000\n"
+"Last-Translator: Roger Pueyo Centelles <weblate@rogerpueyo.com>\n"
+"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/ca/>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\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 4.9-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Configuració avançada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Cancel•lar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configuració"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+#, fuzzy
+msgid "Custom update-URL"
+msgstr "URL d'actualització personalitzada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domini"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS dinàmic"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Activat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Configuració global"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informació"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interfície"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Xarxa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Mai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Contrasenya"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Camí cap al certificat 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Torna a carregar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nom d'usuari"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minuts"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/cs/ddns.po b/package/luci/applications/luci-app-ddns/po/cs/ddns.po
new file mode 100644 (file)
index 0000000..ac90adb
--- /dev/null
@@ -0,0 +1,943 @@
+# Generated from applications/luci-ddns/luasrc/model/cbi/ddns/ddns.lua
+#
+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: 2023-09-27 19:02+0000\n"
+"Last-Translator: David Rapaň <david@rapan.cz>\n"
+"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/cs/>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.1-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\".. /\"není v cestě povoleno z bezpečnostních důvodů."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Přidat nové služby..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Pokročilá nastavení"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Povolit neveřejné adresy IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Základní nastavení"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Vytvořit vazbu mezi sítí"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Vazba na určitou síť není podporována"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"Verze programů nslookup a wget, které jsou součástí balíčku BusyBox, "
+"nepodporují specifikaci verze IP pro komunikaci s poskytovatelem DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"Verze programů nslookup a hostip, které jsou součástí balíčku BusyBox, "
+"nepodporují využití TCP místo výchozího protokolu UDP pro dotazování serveru "
+"DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"Současně kompilovaná verze programu nslookup, která je součástí balíčku "
+"BusyBox, nemůže správně zpracovat uvedené servery DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Adresář certifikátů CA"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Adresář který bude využit pro stažení dat služeb. Nastavte na IGNORE pro "
+"přeskočení ověření certifikátu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Zrušit"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Interval kontroly"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Zkontrolovat jednotku"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Ověřování podpory služeb..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Nastavení"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Chyba nastavení"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Vytvořit službu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Současné nastavení:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"V současné době nejsou aktualizace DDNS spouštěny při spuštění zařízení nebo "
+"při událostech rozhraní."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr "Vlastní aktualizační skript, který bude použit pro aktualizaci DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Vlastní aktualizační-URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Vlastní aktualizační skript"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Automatické spuštění DDNS je zakázáno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Automatické spuštění DDNS povoleno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Poskytovatel služeb DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Služba DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Požadavky DNS přes TCP nejsou podporovány"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Server DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Formát data"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Definuje webovou stránku pro zjištění systémové IP adresy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Definuje rozhraní pro zjištění systémové IP adresy z"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Definuje síť pro zjištění systémové IP adres z"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Definuje zdroj pro zjištění systémových IP adres, který bude odeslán "
+"poskytovateli DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Určuje, která IP adresa (IPv4/IPv6) bude odeslána poskytovateli DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Adresář obsahuje soubory protokolu pro každou běžící sekci."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Adresář obsahuje PID a další stavové informace pro každou běžící sekci."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Zakázáno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Doména"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dynamické DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Verze Dynamic DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Upravit"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Povolit zabezpečenou komunikaci s poskytovatelem DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Zapnuto"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Chyba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Interval opakování chyby"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Síťové rozhraní"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Příklad pro IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Příklad pro IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Soubor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Postupujte podle pokynů, které najdete na jejich webové stránce."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Podporované kódy najdete zde"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Vynutit verzi IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Vynucená verze IP není podporována"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Interval vynucení"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Vynucení protokolu TCP u služby DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Vynutit jednotku"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formát"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formát: IP nebo FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr "GNU Wget použije IP dané sítě, cURL použije fyzické rozhraní."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Obecná nastavení"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Povolit přístup k procedurám DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "Protokol HTTPS není podporován"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Název hostitele / FQDN k ověření, pokud dojde k aktualizaci IP nebo je-li to "
+"nutné"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Zdrojová IP adresa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Verze IP adresy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4 adresa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Adresa IPv6 musí být uvedena v hranatých závorkách"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "Protokol IPv6 momentálně není (plně) podporován tímto systémem"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "Protokol IPv6 není podporován"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6 adresa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Pokud jsou nainstalovány balíčky Wget a cURL, standardně se pro komunikaci "
+"použije Wget."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Pokud je tato část služby zakázána, nelze ji spustit."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Pokud používáte zabezpečenou komunikaci, měli byste ověřit serverové "
+"certifikáty!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"V některých verzích je cURL / libcurl v OpenWrt kompilován bez podpory proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informace"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Vložte aktualizační skript či aktualizační URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Nainstalujte balíček \"ca-certificates\" nebo manuálně vložte nutné "
+"certifikáty do výchozí složky /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Nainstalovat službu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Rozhraní"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+"Interval, po jehož uplynutí budou aktualizace odeslány zprostředkovateli DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Jednotka intervalu pro kontrolu změněné adresy IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Jednotka intervalu pro vynucení odeslání aktualizací poskytovateli DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Poslední aktualizace"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Prohlížeč souborů protokolu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Adresář protokolu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Délka protokolu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Protokolovat do souboru"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Protokolovat do syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Doménové jméno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Jméno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Není nainstalován GNU Wget s SSL ani cURL pro výběr sítě, která má být "
+"použita ke komunikaci."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Není nainstalován GNU Wget s SSL ani cURL pro podporu bezpečných aktualizací "
+"pomocí protokolu HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Ani z rozhraní LuCI ani z konzole."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Síť"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Síť, na které budou spuštěny skripty ddns-updater"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Nikdy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Nová služba DDNS…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Další aktualizace"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Žádná data"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Nebyly nalezeny žádné certifikáty"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Žádné protokolování"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Neveřejné a implicitně blokované adresy IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Není spuštěno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Upozornění"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Počet posledních řádků uložených v souborech protokolu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "VOLITELNÉ: Vynutit použití pouze čisté IPv4/IPv6 komunikace."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"VOLITELNÉ: Vynutit použití protokolu TCP místo výchozího UDP na DNS dotazy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "VOLITELNÉ: Síť používaná pro komunikaci"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "VOLITELNÉ: Proxy-server pro detekci a aktualizace."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"VOLITELNÉ: pro rozpoznání registrované adresy IP použít nevýchozí server DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr "V případě chyby se skript zastaví po daném počtu opakování."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Volitelný kódovaný parametr"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Volitelný parametr"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Volitelné: Nahradí [PARAMENC] v Update-URL (URL kódování)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Volitelné: Nahradí [PARAMOPT] v Update-URL (nikoli v kódování URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Proxy server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Heslo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Cesta k certifikátu 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 ""
+"Chcete-li povolit podporu protokolu IPv6, postupujte podle pokynů na "
+"domovské stránce OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Prosím, stiskněte tlačítko [Načíst]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Načíst / znovu načíst soubor protokolu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Doopravdy přehodit službu?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Registrovaná IP adresa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Znovu načíst"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Znovu načíst tuto službu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Nahradí [DOMAIN] v aktualizační adrese (kódováno URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Nahradí [PASSWORD] v Update-URL (kódování URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Nahradí [USERNAME] v Update-URL (kódování URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Restartovat DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Opakovat jednotku"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Spustit jednou"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Spuštěno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Skript"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Vybrat službu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Služba nepodporuje tento typ IP"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Služba není nainstalovaná"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Služby"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "URL pro stažení služeb"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Poslední aktualizace seznamu služeb"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Nastavením tohoto parametru na hodnotu 0 se vynutí pouze jednorázové "
+"spuštění skriptu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Spustit DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Stav"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Stav"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Stavový adresář"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Zastavit"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Zastavit DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Zastavit tuto službu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Zastaveno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Přehodit službu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Výchozí nastavení '0' znamená nekonečné opakování."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "Při chybě skript zastaví provádění po daném počtu opakování."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Název služby je již používán"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Není nakonfigurována žádná služba."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+"Toto je aktuální obsah souboru protokolu v adresáři %h pro tuto službu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Toto je výchozí nastavení, pokud spouštíte skripty DDNS sami (tj. přes cron "
+"s force_interval nastaveným na '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Tato možnost bude automaticky nastavena na vybrané rozhraní"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Nastavení časovače"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "Adresa URL pro rozpoznání"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Neznámé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Aktualizovat seznam služeb DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "Adresa URL použitá zprostředkovatelem DDNS pro aktualizaci."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"URL která je používána pro stažení souboru služeb. Výchozím nastavením je "
+"master repozitář OpenWRT balíčku DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Použít zabezpečený protokol HTTPS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Použít cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Uživatelem definovaný skript pro čtení systémových IP adres"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Uživatelské jméno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Použití specifického serveru DNS není podporováno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Hodnoty nižší než 5 minut (= 300 sekund) nejsou podporovány"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Hodnoty nižší než 'Interval kontroly' s výjimkou '0' nejsou podporovány"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Ověřit"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Varování"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Při chybě skript zopakuje neúspěšnou akci po daném čase."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Zapisuje podrobné zprávy do souboru protokolu. Soubor bude automaticky "
+"zkrácen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Zapisuje zprávy protokolu do syslogu. Kritické chyby budou vždy zapsány do "
+"syslogu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Pokud potřebujete zadat server DNS pro zjištění registrované IP adresy, měli "
+"byste si nainstalovat balíček \"bind-host\", \"knot-host\", \"drill\" nebo "
+"\"hostip\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Měli byste nainstalovat balíček 'bind-host' nebo 'knot-host' nebo 'drill' "
+"pro DNS dotazy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+"Měli byste nainstalovat balíček 'wget' nebo 'curl' nebo 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Měli byste nainstalovat balíček 'wget' nebo 'curl' nebo 'uclient-fetch' s "
+"balíčkem 'libustream-*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Měli byste nainstalovat balíček 'wget' nebo 'curl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Měli byste nainstalovat balíček 'wget' nebo 'uclient-fetch' nebo nahradit "
+"libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL je nainstalován, ale libcurl byl kompilován bez podpory proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL bez podpory proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "vlastní"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "dny/dnů"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "adresář, nebo cesta/soubor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "hodiny/hodin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minuty/minut"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "nebo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "nebo aktualizujte systém na nejnovější verzi OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "sekundy/sekund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "k použití HTTPS bez ověření serverových certifikátů (nedůvěryhodné)"
diff --git a/package/luci/applications/luci-app-ddns/po/da/ddns.po b/package/luci/applications/luci-app-ddns/po/da/ddns.po
new file mode 100644 (file)
index 0000000..c957435
--- /dev/null
@@ -0,0 +1,883 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-25 02:53+0000\n"
+"Last-Translator: drax red <drax@outlook.dk>\n"
+"Language-Team: Danish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/da/>\n"
+"Language: da\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.4-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" er ikke tilladt i stien af sikkerhedsårsag."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Tilføj nye tjenester..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Avancerede indstillinger"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Tillad ikke-offentlige IP'er"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Grundlæggende indstillinger"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Annuller"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Deaktiveret"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domæne"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Rediger"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Aktiveret"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Fejl"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Fil"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Globale indstillinger"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Information"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Logmappe"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Log til syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Navn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Netværk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Aldrig"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Ingen data"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Varsel"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Adgangskode"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Sti til CA-certifikat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:312
+msgid ""
+"Please follow the instructions on OpenWrt's homepage to enable IPv6 support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Genindlæs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Tjenester"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "State"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Stop"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Stoppet"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL-ADRESSE"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Ukendt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Brugernavn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Advarsel"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "åbningstider"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minutter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/de/ddns.po b/package/luci/applications/luci-app-ddns/po/de/ddns.po
new file mode 100644 (file)
index 0000000..bdb9099
--- /dev/null
@@ -0,0 +1,963 @@
+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: 2024-05-23 02:34+0000\n"
+"Last-Translator: David <dawin@users.noreply.hosted.weblate.org>\n"
+"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/de/>\n"
+"Language: de\n"
+"MIME-Version: 1.0\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.6-dev\n"
+"X-Poedit-SourceCharset: UTF-8\n"
+"X-Poedit-Basepath: .\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" ist aus Sicherheitsgründen nicht als Pfad erlaubt."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Neue Dienste hinzufügen..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Erweiterte Einstellungen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Erlaube Nicht-öffentliche IPs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Grundlegende Einstellungen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Bind-Netzwerk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "'Bind' an ein bestimmtes Netzwerk wird nicht unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"BusyBox's nslookup und Wget unterstützen nicht die IP Version für die "
+"Kommunikation festzulegen!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"BusyBox's nslookup und hostip unterstützen es nicht das TCP-Protokoll für "
+"DNS Anfragen anstelle des standardmäßigen UDP-Protokolls zu verwenden!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"BusyBox nslookup in der aktuellen compilierten Version kann gegebenen DNS-"
+"Server nicht korrekt verarbeiten!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Pfad zu CA-Zertifikaten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Ca Certs Pfad, der für das Herunterladen von Servicedaten verwendet werden "
+"soll. Stellen Sie IGNORE ein, um die Zertifikatsüberprüfung zu überspringen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Abbrechen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Kontrollintervall"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Einheit prüfen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Überprüfe die Service-Unterstützung..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Konfigurations-Fehler"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Dienst erstellen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Aktuelle Einstellungen:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Zur Zeit werden DDNS-Updates weder bei Systemstart, noch bei Schnittstellen-"
+"Events gestartet."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr "Update-Skript um Aktualisierungen an Ihren DDNS Anbieter zu senden."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Eigene Update-URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Eigenes Update-Skript"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS Autostart deaktiviert"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS-Autostart aktiviert"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS-Dienstanbieter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDNS-Dienst"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "DNS Anfragen über TCP nicht unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS-Server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Datumsformat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Bestimmt die Webseite von der die IP-Adresse des Systems gelesen wird."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+"Definiert die Schnittstelle, von der die aktuelle IP-Adresse des Systems "
+"gelesen wird"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+"Definiert das Netzwerk, von dem die IP-Adresse des Systems gelesen wird"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Definiert die Quelle zum Auslesen der IP-Adresse des Systems, die an den "
+"DDNS-Anbieter gesendet wird"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+"Legt fest welche IP-Adresse 'IPv4/IPv6' zum DDNS Anbieter gesendet wird"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Verzeichnis enthält für jeden aktiven Abschnitt Log-Dateien."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Verzeichnis enthält für jeden aktiven Abschnitt PID und andere "
+"Statusinformationen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domäne"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dynamisches DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Dynamic-DNS-Version"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Aktiviert sichere Kommunikation mit dem DDNS Anbieter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Aktiviert"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Fehler"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Höchstwiederholungszähler bei Fehlern"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Wiederholungsintervall bei Fehler"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Ereignis Netzwerk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Beispiel für IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Beispiel für IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Datei"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Folge den Instruktionen auf ihrer Webseite."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Unterstützte Kodierungen finden Sie hier"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Erzwinge IP-Version"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Erzwinge IP-Version nicht unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Erzwungene Aktualisierung"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Erzwinge TCP bei DNS-Anfragen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Erzwinge Abschnitt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Format"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Format: IP-Adresse oder FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget verwendet die IP des gewählten Netzwerkes; cURL verwendet die "
+"physikalische Schnittstelle."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Globale Einstellungen"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Zugriff zu ddns Abläufen gewähren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS nicht unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Hostname/FQDN um zu überprüfen, ob eine Aktualisierung stattgefunden hat "
+"oder notwendig ist"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP-Adressquelle"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP-Adressversion"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-Adresse"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Eine IPv6 Adresse muss in eckigen Klammern angegeben werden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 wird von diesem System derzeit nicht (voll) unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 nicht unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-Adresse"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Falls die Pakete Wget und cURL installiert sind, wird standardmäßig Wget für "
+"die Kommunikation verwendet."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+"Wenn dieser Service-Abschnitt deaktiviert ist, konnte es nicht gestartet "
+"werden."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Wenn Sie sichere Kommunikation verwenden, sollten Sie Serverzertifikate "
+"überprüfen!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"In einigen Versionen von OpenWrt wurde cURL/libcurl ohne Proxy Unterstützung "
+"compiliert."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informationen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Update-Skript oder Update-URL hier einfügen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Installieren Sie das 'ca-certificates' Paket oder die benötigten Zertifikate "
+"von Hand in das Standardverzeichnis /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Service installieren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Schnittstelle"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Intervall für das Senden von zwangsmässigen Updates an DDNS Provider"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Intervalleinheit zur Überprüfung auf geänderte IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr "Intervall für ein Zwangsupdate des DDNS-Eintrags"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Letzte Aktualisierung"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Protokolldateibetrachter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Protokollverzeichnis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Protokolllänge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Protokoll in Datei schreiben"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Schreibe Logs ins syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Hostname nachschlagen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Name"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Weder GNU Wget mit SSL noch cURL sind installiert um ein Netzwerk zur "
+"Kommunikation festzulegen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Weder GNU Wget mit SSL noch cURL sind installiert um sichere "
+"Aktualisierungen über HTTPS Protokoll zu unterstützen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Weder vom LuCI interface noch von der Konsole."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Netzwerk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Netzwerk auf dem die ddns-updater Skripte gestarten werden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Niemals"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Neuer DDns-Dienst…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Nächste Aktualisierung"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Keine Daten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Keine Zertifikate gefunden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Keine Protokollierung"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Nicht-öffentliche und standardmäßig blockierte IPs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Läuft nicht"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Hinweis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+"Anzahl der letzten Zeilen, die in der Protokolldatei gespeichert werden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+"OPTIONAL: Erzwingt die Verwendung einer reinen IPv4/IPv6 Kommunikation."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"OPTIONAL: Erzwingt die Verwendung von TCP anstelle von UDP bei DNS Anfragen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPTIONAL: Netzwerk, das zur Kommunikation verwendet werden soll"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPTIONAL: Proxy-Server für Adresserkennung und Aktualisierungen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"OPTIONAL: Ersetzt den voreingestellten DNS-Server um die 'Registrierte IP' "
+"zu ermitteln."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"Bei einem Fehler bricht das Skript die Ausführung nach einer bestimmten "
+"Anzahl von Wiederholungsversuchen ab."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Optionaler codierten Parameter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Optionaler Parameter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Optional: Ersetzt [PARAMENC] in der Update-URL (URL-codiert)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Optional: Ersetzt [PARAMENC] in der Update-URL (NICHT URL-codiert)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Proxy-Server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Kennwort"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Pfad zum CA-Zertifikat"
+
+#: 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 ""
+"Bitte den Anweisungen auf der OpenWrt-Homepage folgen, um IPv6-Unterstützung "
+"zu aktivieren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Bitte Protokolldatei einlesen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Protokolldatei (neu) einlesen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Den Dienst wirklich wechseln?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Registrierte IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Neu laden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Diesen Service neu laden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Ersetzt [DOMAIN] in Update-URL (URL-verschlüsselt)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Ersetzt [PASSWORD] in der Update-URL (URL-codiert)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Ersetzt [USERNAME] in der Update-URL (URL-codiert)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "DDns neustarten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Abschnitt erneut versuchen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Einmalig ausführen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Läuft"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Skript"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Einen Dienst auswählen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Der Dienst unterstützt diesen IP-Typ nicht"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Dienst nicht installiert"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Dienste"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Herunterladen von Dienst-URLs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Letzte Aktualisierung der Diensteliste"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr "Ist dieser Wert auf 0 gesetzt, wird das Skript nur einmal ausgeführt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "DDNS starten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Zustand"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Status-Verzeichnis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Stopp"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "DDNS anhalten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Diesen Dienst anhalten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Angehalten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Dienst wechseln"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Beim Standard-Wert von '0' wird es endlos erneut versucht."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+"Das Intervall, in dem jeder aufeinanderfolgende Wiederholungsversuch "
+"gestartet wird."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Dieser Dienstname ist bereits in Benutzung"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Kein Dienst konfiguriert."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+"Dies ist der aktuelle Inhalt der Protokolldatei in %h für diesen Dienst."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Dies ist die Standardeinstellung, wenn DDNS-Skripte selbst ausgeführt werden "
+"(z. B. via cron mit force_interval gesetzt auf '1')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Dies wird automatisch auf die ausgewählte Schnittstelle eingestellt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Zeitgeber-Einstellungen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL zur Adresserkennung für"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Unbekannt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "DDns-Diensteliste aktualisieren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+"Aktualisiere die URL welche benutzt wird, um den DDNS Provider zu "
+"aktualisieren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"Url, die zum Herunterladen der Servicedatei verwendet wird. Standardmäßig "
+"ist dies das Master-Openwrt-Ddns-Paket-Repositorium."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Verwende sicheres HTTP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Verwende cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+"Benutzerdefiniertes Skript, mit dem die aktuelle IP-Adresse des Systems "
+"gelesen wird"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Benutzername"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Verwendung spezifischer DNS-Server wird nicht unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Werte unter 5 Minuten === 300 Sekunden werden nicht unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Ausgenommen von \"0\" werden keine Werte kleine als der \"Prüfinterval\" "
+"unterstützt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Überprüfen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Warnung"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Welche Zeiteinheiten für Wiederholungszähler verwendet werden sollen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Schreibt detaillierte Meldungen in die Protokolldatei. Die Datei wird "
+"automatisch gekürzt."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Schreibt Meldungen ins Systemprotokoll. Kritische Fehler werden immer in das "
+"Systemprotokoll geschrieben."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Sie sollten das Programmpakete 'bind-host' oder 'knot-host' oder 'drill' "
+"oder 'hostip' installieren, wenn Sie einen DNS Server angeben müssen um Ihre "
+"registrierte IP zu ermitteln."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Sie sollten das Programmpakete 'bind-host' oder 'knot-host' oder 'drill' für "
+"DNS Anfragen installieren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+"Sie sollten das Programmpaket 'wget' oder 'curl' oder 'uclient-fetch' "
+"installieren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Sie sollten das Programmpaket 'wget' oder 'curl' oder 'uclient-fetch' mit "
+"'libustream-*ssl' installieren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Sie sollten das Programmpaket 'wget' oder 'curl' installieren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Sie sollten das Programmpaket 'wget' oder 'uclient-fetch' installieren oder "
+"libcurl ersetzen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"cURL ist installiert, aber libcurl wurde ohne Proxy-Unterstützung kompiliert."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL ohne Proxy Unterstützung"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "benutzerdefiniert"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "Tage"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "Verzeichnis oder Pfad/zur/Datei"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "Stunden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "Minuten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "oder"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "oder aktualisieren Sie Ihr System auf die neueste OpenWrt Version"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "Sekunden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"um HTTPS ohne Überprüfung der Server Zertifikate auszuführen (unsicher)"
diff --git a/package/luci/applications/luci-app-ddns/po/el/ddns.po b/package/luci/applications/luci-app-ddns/po/el/ddns.po
new file mode 100644 (file)
index 0000000..868230a
--- /dev/null
@@ -0,0 +1,886 @@
+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: 2022-10-03 08:34+0000\n"
+"Last-Translator: TakissX <pxatzidakis@gmail.com>\n"
+"Language-Team: Greek <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/el/>\n"
+"Language: el\n"
+"MIME-Version: 1.0\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 4.14.1\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" δεν επιτρέπεται στη διαδρομή για Λόγους Ασφαλείας."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Προσθήκη νέων υπηρεσιών..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Ρυθμίσεις για προχωρημένους"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Να επιτρέπονται μη-δημόσιες διευθύνσεις IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Βασικές Ρυθμίσεις"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Ακύρωση"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Μεσοδιάστημα Ελέγχου"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Διαμόρφωση"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Τρέχουσα ρύθμιση:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Προσαρμοσμένο URL-ενημέρωσης"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Υπηρεσία DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Μορφή ημερομηνίας"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Δυναμικό DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Ενεργοποιήθηκε"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Σφάλμα"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Διεπαφή"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Ονομα"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Δίκτυο"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Ποτέ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Κωδικός πρόσβασης"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Κατάσταση"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Όνομα χρήστη"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/en/ddns.po b/package/luci/applications/luci-app-ddns/po/en/ddns.po
new file mode 100644 (file)
index 0000000..93a553c
--- /dev/null
@@ -0,0 +1,883 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-11-30 14:34+0000\n"
+"Last-Translator: rygle <pittos@post.com>\n"
+"Language-Team: English <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/en/>\n"
+"Language: en\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.3-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Advanced Settings"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Cancel"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configuration"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Enabled"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Network"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/es/ddns.po b/package/luci/applications/luci-app-ddns/po/es/ddns.po
new file mode 100644 (file)
index 0000000..025ea1a
--- /dev/null
@@ -0,0 +1,952 @@
+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: 2024-06-20 20:09+0000\n"
+"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\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.6-rc\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" no está permitido en la ruta por motivo de seguridad."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Añadir nuevos servicios..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Ajustes avanzados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Permitir IPs no publicas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Ajustes básicos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Red de enlace"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "No se admite el enlace a una red específica"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"¡El nslookup y Wget de BusyBox no admiten especificar la versión de IP que "
+"se usará para la comunicación con el proveedor de DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"¡El nslookup y el hostip de BusyBox no admiten especificar el uso de TCP en "
+"lugar del UDP predeterminado al solicitar el servidor DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"¡El nslookup de BusyBox en la versión compilada actual no maneja los "
+"servidores DNS dados correctamente!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Ruta a certificados CA"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Ruta a certificados CA que se utilizará para descargar datos de servicios. "
+"Configure IGNORE para omitir la validación del certificado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Intervalo de comprobación"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Comprobar unidad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Comprobando el soporte de servicio..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configuración"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Error de configuración"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Crear servicio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Configuración actual:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Actualmente, las actualizaciones DDNS no se inician en el arranque o en los "
+"eventos de la interfaz."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Script personalizado que se utilizará para actualizar su proveedor DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "URL de actualización personalizada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Script de actualización personalizado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Inicio automático DDNS desactivado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Inicio automático DDNS activado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Proveedor de servicios DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Servicio DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Las peticiones DNS a través de TCP no son compatibles"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Servidor DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Formato de fecha"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+"Define la página web desde la que leer la dirección IP de los sistemas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Define la interfaz desde la que leer la dirección IP de los sistemas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Define la red desde la que leer la dirección IP de los sistemas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Define la fuente desde la que leer la dirección IP de los sistemas, que se "
+"enviará al proveedor DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Define qué dirección IP 'IPv4 / IPv6' se envía al proveedor de DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+"El directorio contiene archivos de registro para cada sección en ejecución."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"El directorio contiene PID y otra información de estado para cada sección en "
+"ejecución."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Desactivado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Dominio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS dinámico"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Versión de DNS dinámico"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Editar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Activa la comunicación segura con el proveedor de DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Activado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Error"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Número máximo de reintentos en caso de error"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Intervalo de reintento de error"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Red de eventos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Ejemplo para IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Ejemplo para IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Archivo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Siga las instrucciones que encontrará en su página WEB."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Para ver los códigos soportados mira aquí"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Forzar versión de IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Forzar versión de IP no soportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Forzar actualización cada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Forzar TCP en DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Forzar unidad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formato: IP o FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr "GNU Wget usará la IP de la red dada, cURL usará la interfaz física."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Configuración global"
+
+#: 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"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS no soportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Nombre de host / FQDN para validar, si la actualización de IP ocurre o es "
+"necesaria"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Fuente de direccion IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Versión de dirección IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Dirección IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "La dirección IPv6 debe darse entre corchetes"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 actualmente no es (totalmente) compatible con este sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 no soportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Dirección IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Si están instalados Wget y cURL, Wget se usa para la comunicación de forma "
+"predeterminada."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Si esta sección de servicio está desactivada, no podría iniciarse."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Si utiliza una comunicación segura, debe verificar los certificados del "
+"servidor!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"En algunas versiones, cURL / libcurl en OpenWrt se compila sin soporte de "
+"proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Información"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+"Insertar una secuencia de comandos de actualización o una URL de "
+"actualización"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Instale el paquete de 'ca-certificates' o los certificados necesarios a mano "
+"en el directorio predeterminado /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Instalar servicio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interfaz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Intervalo para forzar el envío de actualizaciones al proveedor de DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Unidad de intervalo para verificar el cambio de IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Unidad de intervalo para forzar el envío de actualizaciones al proveedor "
+"DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Última actualización"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Visor de archivos de registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Directorio de registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Longitud de registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Registro al archivo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Inicie sesión en syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Búsqueda de nombre de host"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nombre"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Ni GNU Wget con SSL ni cURL instalado para seleccionar una red para usar "
+"para la comunicación."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Ni GNU Wget con SSL ni cURL instalado para admitir actualizaciones seguras a "
+"través del protocolo HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Ni desde la interfaz LuCI ni desde la consola."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Red"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Red en la que se iniciarán los scripts ddns-updater"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Nunca"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Nuevo servicio DDNS…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Siguiente actualización"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Sin datos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "No se encontraron certificados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Sin registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "IPs no públicos y bloqueados por defecto"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "No se está ejecutando"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Nota"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Número de últimas líneas almacenadas en archivos de registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "OPCIONAL: Forzar el uso de la comunicación solo IPv4 / IPv6 pura."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"OPCIONAL: Forzar el uso de TCP en lugar del UDP predeterminado en las "
+"peticiones DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPCIONAL: Red a utilizar para la comunicación"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPCIONAL: Servidor proxy para detección y actualizaciones."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"OPCIONAL: Use un servidor DNS no predeterminado para detectar 'IP "
+"registrada'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"En caso de error, el script detendrá la ejecución después de un número "
+"determinado de reintentos."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Parámetro opcional codificado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Parámetro opcional"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+"Opcional: Reemplaza [PARAMENC] en la URL de actualización (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+"Opcional: Reemplaza [PARAMOPT] en la URL de actualización (NO URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Servidor proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Contraseña"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Ruta al certificado 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 ""
+"Siga las instrucciones en la página de inicio de OpenWrt para activar el "
+"soporte de IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Por favor presione el botón [Leer]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Leer / releer el archivo de registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "¿Realmente quiere cambiar de servicio?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "IP registrada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Recargar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Recargar este servicio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Reemplaza [DOMAIN] en URL de actualización (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Reemplaza [PASSWORD] en URL de actualización (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Reemplaza [USERNAME] en URL de actualización (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Reiniciar DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Unidad de reintento"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Iniciar una vez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Ejecutando"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Script"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Seleccione un servicio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "El servicio no admite este tipo de IP"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Servicio no instalado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Servicios"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "URL de descarga de servicios"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Última actualización de la lista de servicios"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Establecer este parámetro en 0 obligará al script a ejecutarse solo una vez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Iniciar DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Estado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Estado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Estado de directorio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Detener"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Detener DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Detener este servicio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Detenido"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Cambiar servicio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "La configuración predeterminada de '0' reintentará infinito."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "El intervalo entre el que comenzará cada reintento sucesivo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "El nombre del servicio ya está en uso"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "No hay servicio configurado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+"Este es el contenido actual del archivo de registro en %h para este servicio."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Este es el valor predeterminado si ejecuta scripts DDNS usted mismo (es "
+"decir, a través de cron con force_interval establecido en '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Esto se configurará automáticamente en la interfaz seleccionada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Configuración del temporizador"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL para detectar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Desconocido"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Actualizar la lista de servicios DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "Actualizar URL que se utilizará para actualizar su proveedor de DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"URL utilizada para descargar el archivo de servicios. De forma "
+"predeterminada, es el repositorio principal del paquete ddns de openwrt ."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Usar HTTP seguro (HTTPS)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Usar cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+"Script definido por el usuario para leer la dirección IP de los sistemas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nombre de usuario"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "El uso de un servidor DNS específico no es compatible"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Los valores inferiores a 5 minutos == 300 segundos no son compatibles"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Los valores inferiores a 'Intervalo de verificación' excepto '0' no son "
+"compatibles"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Verificar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Advertencia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Qué unidades de tiempo utilizar para los contadores de reintentos."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Escribe mensajes detallados en el archivo de registro. El archivo se "
+"truncará automáticamente."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Escribe mensajes de registro en syslog. Los errores críticos siempre se "
+"escribirán en syslog."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Debe instalar el paquete 'bind-host' o 'knot-host' o 'drill' o 'hostip', si "
+"necesita especificar un servidor DNS para detectar su IP registrada."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Debe instalar el paquete 'bind-host' o 'knot-host' o 'drill' para las "
+"peticiones DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Debe instalar el paquete 'wget' o 'curl' o 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Debe instalar 'wget' o 'curl' o 'uclient-fetch' con el paquete 'libustream-"
+"*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Debe instalar el paquete 'wget' o 'curl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Debe instalar el paquete 'wget' o 'uclient-fetch' o reemplazar libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL está instalado, pero libcurl fue compilado sin soporte de proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL sin soporte de proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "personalizado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "Días"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "Directorio o ruta/archivo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "horas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minutos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "o"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "o actualice su sistema a la última versión de OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "Segundos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"Para ejecutar HTTPS sin verificación de certificados de servidor (inseguro)"
diff --git a/package/luci/applications/luci-app-ddns/po/fa/ddns.po b/package/luci/applications/luci-app-ddns/po/fa/ddns.po
new file mode 100644 (file)
index 0000000..d03a9d8
--- /dev/null
@@ -0,0 +1,883 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-05-24 06:13+0000\n"
+"Last-Translator: Crysys_1379 <mahdi137921@gmail.com>\n"
+"Language-Team: Persian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/fa/>\n"
+"Language: fa\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.6-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "به دلایل امنیتی در Path مجاز نیست"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "تنظیمات پیشرفته"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "شروع خودکار DDNS غیرفعال است"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "غیرفعال"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "فعال"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "تنظیمات کلی"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "اگر این بخش از سرویس غیرفعال باشد، نمی توان آن را راه اندازی کرد."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/fi/ddns.po b/package/luci/applications/luci-app-ddns/po/fi/ddns.po
new file mode 100644 (file)
index 0000000..8b798e2
--- /dev/null
@@ -0,0 +1,891 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2022-03-13 12:25+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"Language-Team: Finnish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/fi/>\n"
+"Language: fi\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 4.12-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" ei ole sallittu polussa turvallisuussyistä."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Lisää uusia palveluita..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Lisäasetukset"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Salli ei-julkiset IP-osoitteet"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Perusasetukset"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Sido verkko"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Sitomista tiettyyn verkkoon ei tueta"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"BusyBoxin nslookup ja Wget eivät tue DDNS-palveluntarjoajan kanssa "
+"kommunikointiin käytettävän IP-version määrittämistä!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"BusyBoxin nslookup ja hostip eivät tue TCP:n käyttöä oletus-UDP:n sijasta "
+"DNS-palvelinta pyydettäessä!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"BusyBoxin nslookup nykyisessä käännetyssä versiossa ei käsittele annettuja "
+"DNS-palvelimia oikein!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "CaCerts-polku"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Ca Certs -polku, jota käytetään palvelutietojen lataamiseen. Aseta IGNORE "
+"ohittaaksesi varmenteen vahvistuksen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Peruuta"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Tarkistusväli"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Tarkistetaan palvelutukea..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Kokoonpano"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Määritysvirhe"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Luo palvelu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Nykyinen asetus:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Pois käytöstä"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Verkkotunnus"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Muokkaa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Käytössä"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Virhe"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Tiedosto"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Muoto"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Muoto: IP tai FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Yleiset asetukset"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS ei tuettu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP-osoitteen lähde"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP-osoitteen versio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-osoite"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 ei tuettu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-osoite"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Tietoja"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Tietoja"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Asenna palvelu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Sovitin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Viimeisin päivitys"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nimi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Verkko"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Ei ikinä"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Uusi DDns-palvelu…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Seuraava päivitys"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Ei tietoja"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Sertifikaatteja ei löytynyt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Ei käynnissä"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Huomaa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Salasana"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Polku CA-varmenteeseen"
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Rekisteröity IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Lataa uudelleen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Lataa tämä palvelu uudelleen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Käynnistä DDns uudelleen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Suorita kerran"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Käynnissä"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Komentojono"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Valitse palvelu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Palvelu ei tue tätä IP-tyyppiä"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Palvelua ei ole asennettu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Palvelut"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Käynnistä DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Tila"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Tila"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Pysäytä"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Pysäytä DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Pysäytä tämä palvelu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Pysäytetty"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Vaihda palvelua"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Ajastimen asetukset"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Tuntematon"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Käytä cURL:ia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Käyttäjätunnus"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Varoitus"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "päivää"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "tuntia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minuuttia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "tai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "päivitä järjestelmäsi uusimpaan OpenWrt-julkaisuun"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "sekuntia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/fr/ddns.po b/package/luci/applications/luci-app-ddns/po/fr/ddns.po
new file mode 100644 (file)
index 0000000..9199acb
--- /dev/null
@@ -0,0 +1,959 @@
+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: 2023-06-13 08:35+0000\n"
+"Last-Translator: viking76 <liaudetgael@gmail.com>\n"
+"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/fr/>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\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 4.18-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+"\"../\" non autorisé dans le chemin d'accès pour des raisons de sécurité."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Ajouter de nouveaux services..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Paramètres avancés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Autoriser les adresses IP non-publiques"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Paramètres de base"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Réseau Attaché"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Attacher à un réseau spécifique n'est pas pris en charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"Le nslookup et le Wget de BusyBox ne permettent pas de spécifier la version "
+"IP à utiliser pour la communication avec le fournisseur DDNS !"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"Le nslookup et l'hostip de BusyBox ne permettent pas de spécifier "
+"l'utilisation de TCP au lieu de l'UDP par défaut lors de la demande de "
+"serveur DNS !"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"Le nslookup de BusyBox dans la version compilée actuelle ne gère pas "
+"correctement les serveurs DNS donnés !"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Chemin d'accès des certificats CA"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Chemin d'accès Ca Certs qui sera utilisé afin de télécharger les données de "
+"service. Assigne IGNORE afin de sauter la validation de certificat."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Annuler"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Intervalle de contrôle"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Vérifier l'unité"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Vérifiant le support du service..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configuration"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Erreur de configuration"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Créer un service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Paramètre actuel :"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Actuellement, les mises à jour DDNS ne sont pas lancées au démarrage ou lors "
+"des événements d'interface."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Script de mise à jour personnalisé à utiliser pour mettre à jour votre "
+"fournisseur DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "URL de mise à jour personnalisée"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Script de mise à jour personnalisé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Démarrage automatique DDNS désactivé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Démarrage automatique DDNS activé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Fournisseur de service de DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Service DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Les requêtes DNS via TCP ne sont pas prises en charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Serveur DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Format de date"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Définit la page web depuis laquelle lire les adresses IP système."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Définit l'interface depuis laquelle lire les adresses IP système"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Définit le réseau depuis lequel lire les adresses IP système"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Définit la source à partir de laquelle lire l'adresse IP système qui sera "
+"envoyée au fournisseur DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+"Définit quelle adresse IP 'IPv4/IPv6' est à envoyer au fournisseur DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+"Le répertoire contient des fichiers journaux pour chaque section en cours "
+"d'exécution."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Le répertoire contient le PID et d'autres informations d'état pour chaque "
+"section en cours d'exécution."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domaine"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS Dynamique"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Version DNS dynamique"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Éditer"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Activez la communication sécurisée avec le fournisseur DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Activé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Erreur"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Intervalle de relance d'erreur"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Évènement réseau"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Exemple pour IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Exemple pour IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Fichier"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Suivez les instructions que vous trouverez sur leur page Web."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Pour les codes pris en charge, regardez ici"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Forcer la version IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Forcer la version IP n'est pas pris en charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Intervalle pour le forçage"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Forcer TCP sur DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Forcer l'unité"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Format"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Format : IP ou FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget utilisera l'IP du réseau donné, cURL utilisera l'interface physique."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Paramètres généraux"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Accorder l'accès aux procédures de ddns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS non pris en charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Nom d'hôte/FQDN à valider, si une mise à jour IP se produit ou si nécessaire"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Source de l'adresse IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Version de l'adresse IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Adresse IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "L'adresse IPv6 doit être donnée entre crochets"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+"IPv6 n'est actuellement pas (entièrement) pris en charge par ce système"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 non pris en charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Adresse IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Si les packages Wget et cURL sont installés, Wget est utilisé pour la "
+"communication par défaut."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+"Si cette section de service est désactivée, elle n'a pas pu être démarrée."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Si vous utilisez une communication sécurisée, vous devez vérifier les "
+"certificats de serveur !"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"Dans certaines versions, cURL/libcurl dans OpenWrt est compilé sans prise en "
+"charge de proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Infos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Information"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Insérer un script OU une URL de mise à jour"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Installez le paquet 'ca-certificats' ou les certificats nécessaires à la "
+"main dans le répertoire par défaut /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Installer le service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Intervalle pour forcer l'envoi des mises à jour au fournisseur DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Unité d'intervalle pour vérifier l'IP modifiée"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Unité d'intervalle pour forcer l'envoi des mises à jour au fournisseur DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Dernière mise à jour"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Visualiseur de fichier de journa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Répertoire de journal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Longueur du journal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Connectez-vous au fichier"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Connectez-vous à syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Rechercher le nom d'hôte"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nom"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Ni GNU Wget avec SSL ni cURL installé pour sélectionner un réseau à utiliser "
+"pour la communication."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Ni GNU Wget avec SSL ni cURL installé pour prendre en charge les mises à "
+"jour sécurisées via le protocole HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Ni de l'interface LuCI ni de la ligne de commande."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Réseau"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Réseau sur lequel les scripts ddns-updater seront démarrés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Jamais"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Nouveau service DDns…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Prochaine mise à jour"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Aucune donnée"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Il n'y a aucun certificat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Pas de journaux"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "IP non publiques et par défaut bloquées"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Ne fonctionne pas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Remarque"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Nombre de dernières lignes stockées dans les fichiers journaux"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+"FACULTATIF: Force l'utilisation de la communication IPv4/IPv6 uniquement."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"FACULTATIF: Forcez l'utilisation de TCP au lieu d'UDP par défaut sur les "
+"requêtes DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "FACULTATIF : Réseau à utiliser pour la communication"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "FACULTATIF : Serveur proxy pour la détection et les mises à jour."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"FACULTATIF : Utiliser un serveur DNS autre que celui par défaut pour "
+"détecter 'IP enregistrée'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr "En cas d'erreur, le script s'arrêtera après un nombre d'essais donné."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Paramètre codé en option"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Paramètre facultatif"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Facultatif: Remplace [PARAMENC] dans Update-URL (URL encodée)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Facultatif: Remplace [PARAMOPT] dans Update-URL (NON codé URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Serveur proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Mot de passe"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Chemin vers le certificat 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 ""
+"Veuillez suivre les instructions sur la page d'accueil d'OpenWrt pour "
+"activer le support IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Veuillez appuyer sur le bouton [Lire]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Lire/Relire le fichier de journal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Vraiment changer de service ?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Adresse IP enregistrée"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Recharger"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Recharger ce service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Remplace [DOMAIN] dans l'URL de mise à jour (encodé URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Remplace [MOT DE PASSE] dans l'URL de mise à jour (encodé URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Remplace [NON D'UTILISATEUR] dans l'URL de mise à jour (encodé URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Redémarrer DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Réessaier l'unité"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Exécuter une fois"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "En cours d'exécution"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Script"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Choisis un service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Le service ne supporte pas ce type d'adresse IP"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Service non-installé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Services"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Téléchargement de l'URL de services"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Dernière mise à jour de la liste de services"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Définir ce paramètre sur 0 forcera le script à ne s’exécuter qu’une seule "
+"fois"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Démarrez DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "État"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "État"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Répertoire d'état"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Arrêter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Arrêtez DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Arrêtez ce service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Arrêté"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Change de service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Le paramètre par défaut de '0' réessayera à l'infini."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "Intervalle entre deux tentatives réussies."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Le nom du service est déjà utilisé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Il n'y a aucun service configuré"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Il s’agit du contenu actuel du fichier journal en %h pour ce service."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"C'est la valeur par défaut si vous exécutez vous-même les scripts DDNS "
+"(c'est-à-dire via cron avec force_interval réglé sur '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Ce sera automatiquement réglé sur l'interface sélectionnée"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Paramètres de la minuterie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL a détecter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Inconnue"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Fait une mise à jour de la liste de services DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+"Mettre à jour l'URL à utiliser pour mettre à jour votre fournisseur DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"URL utilisée pour télécharger le fichier des services. Par défaut, il s’agit "
+"du dépôt principal openwrt du paquet ddns."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Utilisez HTTP Secure"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Utilisez cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Script défini par l'utilisateur pour lire l'adresse IP des systèmes"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nom d'utilisateur"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Utilisation d'un serveur DNS spécifique non pris en charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+"Les valeurs inférieures à 5 minutes == 300 secondes ne sont pas prises en "
+"charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Les valeurs inférieures à 'Vérifier l'intervalle' sauf '0' ne sont pas "
+"prises en charge"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Vérifier"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Avertissement"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"En cas d'erreur, le script réessayera l'action ayant échoué après un délai "
+"donné."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Écrit des messages détaillés dans le fichier journal. Le fichier sera "
+"tronqué automatiquement."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Écrit les messages de journal dans syslog. Les erreurs critiques seront "
+"toujours écrites dans syslog."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Vous devez installer le package 'bind-host' ou 'knot-host' ou 'drill' ou "
+"'hostip', si vous devez spécifier un serveur DNS pour détecter votre IP "
+"enregistrée."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Vous devez installer le package 'bind-host' ou 'knot-host' ou 'drill' pour "
+"les requêtes DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Vous devez installer le paquet 'wget' ou 'curl' ou 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Vous devez installer 'wget' ou 'curl' ou 'uclient-fetch' avec le paquet "
+"'libustream-* ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Vous devez installer le package «wget» ou «curl»."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Vous devez installer le paquet 'wget' ou 'uclient-fetch' ou remplacer "
+"libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"cURL est installé, mais libcurl a été compilé sans prise en charge proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL sans prise en charge proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "personnalisé"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "jours"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "répertoire ou chemin/fichier"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "heures"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minutes"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "ou"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "ou mettez à jour votre système vers la dernière version d'OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "secondes"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"exécuter HTTPS sans vérification des certificats de serveur (non sécurisé)"
diff --git a/package/luci/applications/luci-app-ddns/po/he/ddns.po b/package/luci/applications/luci-app-ddns/po/he/ddns.po
new file mode 100644 (file)
index 0000000..53e8188
--- /dev/null
@@ -0,0 +1,887 @@
+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: 2024-01-10 20:57+0000\n"
+"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"Language-Team: Hebrew <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/he/>\n"
+"Language: he\n"
+"MIME-Version: 1.0\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.4-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "הגדרות מתקדמות"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "ביטול"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "הגדרות"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+#, fuzzy
+msgid "Custom update-URL"
+msgstr "עדכן URL באופן ידני"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS דינאמי"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "פעילה"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "מנשק"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "רשת"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "אף פעם"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "סיסמא"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "שם משתמש"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/hi/ddns.po b/package/luci/applications/luci-app-ddns/po/hi/ddns.po
new file mode 100644 (file)
index 0000000..12920a7
--- /dev/null
@@ -0,0 +1,877 @@
+msgid ""
+msgstr ""
+"Language: hi\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/hu/ddns.po b/package/luci/applications/luci-app-ddns/po/hu/ddns.po
new file mode 100644 (file)
index 0000000..3e8e6c4
--- /dev/null
@@ -0,0 +1,951 @@
+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: 2023-10-06 08:29+0000\n"
+"Last-Translator: Norbert Szentner <upd6la1j@duck.com>\n"
+"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/hu/>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\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.1-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "Biztonsági okokból a „../” nem engedélyezett az útvonalban."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Új szolgáltatások hozzáadása…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+#, fuzzy
+msgid "Advanced Settings"
+msgstr "Haladó Beállítások"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Nem nyilvános IP-k engedélyezése"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Alapszintű beállítások"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Hálózat kötése"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Egy bizonyos hálózathoz való kötés nem támogatott"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"A BusyBox nslookup és Wget parancsai nem támogatják azt, hogy meghatározza "
+"az IP verziót DDNS szolgáltatással való kommunikációra!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Mégse"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Ellenőrzési időköz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Beállítás"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Beállítási hiba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Szolgáltatás létrehozása"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Jelenlegi beállítás:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Jelenleg a DDNS frissítések nincsenek elindítva a rendszerindításkor vagy a "
+"csatolóeseményeknél."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"A DDNS-szolgáltató frissítéséhez használt egyéni frissítési parancsfájl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Egyéni frissítési URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Egyéni frissítő parancsfájl"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "A DDNS automatikus indítása letiltva"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "A DDNS automatikus indítása engedélyezve"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS-szolgáltató"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDns szolgáltatás"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "a TCP-n keresztüli DNS-kérések nem támogatottak"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS-kiszolgáló"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Dátumformátum"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+"Meghatározza azt a csatolót, amelyből a rendszerek IP-címeit olvasni kell"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+"Meghatározza azt a hálózatot, amelyből a rendszerek IP-címeit olvasni kell"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Meghatározza azt a forrást, amelyből a rendszerek IP-címeit olvasni kell, és "
+"amelyik elküldésre kerül a DDNS-szolgáltatónak"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+"Meghatározza, hogy mely „IPv4/IPv6” IP-cím legyen elküldve a DDNS-"
+"szolgáltatónak"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "A könyvtár naplófájlokat tartalmaz minden egyes futó szakaszhoz."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"A könyvtár folyamatazonosítókat és egyéb állapotinformációkat tartalmaz "
+"minden egyes futó szakaszhoz."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Letiltva"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Tartomány"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dinamikus DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Dinamikus DNS verziója"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Szerkesztés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Biztonságos kommunikáció engedélyezése a DDNS-szolgáltatóval"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Engedélyezve"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Hiba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Hiba újrapróbálási időköze"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Eseményhálózat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Példa az IPv4-hez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Példa az IPv6-hoz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Fájl"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "A támogatott kódokért nézzen ide"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "IP-verzió kényszerítése"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Az IP verziójának kényszerítése nem támogatott"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Kényszerítés időköze"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "TCP kényszerítése a DNS-en"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formátum"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formátum: IP vagy FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"A GNU Wget az adott hálózat IP-jét fogja használni, a cURL a fizikai "
+"csatolót fogja használni."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "A HTTPS nem támogatott"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr "Ellenőrzendő gépnév vagy FQDN, ha IP-frissítés történik vagy szükséges"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP-cím forrása"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP-cím verziója"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-cím"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Az IPv6-címet szögletes zárójelben kell megadni"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "Ez a rendszer jelenleg nem (teljesen) támogatja az IPv6-ot"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "Az IPv6 nem támogatott"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-cím"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Ha a Wget és a cURL csomag is telepítve van, akkor alapértelmezetten a Wget "
+"lesz használva a kommunikációnál."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+"Ha ez a szolgáltatási szakasz le van tiltva, akkor azt nem sikerült "
+"elindítani."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Biztonságos kommunikáció használatakor ellenőriznie kell a kiszolgáló "
+"tanúsítványait!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"Az OpenWrt-ben lévő cURL/libcurl néhány verziója proxy-támogatás nélkül lett "
+"lefordítva."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Információ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Információ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Csatoló"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Időköz a DDNS-szolgáltatónak küldött frissítések kényszerítéséhez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Időköz mértékegysége a megváltozott IP ellenőrzéséhez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Időköz mértékegysége a DDNS-szolgáltatónak küldött frissítések "
+"kényszerítéséhez."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Utolsó frissítés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Naplófájl-megjelenítő"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Naplókönyvtár"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Napló hossza"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Naplózás fájlba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Naplózás a rendszernaplóba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Gépnév keresése"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Név"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Sem az SSL-lel rendelkező GNU Wget, sem a cURL nincs telepítve a "
+"kommunikációhoz használandó hálózat kiválasztásához."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Sem az SSL-lel rendelkező GNU Wget, sem a cURL nincs telepítve a HTTPS "
+"protokollon keresztüli biztonságos frissítések támogatásához."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Hálózat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "A hálózat, amelyen a DDNS-frissítő parancsfájlok el fognak indulni"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Soha"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Új DDNS szolgáltatás…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Következő frissítés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Nincs adat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Nem találhatók tanúsítványok"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Nincs naplózás"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Nem nyilvános és alapértelmezetten blokkolt IP-k"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Nem fut"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Figyelmeztetés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "A naplófájlokban tárolt utolsó sorok száma"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+"ELHAGYHATÓ: a tisztán csak IPv4/IPv6 kommunikáció használatának "
+"kényszerítése."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"ELHAGYHATÓ: TCP használatának kényszerítése az alapértelmezett UDP helyett a "
+"DNS-kéréseknél."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "ELHAGYHATÓ: a kommunikációhoz használandó hálózat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "ELHAGYHATÓ: proxy-kiszolgáló a felismeréshez és a frissítésekhez."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"ELHAGYHATÓ: nem alapértelmezett DNS-kiszolgáló használata a „Regisztrált IP” "
+"felismeréséhez."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr "Elhagyható kódolt paraméterek"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Elhagyható paraméter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+"Elhagyható: lecseréli a [PARAMENC] értéket a frissítési URL-ben (URL-"
+"kódoltan)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+"Elhagyható: lecseréli a [PARAMOPT] értéket a frissítési URL-ben (NEM URL-"
+"kódoltan)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Proxy-kiszolgáló"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Jelszó"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Útvonal a CA-tanúsítványhoz"
+
+#: 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 ""
+"Kövesse az OpenWrt honlapján lévő utasításokat az IPv6 támogatás "
+"engedélyezéséhez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Nyomja meg a [Beolvasás] gombot"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Naplófájl olvasása vagy újraolvasása"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Regisztrált IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Újratöltés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "A szolgáltatás újratöltése"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Lecseréli a [JELSZÓ] értéket a frissítési URL-ben (URL-kódoltan)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+"Lecseréli a [FELHASZNÁLÓNÉV] értéket a frissítési URL-ben (URL-kódoltan)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "DDns újraindítása"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Futtatás egyszer"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Fut"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Parancsfájl"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Szolgáltatások"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "DDNS indítása"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Állapot"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Állapot"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Állapotkönyvtár"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Megállítás"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "DDNS leállítása"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "A szolgáltatás leállítása"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Megállítva"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Az alapértelmezett „0” beállítás végtelenszer fog újrapróbálkozni."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+"Hiba esetén a parancsfájl leállítja a végrehajtást a megadott "
+"újrapróbálkozások száma után."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "A szolgáltatás neve már használatban van"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Nincs beállított szolgáltatás."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Ez az alapértelmezett, ha saját maga futtatja a DDNS parancsfájlokat (azaz "
+"cron használatával „0” értékre állított force_interval beállítással)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Ez automatikusan be lesz állítva a kiválasztott csatolóhoz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Időzítő beállításai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "Felismerendő URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Ismeretlen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "A használandó frissítési URL a DDNS-szolgáltató frissítéséhez."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "HTTP biztonság használata"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "cURL használata"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+"Felhasználó által meghatározott parancsfájl a rendszerek IP-címének "
+"olvasásához"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Felhasználónév"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Bizonyos DNS-kiszolgáló használata nem támogatott"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Az 5 perc == 300 másodperc alatti értékek nem támogatottak"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Az „Ellenőrzési időköz” értékénél alacsonyabb értékek a „0” kivételével nem "
+"támogatottak"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Ellenőrzés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Figyelmeztetés"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"Hiba esetén a parancsfájl újrapróbálja a sikertelen műveletet a megadott idő "
+"után."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Részletes üzeneteket ír a naplófájlba. A fájl automatikusan csonkolva lesz."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Kiírja a naplóüzeneteket a rendszernaplóba. A kritikus hibák mindig a "
+"rendszernaplóba lesznek írva."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Telepítenie kell a „bind-host”, a „knot-host” vagy a „drill” csomagot a DNS-"
+"kérésekhez."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Telepítenie kell a „wget”, a „curl” vagy az „uclient-fetch” csomagot."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Telepítenie kell a „wget”, a „curl” vagy a „libustream-*ssl” csomaggal "
+"rendelkező „uclient-fetch” csomagot."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Telepítenie kell a „wget” vagy a „curl” csomagot."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Telepítenie kell a „wget” vagy az „uclient-fetch” csomagot, vagy cserélje le "
+"a „libcurl” csomagot."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"A cURL telepítve van, de a libcurl proxy-támogatás nélkül lett lefordítva."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL proxy-támogatás nélkül"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "egyéni"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "nap"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "könyvtár vagy útvonal/fájl"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "óra"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "perc"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "vagy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "vagy frissítse a rendszerét a legújabb OpenWrt kiadásra"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "másodperc"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"HTTPS futtatásához a kiszolgáló tanúsítványainak ellenőrzése nélkül (nem "
+"biztonságos)"
diff --git a/package/luci/applications/luci-app-ddns/po/it/ddns.po b/package/luci/applications/luci-app-ddns/po/it/ddns.po
new file mode 100644 (file)
index 0000000..1414377
--- /dev/null
@@ -0,0 +1,945 @@
+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: 2024-06-13 13:11+0000\n"
+"Last-Translator: beppeilgommista <enrico.ghignatti@gmail.com>\n"
+"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/it/>\n"
+"Language: it\n"
+"MIME-Version: 1.0\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.6-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" non è permesso nel percorso per Motivi di Sicurezza."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Aggiungi un nuovo servizio..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Impostazioni avanzate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Consenti IP non pubblici"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Impostazioni di base"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Collega Rete"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Collegamento a una specifica rete non supportato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"Nslookup di BusyBox e Wget non supportano lo specificare la versione IP da "
+"usare per la comunicazione con il Provider DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"Nslookup di BusyBox e hostip non supportano lo specificare l'uso di TCP "
+"invece di UDP di default quando richiedono il server DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"Nslookup di BusyBox nella versione compilata corrente non gestisce i dati "
+"Server DNS correttamente!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Percorso certificati CA"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Percorso dei certificati CA che verrà utilizzato per scaricare i dati dei "
+"servizi. Imposta IGNORA per saltare la convalida del certificato."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Annulla"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Intervallo di Controllo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Unità controllo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Verifica del supporto del servizio..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configurazione"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Errore di Configurazione"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Crea Servizio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Impostazioni Correnti:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Al momento gli aggiornamenti DDNS non sono avviati al boot o ad eventi da "
+"interfacce."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Script aggiornamento personalizzato da usare per aggiornare il tuo DDNS "
+"Provider."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "URL di aggiornamento personalizzato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Script di aggiornamento personalizzato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Autoavvio DDNS disabilitato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "AutoAvvio DDNS attivo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Provider del Servizio DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Servizio DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Richieste DNS via TCP non supportate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Server DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Formato Data"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Definisce la pagina Web da cui leggere l'indirizzo IP del sistema."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Definisce l'interfaccia che legge l'indirizzo IP dei sistemi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Definisce la rete da cui leggere l'indirizzo IP del sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Definisce la sorgente da cui leggere l'indirizzo IP del sistema, questa "
+"verrà inviata al provider DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Definisce quale indirizzo IP 'IPv4/IPv6' è mandato al provider DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Cartella che contiene i file Log di ogni sezione in esecuzione."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Cartella che contiene i PID e altre informazioni di status di ogni sezione "
+"in esecuzione."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Disabilitato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Dominio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS Dinamico"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Versione DNS Dinamico"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Modifica"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Abilita la comunicazione sicura con il provider DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Abilitato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Errore"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Intervallo nuovo tentativo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Network Evento"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Esempio di IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Esempio di IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "File"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Segui le istruzioni che trovi sulla loro pagina WEB."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Per i codici supportati guarda qui"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Forza Versione IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Forza Versione IP non supportato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Intervallo aggiornamento forzato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Forza TCP su DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Unità aggiornamento forzato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formato: IP o FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr "GNU Wget userà l'IP della rete data, cURL userà l'interfaccia fisica."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Impostazioni globali"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Concedere l'accesso a ddns procedures"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS non supportato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Indirizzo/FQDN da validare, se l'aggiornamento IP avviene o è necessario"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Sorgente indirizzo IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Versione indirizzo IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Indirizzo-IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Indirizzo IPv6 deve essere dato con le parentesi quadre"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 non è ancora (completamente) supportata da questo sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 non supportato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Indirizzo-IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Se i pacchetti Wget e cURL sono installati, Wget è usato per la "
+"comunicazione in modo predefinito."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Se questa sezione del servizio è disattivata non può essere avviata."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Se usi la comunicazione sicura dovresti verificare i certificati del server!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"In alcune versioni cURL/libcurl in OpenWrt è compilato senza supporto proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informazioni"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Inserisci uno script di aggiornamento OPPURE un URL di aggiornamento"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Installa il pacchetto 'ca-certificates' o i certificati necessari a mano "
+"nella directory di default /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Installa servizio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interfaccia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Intervallo per mandare un aggiornamento forzato al provider DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Unità dell'intervallo di controllo per il cambio di IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Unità dell'intervallo per l'invio forzato di aggiornamento al provider DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Ultimo Aggiornamento"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Visualizzatore Registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Directory registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Lunghezza registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Registra su file"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Registra su syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Indirizzo da consultare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nome"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per selezionare una rete da usare per "
+"comunicazione."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Nè GNU Wget con SSL nè cURL installati per supportare aggiornamenti sicuri "
+"via protocollo HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Né dall'interfaccia LuCI né dalla console."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Rete"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Rete su cui lo script di aggiornamento DDNS sara avviato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Mai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Nuovo Servizio DDns…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Prossimo Aggiornamento"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Nessun dato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Nessun certificato trovato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Nessun registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Ip non pubblici e bloccati di default"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Non in esecuzione"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Avviso"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Numero di ultime linee memorizzato nei file registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "OPZIONALE: Forza l'uso di puro IPv4/IPv6 solo comunicazione."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"OPZIONALE: Forza l'uso del TCP invece del UDP di default per richieste DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPZIONALE: Rete da usare per comunicazione"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPZIONALE: Server Proxy per rivelazioni e aggiornamenti."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"OPZIONALE: Usa Server DNS non di default per individuare 'IP Registrato'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"Se si verifica un errore lo script smetterà di funzionare dopo un "
+"determinato numero di tentativi."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Parametro Codificato Opzionale"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Parametro Opzionale"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+"Opzionale: Sostituisci [PARAMENC] nell'URL di aggiornamento (URL codificato)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+"Opzionale: Sostituisci [PARAMOPT] nell'URL di aggiornamento (URL NON "
+"codificato)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Server PROXY"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Password"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Percorso del certificato 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 ""
+"Per favore segui le istruzioni sulla homepage di OpenWrt per abilitare il "
+"supporto all'IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Per favore premi il pulsante [Leggi]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Leggi / Rileggi registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Cambiare davvero servizio?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "IP Registrato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Ricarica"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Aggiorna questo servizio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Sostituisci [DOMINIO] nell'URL di aggiornamento (URL codificato)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Sostituisci [PASSWORD] nell'URL di aggiornamento (URL codificato)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Sostituisci [USERNAME] nell'URL di aggiornamento (URL codificato)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Riavvia DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Unità nuovo tentativo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Esegui una volta"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "In esecuzione"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Script"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Seleziona un servizio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Il servizio non supporta questo tipo di IP"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Servizio non installato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Servizi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "URL download file dei servizi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Ultimo aggiornamento dell'elenco dei servizi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Impostando questo parametro a 0, lo script verrà eseguito solo una volta"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Avvia DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Stato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Stato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Stato cartella"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Ferma"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Arresta DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Arresta questo servizio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Fermato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Cambia servizio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "L'opzione di default '0' riproverà all'infinito."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "L'intervallo tra il quale avrà inizio ogni tentativo successivo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Questo nome per il servizio è già usato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Non c'è un servizio configurato."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+"Questo è il contenuto corrente del file di log in %h per questo servizio."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Questo è predefinito se avvii gli script DDNS da solo (p.e via cron con "
+"force_interval settato a '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Questo sarà settato automaticamente sulla interfaccia selezionata"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Impostazioni del Timer"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL da individuare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Sconosciuto"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Aggiorna l'elenco dei servizi DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "URL di aggiornamento usato per aggiornare il tuo Provider DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"URL per il download del file dei servizi. Per impostazione predefinita è il "
+"repository principale del pacchetto ddns di OpenWrt."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Usa HTTP Sicuro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Usa cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Script definito dall'utente per leggere l'indirizzo IP dei sistemi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nome utente"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Usare specifici Server DNS non supportato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Valori inferiori a 5 minuti == 300 secondi non sono supportati"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Valori inferiori al 'Check Interval' (Intervallo di Check) eccetto '0' non "
+"sono supportati"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Verifica"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Avviso"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Unità di tempo da utilizzare per i contatori dei tentativi."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Scrivi messaggi dettagliati sul registro. Il file sarà tagliato "
+"automaticamente."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Scrivi i messaggi registro al syslog. Gli Errori Critici saranno sempre "
+"scritti sul syslog."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' o "
+"'hostip', se hai bisogno di specificare un server DNS che identifichi il tuo "
+"IP registrato."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Dovresti installare il pacchetto 'bind-host' o 'knot-host' o 'drill' per le "
+"richieste DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'curl' o 'uclient-fetch' con il "
+"pacchetto 'libustream-*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Dovresti installare il pacchetto 'wget' o 'curl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Dovresti installare il pacchetto 'wget' o 'uclient-fetch' o sostituire "
+"libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL è installato, ma libcurl è compilato senza supporto proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL senza Supporto Proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "personalizzato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "giorni"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "directory o percorso/file"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "ore"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minuti"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "o"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "o aggiorna il tuo sistema all'ultima Release Openwrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "secondi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"per eseguire HTTPS senza la verifica dei certificati del server (insicuro)"
diff --git a/package/luci/applications/luci-app-ddns/po/ja/ddns.po b/package/luci/applications/luci-app-ddns/po/ja/ddns.po
new file mode 100644 (file)
index 0000000..235f35b
--- /dev/null
@@ -0,0 +1,945 @@
+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: 2024-03-28 23:40+0000\n"
+"Last-Translator: Ioroi Kouhei <kouhei@ioroi.org>\n"
+"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/ja/>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "セキュリティ上の理由でパスで「../」を使用できません。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "新規サービスを追加..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "詳細設定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "非パブリック IP を許可"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "基本設定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "ネットワークをバインド"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "特定のネットワークへのバインドはサポートされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"BusyBox の nslookup と wget は、DDNS プロバイダーとの通信に使用する IP のバー"
+"ジョン指定をサポートしていません!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"BusyBox の nslookup と hostip は、DNSサーバーをリクエストする際にデフォルト"
+"の UDP の代わりに TCP を使用する指定をサポートしていません!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"現在のコンパイル済バージョンの BusyBox の nslookup は、指定された DNS サー"
+"バーを正しく処理しません!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "CA 証明書パス"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"サービスデータをダウンロードするために使用される CA 証明書のパスです。証明書"
+"の検証をスキップするには IGNORE を設定します。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "キャンセル"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "チェック間隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "チェックの単位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "サービスのサポートをチェック中..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "設定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "構成エラー"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "サービスを作成"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "現在の設定 :"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr "DDNS プロバイダーの更新に使用されるカスタム更新スクリプトです。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "手動アップデート-URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "カスタム更新スクリプト"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS 自動開始が無効"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS 自動開始が有効"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS サービス・プロバイダー"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDNS サービス"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "TCP 経由の DNS リクエストはサポートされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS サーバー"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "日付形式"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "システムの IP アドレスを読み取る Web ページを定義します。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "システムの IP アドレス読み取り元のインターフェースを定義 :"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "システムの IP アドレス読み取り元のネットワークを定義 :"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"システムのIPアドレス読み取り元を定義します。それは、DDNS プロバイダーに送信さ"
+"れます"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "DDNS プロバイダーに送信される IP アドレス「IPv4/IPv6」を定義"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "実行中の各セクションのログファイルを含むディレクトリです。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"実行中の各セクションの PID とその他のステータス情報を含むディレクトリです。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "無効"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "ドメイン"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "ダイナミックDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "DDNS のバージョン"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "編集"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "DDNS プロバイダーとの安全な通信を有効にする"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "有効"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "エラー"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "最大エラー試行カウンタ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "エラー再試行間隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "イベント ネットワーク"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "IPv4 の例"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "IPv6 の例"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "ファイル"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "プロバイダーの Web ページにある使用方法に従ってください。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "サポートされているコードについては、こちらをご覧ください"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "IP バージョンの強制"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "IP バージョンの強制はサポートされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "強制の間隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "DNS で TCP を強制"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "強制の単位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "形式"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "形式: IP または FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+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 "全体設定"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "ddnsプロシージャへのアクセスを許可"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS はサポートされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr "IP 更新が発生した、または必要な場合に検証するホスト名または FQDN です"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP アドレス読み取り元"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP アドレスのバージョン"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4アドレス"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "IPv6 アドレスは角括弧内に記述される必要があります"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+"IPv6 は現在このシステムによってサポートされていないか、完全ではありません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 はサポートされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6アドレス"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"wget および cURL パッケージがインストールされている場合、通信にはデフォルト"
+"で wget が使用されます。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+"このサービスセクションが無効化されている場合、セクションは開始されることがで"
+"きません。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr "安全な通信を使用する場合は、サーバー証明書を検証する必要があります!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"一部のバージョンでは、OpenWrt の cURL/libcurl は、プロキシ・サポートなしでコ"
+"ンパイルされます。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "情報"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "情報"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "更新スクリプトを挿入または URL を更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"'ca-certificates' パッケージをインストールするか、必要な証明書をデフォルト"
+"の /etc/ssl/certs ディレクトリに手動で配置してください"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "サービスをインストール"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "インターフェース"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "DDNS プロバイダーに送信する強制アップデートの間隔です"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "変更された IP のチェック間隔の単位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr "DDNS プロバイダーに送信する強制アップデートの間隔の単位です"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "最終更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "ログファイル・ビューア"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "ログ・ディレクトリ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "ログの長さ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "ファイルへログを記録"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "syslog へログを記録"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "ルックアップするホスト名"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "名前"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL 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 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:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+"LuCI インターフェースから、またはコンソールからのどちらだとしてもです。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "ネットワーク"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "ddns-updater スクリプトが開始されるネットワーク"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "なし"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "新規 DDNS サービス…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "次の更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "データなし"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "証明書が見つかりません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "ログを記録しない"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "非パブリックかつデフォルトでブロックされる IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "実行されていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "注意"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "ログファイルに保存される行数です"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "オプション: IPv4/IPv6 に限定した純粋な通信の使用を強制します。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"オプション: DNS リクエストにおいて、デフォルトの UDP に代わって TCP の使用を"
+"強制します。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "オプション : 通信に使用するネットワーク"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "オプション: 検出とアップデートに使用するプロキシ サーバーです。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+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:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr "エンコードされたパラメーター(オプション)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "パラメーター(オプション)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+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:763
+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:928
+msgid "PROXY-Server"
+msgstr "プロキシ・サーバー"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "パスワード"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+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 ""
+"IPv6 サポートを有効にするには、OpenWrt のホームページの指示に従ってください"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "[読込] ボタンを押してください"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "ログファイルの読み込み/再読み込み"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "本当にサービスを切り替えますか?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "登録済み IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "リロード"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "このサービスをリロード"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "更新 URL 内の [DOMAIN] を置き換えます(URL エンコードされたもの)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "更新 URL 内の [PASSWORD] を置き換えます(URL エンコードされたもの)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "更新 URL 内の [USERNAME] を置き換えます(URL エンコードされたもの)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "DDNS を再起動"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "再試行の単位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "一度のみ実行"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "実行中"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "スクリプト"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "サービスを選択"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "サービスはこの IP タイプをサポートしていません"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "サービスがインストールされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "サービス"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "サービスダウンロード URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "サービスリスト最終更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr "このパラメーターを 0 に設定すると、一度のみ実行を強制します"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "DDNS を開始"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "状態"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "ステータス"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "ステータス ディレクトリ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "停止"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "DDNS を停止"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "このサービスを停止"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "停止済"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "サービスを切り替える"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "デフォルトのゼロを設定すると、無限に再試行します。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "指定された再試行回数後のスクリプトのエラーで実行を停止します"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "サービス名はすでに使用されています"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "構成済のサービスはありません。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "本サービスの%hでログファイルの現在の内容です。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"もしユーザー自身で DDNS スクリプトを実行する場合、これがデフォルトです(例: "
+"force_interval を '0' に設定して cron で)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "これは選択したインターフェースに自動設定されます"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "タイマー設定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "検出する URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "不明"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "DDNS サービスリストを更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+"DDNS プロバイダーをアップデートするために使用されるアップデート URL です。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"サービスファイルのダウンロードに使用される URL です。デフォルトでは OpenWrt "
+"の DDNS パッケージリポジトリ(master)です。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "HTTPS の使用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "cURL を使用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "システムの IP アドレスを読み取るユーザー定義スクリプト"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "ユーザー名"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "特定の DNS サーバーの使用はサポートされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "5分 (300秒) 未満の値はサポートされていません"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "チェック間隔より小さい値はサポートされていません(ゼロを除く)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "検証"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "警告"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"エラーの場合、スクリプトは指定された時間が経過すると失敗したアクションを再試"
+"行します"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"ログメッセージを syslog に書き込みます。 重大なエラーは常に syslog に書き込ま"
+"れます。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"登録済 IP を検出するため DNS サーバーを指定する必要がある場合は、bind-host、"
+"knot-host、drill または hostip パッケージをインストールする必要があります。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"DNS リクエストするには、bind-host、knot-host または drill パッケージをインス"
+"トールする必要があります。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+"wget、curl または uclient-fetch パッケージをインストールする必要があります。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"libustream-*ssl パッケージとともに wget、curl または uclient-fetch パッケージ"
+"をインストールする必要があります。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "wget または curl パッケージをインストールする必要があります。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"wget または uclient-fetch パッケージをインストールするか、または libcurl を置"
+"き換える必要があります。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"cURL はインストール済ですが、libcurl はプロキシ・サポートなしでコンパイルされ"
+"ています。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "プロキシ・サポートなしの cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "カスタム"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "日数"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "ディレクトリまたはパス/ファイル"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "時間"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "分"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "または"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "またはシステムを最新の OpenWrt リリースに更新します"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "秒"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "サーバー証明書の検証なしにHTTPSを実行する(安全ではありません)"
diff --git a/package/luci/applications/luci-app-ddns/po/ko/ddns.po b/package/luci/applications/luci-app-ddns/po/ko/ddns.po
new file mode 100644 (file)
index 0000000..0a91e63
--- /dev/null
@@ -0,0 +1,887 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-10-04 07:12+0000\n"
+"Last-Translator: Wonchul Kang <teshi85@gmail.com>\n"
+"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/ko/>\n"
+"Language: ko\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.1-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\"는 보안상의 이유로 경로에 사용될 수 없습니다."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "새로운 서비스 추가..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "고급 설정"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "비공인 IP 사용"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "기본 설정"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "CA 인증서 경로"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"서비스 데이터를 다운로드할 때 사용될 CA 인증서의 경로입니다. IGNORE로 설정하"
+"면 인증서 유효성 검증을 생략합니다."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "취소"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "확인 간격"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "설정"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "설정 오류"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "서비스 생성"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "현재 설정:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS 자동 실행 비활성화됨"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS 자동 실행 활성화됨"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS 서비스 제공자"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDNS 서비스"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "TCP를 통한 DNS 요청이 지원되지 않음"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS 서버"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "날짜 형식"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "비활성화"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "동적 DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "동적 DNS 버전"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "수정"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "활성화"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "에러"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "오류 재시도 간격"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "IPv4 예시"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "IPv6 예시"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "파일"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "공통 설정"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4 주소"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "정보"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "정보"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"'ca-certificates' 패키지를 설치하거나, /etc/ssl/certs 기본 디렉터리에 필요한 "
+"인증서를 직접 설치해주세요."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "서비스 설치"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "인터페이스"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "이름"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "네트워크"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "안함"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "패스워드"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "DDNS 재시작"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "실행 중"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "스크립트"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "서비스"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "DDNS 실행"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "상태"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "상태"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "DDNS 중지"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "중지됨"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "HTTPS 사용"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "cURL 사용"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "사용자명"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "특정 DNS 서버 사용이 지원되지 않습니다."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "경고"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL이 설치되었지만, libcurl이 프록시 지원 없이 컴파일되었습니다."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/lt/ddns.po b/package/luci/applications/luci-app-ddns/po/lt/ddns.po
new file mode 100644 (file)
index 0000000..3900a94
--- /dev/null
@@ -0,0 +1,982 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2024-06-28 14:57+0000\n"
+"Last-Translator: \"Džiugas Jan.\" <dziugas1959@hotmail.com>\n"
+"Language-Team: Lithuanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/lt/>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
+"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
+"1 : 2);\n"
+"X-Generator: Weblate 5.7-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "„../“ nėra leidžiamas kelias, dėl saugos priežasčių."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Pridėti naujas tarnybas..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Pažangūs nustatymai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Leisti neviešus IP adresus"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Paprasti nustatymai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Pririšti tinklą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Pririšimas prie specifinio tinklo yra nepalaikomas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"„BusyBox nslookup“ ir „Wget“ nepalaiko, kad specifikuotu IP versiją, kurią "
+"naudosite komunikacijos ryšiui su „DDNS“ teikėju!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"„BusyBox nslookup“ ir „hostip“ nepalaiko, kad specifikuotu naudoti „TCP“ "
+"vietoj numatytojo „UDP“, kai prašoma „DNS“ serverio!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"„BusyBox nslookup“, kuris yra randamas dabartinėj kompiliuotoj versijoj, "
+"netvarko duotus „DNS“ serverius tinkamai!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "„CA“ sertifikatų kelias"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"„CA“ sertifikatų kelias bus naudojamas atsisiųsti tarnybos duomenis. "
+"Nustatyti į „IGNORUOTI“, norint praleisti sertifikatų patikrą."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Atšaukti"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Patikrinimo intervalas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Patikrinti vienetą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Tikrinamas tarnybos palaikymas..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Konfigūravimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Konfigūracijos klaida"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Sukurti tarnybą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Dabartinis nustatymas:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Šiuo metu, „DDNS“ naujinimai yra nepaleidžiami įkrovos metu arba sąsajos/"
+"sietuvo įvykiuose."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Pasirinktinis naujinimo skriptas, naudojamas Jūsų „DDNS“ teikėjui atnaujinti."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Pasirinktinis atnaujinimo „URL“ – saitas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Pasirinktinis atnaujinimo skriptas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "„DDNS“ automatinis paleidimas išjungtas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "„DDNS“ automatinis paleidimas įjungtas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "„DDNS“ tarnybos teikėjas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "„DDns“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "„DDns“ tarnyba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "„DNS“ prašymai per „TCP“ yra nepalaikomi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "„DNS“ serveris"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Datos formatas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+"Apibrėžia tinklalapį/svetainę, iš kurio reikia skaityti sistemos IP adresą."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Apibrėžia sąsają/sietuvą, iš kurios skaitomas sistemų IP adresas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Apibrėžia tinklą, iš kurio reikia skaityti sistemos IP adresą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Apibrėžia šaltinį, iš kurio reikia skaityti sistemos IP adresą, kuris bus "
+"siunčiamas – „DDNS“ teikėjui"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+"Apibrėžia, kuris IP adresas (IPv4/IPv6) yra siunčiamas – „DDNS“ teikėjui"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Katalogas/Vietovė laiko kiekvieno veikiančio skyriaus žurnalo failus."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Katalogas/Vietovė laiko kiekvieno veikiančio skyriaus – „PID“ ir kitų būklių/"
+"būsenų informaciją."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Išjungta/Neįgalinta (-as/-i)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domenas-Sritis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dinaminis „DNS“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Dinaminio „DNS“ versija"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Redaguoti"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Įjungti/Įgalinti saugią komunikacijos ryšį su „DDNS“ teikėju"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Įjungta/Įgalinta (-as/-i)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Klaida"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Maksimalus klaidos pa(si)kartojimo/bandymų iš naujo skaitiklis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Klaidos pakartojimo/bandymo iš naujo intervalas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Įvykio tinklas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "IPv4 pavyzdys"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "IPv6 pavyzdys"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Failas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Sekite instrukcijas, kurias Jūs rasite jų tinklalapyje/svetainėje."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Dėl palaikomų kodų, žiūrėkite čia:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Priversti IP versiją"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "„Priversti IP versiją“ – yra nepalaikomas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Priversti intervalą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Priversti „TCP“ ant „DNS“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Priversti vienetą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formatas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formatas: IP arba „FQDN“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"„GNU Wget“ naudos nurodyto tinklo IP, kol „cURL“ naudos fizinę sąsają ir/"
+"arba sietuvą."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Pagrindiniai/Vieši nustatymai"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Duoti prieigą prie „DDNS“ procedūrų"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "„HTTPS“ yra nepalaikomas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Įrenginio skleidėjo/p.k – vedėjo pavadinimas/„FQDN“, kurį reikia "
+"patvirtinti, jei IP atnaujinimas įvyko arba buvo būtinas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP adreso šaltinis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP adreso versija"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-Adresas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+"IPv6 adresas turi būti nurodytas laužtiniuose skliaustuose – „[“ ir „]“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 dabartiniu metu, nepalaikoma (pilnai) šioje sistemoje"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 yra nepalaikomas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-Adresas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Jei „Wget“ ir „cURL“ paketai yra įdiegti, tada „Wget“ bus naudojamas "
+"komunikacijos ryšiui, pagal numatytuosius nustatymus."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+"Jei šios tarnybos skyrius yra išjungtas/neįgalintas, tada jo nebus galima "
+"paleisti."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Jei naudojate saugųjį komunikacijos ryšį, tada Jūs turėtumėte patvirtinti/"
+"patikrinti serverio sertifikatus!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"Kai kuriose versijose – „cURL/libcurl“, randamos „OpenWrt“, yra "
+"kompiliuojama be įgalioto/-jo palaikymo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Informacija"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informacija"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Įterpkite naujinimo skriptą ARBA atnaujinimo „URL“ – saitą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Įdi̇́egti „ca-certificates“ paketą arba reikiamus sertifikatus ranka į "
+"numatytąjį/-ą katalogą/vietovę – „/etc/ssl/certs“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Įdiegti tarnybą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Sąsaja ir/arba Sietuvas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Intervalas, per kurį priverstinai siųsti naujinimus „DDNS“ teikėjui"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Intervalo vienetas, norint patikrinti dėl pakeisto IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Intervalo vienetas, skirtas priverstiniams naujinimams siųsti – „DDNS“ "
+"teikėjui."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Paskutinis atnaujinimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Žurnalo failo žiūrovas/-ė"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Žurnalo katalogas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Žurnalo ilgis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Žurnalinti į failą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Žurnalinti į „syslog“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "„Lookup“ įrenginio skleidėjo/p.k – vedėjo pavadinimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Vardas/Pavadinimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Nei „GNU Wget“ su „SSL“, nei „cURL“ yra įdiegti̇̀, kad būtų pasirenkamas "
+"tinklas ryšio komunikacijai."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Nei GNU „Wget“ su „SSL“, nei „cURL“ yra įdiegti̇̀, kad būtų palaikomi saugūs "
+"naujinimai per „HTTPS“ protokolą."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Nei iš „LuCI“ sąsajos/sietuvo, nei iš konsolės."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Tinklas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Tinklas, kuriame „ddns-updater“ skriptai bus vykdomi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Niekada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Nauja „DDns“ tarnyba…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Kitas atnaujinimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Nėra duomenų"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Jokių sertifikatų nerasta"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Jokio žurnalinimo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Nevieši ir pagal numatytuosius nustatymus užblokuoti IP (dgs.)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Neveikia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Pranešimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Paskutinių eilučių, saugomų žurnalo failuose, skaičius"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+"PASIRENKAMA: Priverstinai naudoti tik „grynus“ IPv4/IPv6 komunikacijos "
+"ryšius."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"PASIRENKAMA: Priverstinai naudoti „TCP“ vietoj numatytojo „UDP“, „DNS“ "
+"užklausoms."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "PASIRENKAMA: Tinklas, naudojamas ryšio komunikacijai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "PASIRENKAMA: Įgaliotinis/-as serveris, aptikimui/-ams ir naujinimams."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"PASIRENKAMA: Naudoti nenumatytąjį „DNS“ serverį, kad aptiktumėte – "
+"„Registruotą IP“."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr "Įvykus klaidai, skriptas nustos vykdyti po nurodyto skaičiaus bandymų."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Pasirinktinis užkoduotas parametras"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Pasirinktinis parametras"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+"Pasirenkama: Pakeičia „[PARAMENC]“, kuris yra randamas atnaujinimo „URL“ – "
+"saite („URL“ – saito užkoduotas)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+"Pasirenkama: Pakeičia „[PARAMOPT]“, kuris yra randamas atnaujinimo „URL“ – "
+"saite (NE „URL“ – saito užkoduotas)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "ĮGALIOTAS-Serveris"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Slaptažodis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Kelias į „CA-Sertifikatas“"
+
+#: 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 ""
+"Prašome sekti instrukcijas telkiantis į „OpenWrt“ puslapį apie IPv6 "
+"palaikymo įgalinimą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Prašome paspausti [Skaityta] mygtuką"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Skaityti / Iš naujo perskaityti žurnalo failą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Ar tikrai pakeisti tarnybą?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Registruotas IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Perleidimas/-sti"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Perleisti šią tarnybą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+"Pakeičia – „[DOMAIN]“, kuris yra randamas „URL“ – saite („URL“ – saito "
+"užkoduotas)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+"Pakeičia „[PASSWORD]“, kuris yra randamas „URL“ – saite („URL“ – saito "
+"užkoduotas)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+"Pakeičia „[USERNAME]“, kuris yra randamas „URL“ – saite („URL“ – saito "
+"užkoduotas)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Paleisti iš naujo „DDns“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Pakartojimo/Bandymo iš naujo vienetas/-ai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Paleisti tik kartą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Veikia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Skriptas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Pasirinkti tarnybą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Tarnyba nepalaiko šio IP tipo"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Tarnyba yra neįdiegta"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Tarnybos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Tarnybų „URL“ – saito atsisiuntimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Paskutinis tarnybų sąrašo atnaujinimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Nustačius šį parametrą į – 0-į, skriptas bus priverstinai paleistas tik "
+"vieną kartą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Paleisti „DDNS“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Būklė"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Būklė/Būsena"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Būklės/Būsenos katalogas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Stop"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Stabdyti „DDNS“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Stabdyti šią tarnybą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Sustabdytas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Pakeisti tarnybą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+"Numatytasis nustatymas yra – „0-is“, kuris be galo bandys pa(si)kartoti/"
+"bandyti iš naujo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+"Intervalas, tarp kurio prasideda kiekvienas nuoseklus pa(si)kartojimas/"
+"bandymas iš naujo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Tarnybos pavadinimas jau yra naudojamas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Nėra jokios tarnybos sukonfigūruotos."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Tai yra dabartinis šios tarnybos žurnalo failo turinys, randamas – %h."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Tai yra numatytasis nustatymas, jei Jūs vykdote „DDNS“ skriptus patys (t.y. "
+"per „cron“, su „force_interval“ nustatytu į – „0-į“)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+"Šis bus automatiškai nustatytą/-as į parinktą/pasirinktą sąsają ir/arba "
+"sietuvą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Laikmačio nustatymai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "„URL“ – Saitas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "„URL“ – Saitą, kurį aptikti"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Nežinoma/-s/-i"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Atnaujinti „DDns“ tarnybų sąrašą"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+"Atnaujinti „URL“ – saitą, kuris bus naudojamas atnaujinimams; Jūsų „DDNS“ "
+"teikėjui."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"„URL“– saitas, kuris yra naudojamas atsisiųsti tarnybų failus. Pagal "
+"numatytuosius nustatymus – tai yra „master openwrt ddns“ paketo saugyklą."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Naudoti „saugų HTTP“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Naudoti „cURL“"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+"Naudotojo/Vartotojo nustatytas skriptas, skirtas skaityti sistemų IP adresus"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Slapyvardis/Vartotojo vardas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Naudojant specifinį „DNS“ serverį yra nepalaikoma"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+"Reikšmės, mažesnės nei 5-ios minutės == 300-ai sekundžių, yra nepalaikomos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Reikšmės, mažesnės nei „Patikrinimo intervalas“, išskyrus – „0-is“, yra "
+"nepalaikomos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Patvirtinti/Patikrinti"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Įspėjimas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"Kokius laiko vienetus naudoti, pa(si)kartojimo/bandymo iš naujo skaitikliui."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Rašo išsamius pranešimus į žurnalo failą. Failas bus automatiškai "
+"patrumpintas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Rašo žurnalo pranešimus į – „syslog“. Kritinės klaidos visada bus rašomos į "
+"– „syslog“."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Turėtumėte įdi̇́egti – „bind-host“ arba „knot-host“, arba „drill“, arba "
+"„hostip“ paketą, jei Jums reikia nurodyti „DNS“ serverį, kad aptiktų Jūsų "
+"registruotą IP."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Turėtumėte įdi̇́egti – „bind-host“ arba „knot-host“, arba „drill“ paketą, "
+"„DNS“ užklausoms."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+"Jūs turėtumėte įdiegti „wget“ arba „curl“, arba net „uclient-fetch“ paketą."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Jūs turėtumėte įdiegti „wget“ arba „curl“, arba net „uclient-fetch“ su "
+"„libustream-*ssl“ paketą/-us."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Jūs turėtumėte įdiegti „wget“ arba „curl“ paketą."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Jūs turėtumėte įdiegti „wget“ arba „uclient-fetch“ paketą, galite ir "
+"pakeisti „libcurl“."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"„cURL“ yra įdiegtas, bet „libcurl“ buvo kompiliuotas be įgaliotinio "
+"palaikymo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "„cURL“ be įgaliotojo palaikymo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "pasirinktinis"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "dienos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "katalogas arba vietovės kelias/failas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "valandos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minutės"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "arba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+"arba atnaujinkite savo sistemą į naujausią/paskausią „OpenWrt“ leidinį/"
+"versiją"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "sekundės"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"kad paleistumėte „HTTPS“ nepatikrintus/nepatvirtintus serverio sertifikatus "
+"(nesaugu)"
diff --git a/package/luci/applications/luci-app-ddns/po/mr/ddns.po b/package/luci/applications/luci-app-ddns/po/mr/ddns.po
new file mode 100644 (file)
index 0000000..c9734b9
--- /dev/null
@@ -0,0 +1,883 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2020-02-07 09:18+0000\n"
+"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
+"Language-Team: Marathi <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/mr/>\n"
+"Language: mr\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 3.11-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "प्रगत सेटिंग्ज"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "रद्द करा"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "कॉन्फिगरेशन"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "अक्षम"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "सक्षम केले"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "इंटरफेस"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "नाव"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "संकेतशब्द"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "रीलोड करा"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "चालू आहे"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "सेवा"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "स्थिती"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "स्थिती"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "थांबा"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "बंद"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "अज्ञात"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "वापरकर्तानाव"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/ms/ddns.po b/package/luci/applications/luci-app-ddns/po/ms/ddns.po
new file mode 100644 (file)
index 0000000..56459e8
--- /dev/null
@@ -0,0 +1,883 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-22 09:21+0000\n"
+"Last-Translator: Abdul Muizz Bin Abdul Jalil <abmuizz@gmail.com>\n"
+"Language-Team: Malay <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/ms/>\n"
+"Language: ms\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.4-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Tetapan Lanjutan"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Konfigurasi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Dibolehkan"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Antara muka"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Perkhidmatan"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minit"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/nb_NO/ddns.po b/package/luci/applications/luci-app-ddns/po/nb_NO/ddns.po
new file mode 100644 (file)
index 0000000..42f1ebd
--- /dev/null
@@ -0,0 +1,886 @@
+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: 2024-01-03 18:37+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/nb_NO/>\n"
+"Language: nb_NO\n"
+"MIME-Version: 1.0\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.4-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Legg til nye tjenester …"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Avanserte innstillinger"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Oppsett"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Opprett tjeneste"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Nåværende innstilling:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Egendefinert oppdaterings-URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Avskrudd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domene"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dynamisk DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Rediger"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Påskrudd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Feil"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Fil"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-adresse"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 støttes ikke"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-adresse"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Grensesnitt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Utfør oppslag av vertsnavn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Navn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Nettverk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Aldri"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Ingen data"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Ingen loggføring"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Kjører ikke"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Passord"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Last inn igjen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Kjører"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Tjenester"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Tilstand"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Stopp"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Stoppet"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Ukjent"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Brukernavn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Advarsel"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "timer"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/nl/ddns.po b/package/luci/applications/luci-app-ddns/po/nl/ddns.po
new file mode 100644 (file)
index 0000000..d289f4b
--- /dev/null
@@ -0,0 +1,953 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-05-04 21:08+0000\n"
+"Last-Translator: xtz1983 <xtz1983@gmail.com>\n"
+"Language-Team: Dutch <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/nl/>\n"
+"Language: nl\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 4.18-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" is om veiligheidsredenen niet toegestaan in het pad."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Nieuwe diensten toevoegen..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Geavanceerde instellingen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Niet-openbare IP's toestaan"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Basisinstellingen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Bind netwerk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Binding aan een specifiek netwerk wordt niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"De nslookup en Wget van BusyBox bieden geen ondersteuning voor het "
+"specificeren van de IP-versie die moet worden gebruikt voor communicatie met "
+"de DDNS-provider!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"De nslookup en hostip van BusyBox ondersteunen niet om te specificeren om "
+"TCP te gebruiken in plaats van standaard UDP bij het aanvragen van een DNS-"
+"server!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"De nslookup van BusyBox in de huidige gecompileerde versie kan bepaalde DNS-"
+"servers niet correct verwerken!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Ca Certs pad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Ca Certs-pad dat wordt gebruikt om servicegegevens te downloaden. Stel "
+"NEGEREN in om certificaatvalidatie over te slaan."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Annuleren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Interval controleren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Controleer eenheid"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "De serviceondersteuning controleren..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configuratie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Configuratiefout"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Service maken"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Huidige instelling:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Momenteel worden DDNS-updates niet gestart bij het opstarten of bij "
+"interfacegebeurtenissen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Aangepast updatescript om te gebruiken voor het updaten van uw DDNS-provider."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Aangepaste update-URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Aangepast update-script"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS Autostart uitgeschakeld"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS Autostart ingeschakeld"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS-serviceprovider"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDns-service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "DNS-verzoeken via TCP worden niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS-server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Datum formaat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+"Definieert de webpagina waarvan het IP-adres van het systeem moet worden "
+"gelezen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+"Definieert de interface waaruit het IP-adres van het systeem moet worden "
+"gelezen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+"Definieert het netwerk waaruit het IP-adres van het systeem moet worden "
+"gelezen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Definieert de bron waaruit het IP-adres van het systeem moet worden gelezen, "
+"dat naar de DDNS-provider wordt verzonden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+"Definieert welk IP-adres 'IPv4/IPv6' wordt verzonden naar de DDNS-provider"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Directory bevat logboekbestanden voor elke actieve sectie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Directory bevat PID en andere statusinformatie voor elke actieve sectie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Uitgeschakeld"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domein"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dynamische DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Dynamische DNS-versie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Bewerk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Beveiligde communicatie met DDNS-provider inschakelen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Ingeschakeld"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Fout"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Fout opnieuw proberen interval"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Evenementennetwerk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Voorbeeld voor IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Voorbeeld voor IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Bestand"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Volg de instructies die u op hun WEB-pagina vindt."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Kijk hier voor ondersteunde codes"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Forceer IP-versie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Forceer IP-versie niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Forceer interval"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Forceer TCP op DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Kracht eenheid"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formaat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formaat: IP of FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget gebruikt het IP-adres van een bepaald netwerk, cURL gebruikt de "
+"fysieke interface."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Algemene instellingen"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Toegang verlenen tot ddns-procedures"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS wordt niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr "Hostnaam/FQDN om te valideren, als IP-update plaatsvindt of nodig is"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP-adres bron"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP-adres versie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-adres"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Het IPv6-adres moet tussen vierkante haken worden vermeld"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 wordt momenteel niet (volledig) ondersteund door dit systeem"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 wordt niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-adres"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Als Wget en cURL-pakket zijn geïnstalleerd, wordt Wget standaard gebruikt "
+"voor communicatie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Als dit servicegedeelte is uitgeschakeld, kan het niet worden gestart."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Als u beveiligde communicatie gebruikt, moet u de servercertificaten "
+"verifiëren!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"In sommige versies wordt cURL/libcurl in OpenWrt gecompileerd zonder proxy-"
+"ondersteuning."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informatie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Voeg een updatescript OF een update-URL in"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Installeer het 'ca-certificates'-pakket of benodigde certificaten handmatig "
+"in de standaardmap /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Service installeren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Interval om geforceerde updates naar DDNS Provider te sturen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Intervaleenheid om te controleren op gewijzigd IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr "Intervaleenheid om updates naar de DDNS-provider te forceren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Laatste update"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Logbestandviewer"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Logbestand"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Lengte van het logboek"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Log naar bestand"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Log naar syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Hostnaam opzoeken"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Naam"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Noch GNU Wget met SSL noch cURL geïnstalleerd om een netwerk te selecteren "
+"om te gebruiken voor communicatie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Noch GNU Wget met SSL, noch cURL geïnstalleerd om veilige updates via HTTPS-"
+"protocol te ondersteunen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Noch van de LuCI-interface, noch van de console."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Netwerk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Netwerk waarop de ddns-updater-scripts worden gestart"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Nooit"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Nieuwe DDns-service…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Volgende update"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Geen gegevens"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Geen certificaten gevonden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Geen logboekregistratie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Niet-openbare en standaard geblokkeerde IP's"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Loopt niet"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Kennisgeving"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Aantal laatste regels opgeslagen in logbestanden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "OPTIONEEL: Forceer het gebruik van pure IPv4/IPv6-communicatie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"OPTIONEEL: Forceer het gebruik van TCP in plaats van standaard UDP op DNS-"
+"aanvragen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPTIONEEL: Netwerk te gebruiken voor communicatie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPTIONEEL: Proxy-Server voor detectie en updates."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"OPTIONEEL: Gebruik niet-standaard DNS-server om 'Geregistreerd IP' te "
+"detecteren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"Bij een fout stopt het script de uitvoering na het opgegeven aantal pogingen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Optionele gecodeerde parameter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Optionele parameter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Optioneel: Vervangt [PARAMENC] in Update-URL (URL-gecodeerd)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Optioneel: Vervangt [PARAMOPT] in Update-URL (NIET URL-gecodeerd)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "PROXY-Server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Wachtwoord"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Pad naar CA-certificaat"
+
+#: 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 ""
+"Volg de instructies op de startpagina van OpenWrt om IPv6-ondersteuning in "
+"te schakelen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Druk op de knop [Lezen]."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Logbestand lezen/herlezen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Echt switch service?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Geregistreerd IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Herladen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Laad deze service opnieuw"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Vervangt [DOMAIN] in Update-URL (URL-gecodeerd)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Vervangt [PASSWORD] in Update-URL (URL-gecodeerd)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Vervangt [USERNAME] in Update-URL (URL-gecodeerd)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "DDns opnieuw starten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Eenheid opnieuw proberen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Eén keer uitvoeren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Lopend"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Script"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Selecteer een service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Service ondersteunt dit IP-type niet"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Service niet geïnstalleerd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Diensten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Services-URL downloaden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Services lijst laatste update"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Als u deze parameter instelt op 0, wordt het script gedwongen om slechts één "
+"keer te worden uitgevoerd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "DDNS starten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Staat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Statusmap"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Stop"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Stop DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Stop deze service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Gestopt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Switch service"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "De standaardinstelling van '0' zal oneindig opnieuw proberen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "Het interval tussen elke succesvolle nieuwe poging."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "De servicenaam wordt al gebruikt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Er is geen service geconfigureerd."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Dit is de huidige inhoud van het logbestand in %h voor deze service."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Dit is de standaard als u DDNS-scripts zelf uitvoert (d.w.z. via cron met "
+"force_interval ingesteld op '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Dit wordt automatisch ingesteld op de geselecteerde interface"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Timer-instellingen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL om te detecteren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Onbekend"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Update de lijst met DDns-services"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+"Update-URL die moet worden gebruikt voor het updaten van uw DDNS-provider."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"URL gebruikt om servicesbestand te downloaden. Standaard is de master "
+"openwrt ddns-pakketrepo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Gebruik HTTP-beveiligd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Gebruik cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+"Door de gebruiker gedefinieerd script om het IP-adres van het systeem te "
+"lezen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Gebruikersnaam"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Het gebruik van een specifieke DNS-server wordt niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Waarden onder 5 minuten == 300 seconden worden niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Lagere waarden dan 'Check Interval' behalve '0' worden niet ondersteund"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Verifiëren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Waarschuwing"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"Welke tijdseenheden moeten worden gebruikt voor tellers voor nieuwe pogingen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Schrijft gedetailleerde berichten naar logbestand. Bestand wordt automatisch "
+"afgekapt."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Schrijft logboekberichten naar syslog. Kritieke fouten worden altijd naar "
+"syslog geschreven."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"U moet het pakket 'bind-host' of 'knot-host' of 'drill' of 'hostip' "
+"installeren, als u een DNS-server moet opgeven om uw geregistreerde IP te "
+"detecteren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"U moet het pakket 'bind-host' of 'knot-host' of 'drill' installeren voor DNS-"
+"verzoeken."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "U moet het pakket 'wget' of 'curl' of 'uclient-fetch' installeren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"U moet 'wget' of 'curl' of 'uclient-fetch' installeren met het pakket "
+"'libustream-*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "U moet het 'wget'- of 'curl'-pakket installeren."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"U moet het pakket 'wget' of 'uclient-fetch' installeren of libcurl vervangen."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"cURL is geïnstalleerd, maar libcurl is gecompileerd zonder proxy-"
+"ondersteuning."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL zonder proxy-ondersteuning"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "aangepast"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "dagen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "map of pad/bestand"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "uren"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minuten"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "of"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "of werk uw systeem bij naar de nieuwste OpenWrt-release"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "seconden"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"om HTTPS uit te voeren zonder verificatie van servercertificaten (onveilig)"
diff --git a/package/luci/applications/luci-app-ddns/po/pl/ddns.po b/package/luci/applications/luci-app-ddns/po/pl/ddns.po
new file mode 100644 (file)
index 0000000..ca2bab7
--- /dev/null
@@ -0,0 +1,946 @@
+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: 2024-06-10 11:09+0000\n"
+"Last-Translator: Piotr Kołtun <pkoltungm@gmail.com>\n"
+"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/pl/>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.6-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "„../” jest niedozwolone ze względów bezpieczeństwa."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Dodaj nowe usługi..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Ustawienia zaawansowane"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Zezwalaj na niepubliczne IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Ustawienia podstawowe"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Powiąż sieć"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Powiązanie z określoną siecią nie jest obsługiwane"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"nslookup i Wget BusyBox nie obsługują określenia wersji IP, która ma być "
+"używana do komunikacji z dostawcą DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"nslookup i hostip BusyBox nie obsługują określenia, czy używać TCP zamiast "
+"domyślnego UDP podczas żądania serwera DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"Nslookup BusyBox w bieżącej skompilowanej wersji nie obsługuje poprawnie "
+"podanych serwerów DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Ścieżka certyfikatów CA"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Ścieżka certyfikatów CA, która będzie używana do pobierania danych usług. "
+"Ustaw IGNORE, aby pominąć weryfikację certyfikatu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Anuluj"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Interwał sprawdzania"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Jednostka sprawdzania"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Sprawdzanie obsługi usługi..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Konfiguracja"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Błąd konfiguracji"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Utwórz usługę"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Ustawienie bieżące:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Obecnie aktualizacje DDNS nie są uruchamiane przy starcie lub przy "
+"zdarzeniach w interfejsie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Własny skrypt aktualizacji, który ma być używany do aktualizacji dostawcy "
+"DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Własny adres URL aktualizacji"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Własny skrypt aktualizacji"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Autostart DDNS wyłączony"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Autostart DDNS włączony"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Dostawca usług DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Usługa DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Żądania DNS przez TCP nie są obsługiwane"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Serwer DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Format daty"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+"Określa witrynę internetową, z której odczytywany jest systemowy adres IP."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Określa interfejs, z którego odczytywany jest systemowy adres IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Określa sieć, z której odczytywany jest systemowy adres IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Określa źródło, z którego odczytywany jest systemowy adres IP, który "
+"zostanie wysłany do dostawcy DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Określa, który adres 'IPv4/IPv6' jest wysyłany do dostawcy DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Katalog zawiera pliki dziennika dla każdej działającej sekcji."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Katalog zawiera PID i inne informacje o statusie każdej działającej sekcji."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Wyłączone"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domena"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dynamiczny DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Wersja DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Edytuj"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Włączenie zabezpieczonej komunikacji z dostawcą DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Włączone"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Błąd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Licznik maksimum błędów powtórzeń"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Interwał błędów powtórzeń"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Zdarzenia sieciowe"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Przykład dla IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Przykład dla IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Plik"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Postępuj zgodnie z instrukcjami, które znajdziesz na stronie WEB."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Obsługiwane kody znajdują się tutaj"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Wymuś wersję IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Wymuś nieobsługiwaną wersję IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Interwał wymuszania"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Wymuś TCP w DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Jednostka wymuszania"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Format"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Format: IP lub FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget użyje adresu IP danej sieci, cURL użyje fizycznego interfejsu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Ustawienia globalne"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Udziel dostępu do procedur DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "Protokół HTTPS nie jest obsługiwany"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Nazwa hosta/FQDN do sprawdzenia, czy aktualizacja IP ma miejsce lub jest "
+"konieczna"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Źródło adresu IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Wersja adresu IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Adres IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Adres IPv6 musi być podany w nawiasach kwadratowych"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 nie jest obecnie (w pełni) obsługiwany przez ten system"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 nie jest obsługiwany"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Adres IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Jeśli pakiety Wget i cURL są zainstalowane, Wget jest domyślnie używany do "
+"komunikacji."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Jeśli ta sekcja usługi jest wyłączona, nie można jej uruchomić."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Jeśli korzystasz z bezpiecznej komunikacji, należy zweryfikować certyfikaty "
+"serwera!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"W niektórych wersjach cURL/libcurl w OpenWrt jest kompilowany bez obsługi "
+"proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Informacja"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informacje"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Wstaw skrypt aktualizacji OR lub URL aktualizacji"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Zainstaluj pakiet 'ca-certificates' lub potrzebne certyfikaty ręcznie w "
+"domyślnym katalogu /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Zainstaluj usługę"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interfejs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Częstotliwość wymuszania wysyłania aktualizacji do dostawcy DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Jednostka interwału sprawdzająca zmianę IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Jednostka interwału wymuszająca przesyłanie aktualizacji do dostawcy DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Ostatnia aktualizacja"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Przeglądarka plików dziennika"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Katalog dzienników"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Długość dziennika"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Rejestrowanie do pliku"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Rejestrowanie do dziennika systemowego"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Nazwa hosta wyszukiwania"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nazwa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Ani GNU Wget z SSL, ani cURL nie są zainstalowane, aby wybrać sieć, która "
+"będzie używana do komunikacji."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Ani GNU Wget z SSL, ani cURL nie są zainstalowane w celu obsługi "
+"bezpiecznych aktualizacji poprzez protokół HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Ani z interfejsu LuCI, ani z konsoli."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Sieć"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Sieć, w której uruchomione zostaną skrypty ddns-updater"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Nigdy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Nowa usługa DDNS…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Następna aktualizacja"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Brak danych"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Nie znaleziono certyfikatów"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Brak rejestrowania"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Niepubliczne i domyślnie zablokowane IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Nie działa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Spostrzeżenie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Liczba ostatnich wierszy przechowywanych w plikach dziennika"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "OPCJONALNIE: Wymuś użycie komunikacji opartej wyłącznie na IPv4/IPv6."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr "OPCJONALNIE: Wymuś użycie TCP zamiast domyślnego UDP na żądanie DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPCJONALNIE: Sieć używana do komunikacji"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPCJONALNIE: Serwer proxy do wykrywania i aktualizacji."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"OPCJONALNIE: Użyj serwera DNS innego niż domyślny, aby wykryć "
+"„Zarejestrowany adres IP”."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"W przypadku błędu skrypt zatrzyma wykonywanie po określonej liczbie "
+"ponownych prób."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Opcjonalny zakodowany parametr"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Opcjonalny parametr"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Opcjonalnie: Zastępuje [PARAMENC] w Update-URL (zakodowany URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Opcjonalnie: Zastępuje [PARAMENC] w Update-URL (niezakodowany URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Serwer PROXY"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Hasło"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Ścieżka do certyfikatu 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 ""
+"Postępuj zgodnie z instrukcjami na stronie głównej OpenWrt, aby włączyć "
+"obsługę IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Proszę nacisnąć przycisk [Czytaj]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Wczytaj / Ponownie wczytaj plik dziennika"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Naprawdę zmienić usługę?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Zarejestrowany IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Przeładuj"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Przeładuj usługę"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Zastąp [DOMAIN] w Update-URL (zakodowany URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Zastąp [PASSWORD] w Update-URL (zakodowany URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Zastąp [USERNAME] w Update-URL (zakodowany URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Restartuj DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Jednostka powtarzania"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Uruchom raz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Działa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Skrypt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Wybierz usługę"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Usługa nie obsługuje tego typu adresu IP"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Usługa nie została zainstalowana"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Usługi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Adres URL pobierania usług"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Ostatnia aktualizacja listy usług"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr "Ustawienie tego parametru na 0 wymusi uruchomienie skryptu tylko raz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Uruchom DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Województwo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Status katalogu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Zatrzymaj"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Zatrzymaj DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Zatrzymaj tę usługę"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Zatrzymane"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Przełącz usługę"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Domyślne ustawienie „0” będzie ponowić próbę nieskończoności."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+"W przypadku błędu skrypt przestanie działać po określonej liczbie prób."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Nazwa usługi jest już używana"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Nie ma skonfigurowanej usługi."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Jest to bieżąca zawartość pliku dziennika w %h dla tej usługi."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"To jest ustawienie domyślne, jeśli uruchamiasz skrypty DDNS samodzielnie "
+"(tj. za pomocą crona z force_interval ustawionym na „0”)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Zostanie automatycznie ustawiony na wybrany interfejs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Ustawienia zegara"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "Adres URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL do wykrycia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Nieznany"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Zaktualizuj listę usług DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "Adres URL użyty do aktualizacji u dostawcy DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"Adres URL używany do pobierania pliku usług. Domyślnie jest to główne "
+"repozytorium OpenWrt z pakietami DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Użyj bezpiecznego HTTP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Użyj cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Skrypt zdefiniowany przez użytkownika do odczytu adresu IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nazwa użytkownika"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Używanie określonego serwera DNS nie jest obsługiwane"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Wartości poniżej 5 minut == 300 sekund nie są obsługiwane"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "Niższe wartości „Interwał sprawdzania” oprócz „0” nie są obsługiwane"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Zweryfikuj"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Ostrzeżenie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"W przypadku błędu skrypt ponownie spróbuje wykonać nieudaną akcję po "
+"określonym czasie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Zapisuje szczegółowe komunikaty do pliku dziennika. Plik zostanie obcięty "
+"automatycznie."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Zapisuje komunikaty dziennika w dzienniku systemowym. Błędy krytyczne będą "
+"zawsze zapisywane w dzienniku systemowym."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Należy zainstalować pakiet „bind-host” lub „knot-host”, lub „drill”, lub "
+"„hostip”, jeśli musisz określić serwer DNS w celu wykrycia zarejestrowanego "
+"adresu IP."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Należy zainstalować pakiet „bind-host” lub „knot-host”, lub „drill”, dla "
+"żądań DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Należy zainstalować pakiet „wget” lub „curl”, lub „uclient-fetch”."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Należy zainstalować pakiet „wget” lub „curl”, lub „uclient-fetch”, z "
+"pakietem „libustream-*ssl”."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Należy zainstalować pakiet „wget” lub „curl”."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Należy zainstalować pakiet „wget” lub „uclient-fetch”, lub zastąpić libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"cURL jest zainstalowany, ale libcurl został skompilowany bez obsługi proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL bez obsługi proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "własny"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "dni"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "katalog lub ścieżka/plik"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "godzin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minuty"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "lub"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "lub zaktualizuj system do najnowszej wersji OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "sekundy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"do uruchomienia HTTPS bez weryfikacji certyfikatów serwera (niezabezpieczone)"
diff --git a/package/luci/applications/luci-app-ddns/po/pt/ddns.po b/package/luci/applications/luci-app-ddns/po/pt/ddns.po
new file mode 100644 (file)
index 0000000..a701707
--- /dev/null
@@ -0,0 +1,938 @@
+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: 2024-02-15 00:29+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
+"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/pt/>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\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.4-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\".. /\" não é permitido no caminho por Razões de Segurança."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Adicionar novos serviços...."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Definições Avançadas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Permitir IP's não-públicos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Definições Básicas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Ligar Rede"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Ligar a uma rede específica não suportada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"O nslookup e o Wget do BusyBox não suportam especificar a versão de IP a ser "
+"usada para comunicação com o provedor de DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"O nslookup e o hostip do BusyBox não suportam que especificar usar TCP em "
+"vez do padrão UDP quando requisitando servidor de DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"O nslookup do BusyBox na versão compilada atualmente não trabalha "
+"corretamente com os servidores de DNS dados!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Caminho de Certs de Ac"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Caminho de Certs Ac que será usado para descarregar os dados dos serviços. "
+"Defina IGNORE para saltar a validação do certificado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Intervalo de verificação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Unidade de verificação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "A verificar o suporte de serviço..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configuração"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Erro de configuração"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Criar serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Definição atual:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Atualmente, as atualizações DDNS não são iniciadas na inicialização ou em "
+"eventos de interface."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Script de atualização personalizado a ser usado para atualizar o seu "
+"provedor de DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "URL para atualização personalizada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Script de atualização personalizado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Inicialização automática do DDNS desativada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Inicialização automática do DDNS ativada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Provedor de serviços DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Serviço DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Solicitações de DNS via TCP não suportadas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Servidor DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Formato da data"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Define a página Web de onde ler os endereços IP dos sistemas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Define a interface de onde ler os endereços IP dos sistemas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Define a rede de onde ler os endereços IP dos sistemas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Define a fonte de leitura do endereço IP do sistema, que será enviado para o "
+"provedor de DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Define qual endereço IP 'IPv4/IPv6' é enviado ao provedor DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "O diretório contém ficheiros de log para cada secção em execução."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"O diretório contém PID e outras informações de estado para cada secção em "
+"execução."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Desativado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domínio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS Dinâmico"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Versão DNS Dinâmica"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Editar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Ativar a comunicação segura com o provedor de DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Ativado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Falha"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Máximo de tentativas após erro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Intervalo de Tentativas em Erro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Rede de Eventos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Exemplo de IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Exemplo de IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Ficheiro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Siga as instruções que encontrará na página WEB deles."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Para códigos suportados, veja aqui"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Forçar Versão de IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Forçar Versão de IP não suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Forçar o intervalo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Forçar TCP no DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Forçar a unidade"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formato: IP ou FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget usará o IP de uma determinada rede, cURL usará a interface física."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Configurações Globais"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Conceder acesso UCI aos procedimentos ddns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS não suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Hostname/FQDN a ser validado, se atualização de IP acontecer ou for "
+"necessária"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Fonte do endereço IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Versão do endereço IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Endereço-IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Endereço IPv6 deve estar entre colchetes"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 não é atualmente (totalmente) suportado por este sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 não suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Endereço-IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Se o pacote Wget e cURL estiverem instalados, o Wget é usado para "
+"comunicação por padrão."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Se esta secção de serviço estiver desativada, não pôde ser iniciada."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Deve verificar os certificados do servidor caso estiver a utilizar "
+"comunicação segura!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"Em algumas versões do OpenWrt cURL/libcurl é compilada sem suporte a proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Informações"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Inserir um Script ou URL de Atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Instale o pacote 'ca-certificates' ou os certificados necessários "
+"manualmente ao diretório /etc/ssl/certs padrão"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Instalar o serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Intervalo para forçar o envio de atualizações para o Provedor de DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Unidade de intervalo para verificar se o IP foi alterado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Unidade de intervalo para forçar atualizações enviadas ao provedor de DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Última atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Visualizador de ficheiro de log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Directório de Log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Tamanho do log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Log para ficheiro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Registar para o syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Verificar nome de host"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nome"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Nem GNU Wget com SSL, nem cURL instalado para selecionar uma rede para usar "
+"para comunicação."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Nem GNU Wget com SSL, nem cURL instalado para suportar atualizações seguras "
+"via protocolo HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Nem da interface LuCI, nem da consola."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Rede"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Rede na qual os scripts de atualização DDNS serão iniciados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Nunca"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Novo Serviço de DDns…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Próxima atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Sem dados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Nenhum certificado encontrado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Sem registros"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "IPs não públicos e bloqueados por padrão"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Não em Execução"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Aviso"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Número das últimas linhas salvas nos ficheiross de log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "OPCIONAL: Force o uso de apenas comunicação IPv4/IPv6 pura."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr "OPCIONAL: Force o uso de TCP em vez do padrão UDP em requisições DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPCIONAL: Rede para usar para comunicação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPCIONAL: Servidor Proxy para deteção e atualização."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr "OPCIONAL: Use servidor DNS não padrão para detetar 'Registered IP'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"Perante um erro, o script interromperá a execução após um determinado número "
+"de tentativas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Parâmetro Opcionalmente Codificado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Parâmetro Opcional"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Opcional: Substitui [PARAMEND] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Opcional: Substitui [PARAMOPT] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "servidor PROXY"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Palavra-passe"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Caminho para o certificado da AC"
+
+#: 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 ""
+"Por favor, siga as instruções na página inicial do OpenWrt para ativar o "
+"suporte de IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Por favor pressione o botão [Ler]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Ler / Ler novamente o ficheiro de log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Realmente mudar o serviço?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "IP registrado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Recarregar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Recarregar este serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Substitui [DOMAIN] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Substitui [PASSWORD] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Substitui [USERNAME] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Reiniciar DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Tentar a unidade novamente"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Executar apenas uma vez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Executando"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Script"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Selecione um serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "O serviço não suporta este tipo de ip"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "O Serviço não está instalado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Serviços"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Descarregar URL de serviços"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Última atualização da lista de serviços"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Definir este parâmetro como 0 forçará o script a ser executado apenas uma vez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Iniciar DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Estado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Estado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Diretório de estado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Parar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Parar DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Parar este serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Parado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Trocar serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "A configuração padrão de '0' terá tentativas infinitas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "O intervalo entre o qual cada nova tentativa sucessiva começará."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "O nome do serviço já está usado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Não há serviço configurado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Este é o conteúdo atual do ficheiro de registo %h para este serviço."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Este é o padrão se você executar scripts DDNS sozinho (ou seja, via cron com "
+"force_interval definido como '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Isto será configurado automaticamente à interface selecionada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Configurações do Controlador de Tempo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "Detectada pela URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Atualizar lista de serviços de DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "URL de atualização a ser usado para atualizar o seu provedor de DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"Url usado para descarregar o ficheiro de serviços. Por predefinição é o "
+"master repo pacote openwrt ddns."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Usar HTTP Seguro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Usar cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Script definido pelo utilizador para ler endereço IP do sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nome do utilizador"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Usar servidor DNS específico não é suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Valores abaixo de 5 minutos == 300 segundos não são suportados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "Valores mais baixos que 'Check Interval' exceto '0' não são suportados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Verificar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Aviso"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Quais unidades de tempo usar para contadores de novas tentativas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Escreve mensagens detalhadas no ficheiro de log. O ficheiro será "
+"automaticamente truncado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Escreve mensagens de log no log do sistema. Erros críticos sempre serão "
+"escritos no log do sistema."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Deve instalar o pacote 'bind-host' ou 'knot-host' ou 'drill' ou 'hostip', se "
+"precisar especificar um servidor de DNS para detetar o seu IP registado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Você deve instalar o pacote 'bind-host' ou 'knot-host' ou 'drill' para "
+"requisições DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Você deve instalar o pacote 'wget' ou 'curl' ou 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Você deve instalar o pacote 'wget' ou 'curl' ou 'uclient-fetch' com "
+"'libustream-*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Você deve instalar o pacote ‘wget’ ou ‘curl’."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Você deve instalar o pacote ‘wget’ ou ‘uclient-fetch’ ou substituir libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL está instalado, mas libcurl foi compilada sem suporte a proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL sem suporte a proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "personalizado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "dias"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "diretório ou caminho/ficheiro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "horas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minutos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "ou"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "ou atualize o seu sistema para a versão mais recente do OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "segundos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"para executar HTTPS sem verificação dos certificados do servidor (não seguro)"
diff --git a/package/luci/applications/luci-app-ddns/po/pt_BR/ddns.po b/package/luci/applications/luci-app-ddns/po/pt_BR/ddns.po
new file mode 100644 (file)
index 0000000..978d4d9
--- /dev/null
@@ -0,0 +1,940 @@
+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: 2024-06-24 23:51+0000\n"
+"Last-Translator: Janderson Vieira Santos <jandersonvs79@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsddns/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\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.6-rc\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" não permitido no caminho para motivo de segurança."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Adicionar novos serviços..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Configurações avançadas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Permitir IPs não-públicos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Configurações Básicas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Limitar Rede"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Não suportado limitar a uma rede específica"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"nslookup e Wget do BusyBox não suportam que especifique a versão de IP a ser "
+"usada para comunicação com o provedor DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"nslookup e hostip do BusyBox não suportam que especifique para usar TCP em "
+"vez do padrão UDP quando requisitando servidor DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"nslookup do BusyBox na versão compilada atualmente não trabalha corretamente "
+"com servidores DNS dados!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Caminho dos certificados Ca"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"O caminho dos certificados Ca que serão utilizados para fazer o download dos "
+"dados do serviço. Defina como IGNORE para ignorar a validação do certificado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Cancelar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Intervalo de verificação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Verificar a Unidade"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Verificando o suporte do serviço..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configuração"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Erro de configuração"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Criar serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Configuração atual:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Atualmente, as atualizações do DDNS não são iniciadas na inicialização ou em "
+"eventos de interface."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Scripts de atualização personalizados para serem usados para atualizar seu "
+"Provedor DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "URL para atualização personalizada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Script para atualização personalizado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Auto-inicialização de DDNS desabilitada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Inicialização automática de DDNS habilitado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Provedor de serviço DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Serviço DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Requisição de DNS via TCP não suportada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Servidor DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Formato de data"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Define a página da Web para ler os sistemas a partir do Endereço IP."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Define a interface para ler o endereço IP do sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Define a rede para ler endereço IP de sistemas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Define a origem para ler o endereço IP de sistemas, que será enviada ao "
+"provedor DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Define qual endereço IP ‘IPv4/IPv6’ é enviado ao provedor DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "O diretório contém arquivos de registro para cada seção de execução."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"O diretório contém PID e outras informações de status para cada seção de "
+"execução."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Desativado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domínio"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS Dinâmico"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Versão de DNS dinâmico"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Editar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Habilitar comunicação segura com o provedor DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Ativado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Erro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Máximo de tentativas após erro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Intervalo de tentativas em Erro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Rede de Evento"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Exemplo para IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Exemplo para IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Arquivo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Siga as instruções que você encontrará na página WEB deles."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Olhe aqui para códigos suportados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Forçar versão de IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Forçar versão de IP não suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Forçar intervalo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Forçar TCP em DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Impor a Unidade"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Formato"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Formato: IP ou FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr "GNU Wget usará o IP da rede informada, cURL usará a interface física."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Configurações Globais"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Conceda acesso UCI aos procedimentos ddns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS não suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Hostname/FQDN a ser validado, se atualização de IP acontecer ou for "
+"necessária"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Fonte do endereço IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Versão do endereço IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Endereço IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Endereço IPv6 deve estar entre colchetes"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "O IPv6 não é atualmente (totalmente) suportado por este sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 não suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Endereço IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Se o pacote Wget e cURL for instalado, o Wget é usado para comunicação por "
+"padrão."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Se esta seção de serviço está desabilitada, não poderia ser iniciado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Se estiver usando uma comunicação segura, você deve verificar os "
+"certificados do servidor!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"Em algumas versões do OpenWrt cURL/libcurl é compilada sem suporte a proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Informação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informações"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Insira um script de atualização OU uma URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Instale manualmente o pacote ’ca-certificates’ ou certificados necessários "
+"no diretório padrão /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Serviço de instalação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Intervalo para forçar atualizações enviados ao provedor DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Unidade intervalada para verificar a alteração do PI"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Unidade de intervalo para impor as atualizações enviados ao provedor DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Última atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Visualizador de arquivo de registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Diretório de registro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Tamanho do log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Log para arquivo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Registrar no syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Verificar nome de host"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nome"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Nem GNU Wget com SSL nem cURL instalado para selecionar uma rede para usar "
+"para comunicação."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Nem GNU Wget com SSL nem cURL instalado para suportar atualizações seguras "
+"via protocolo HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Nem a partir da interface LuCI nem a partir do console."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Rede"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Rede na qual os scripts de atualização DDNS serão iniciados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Nunca"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Novo Serviço DDNS…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Próxima atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Sem dados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Nenhum certificado encontrado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Sem registros"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "IPs não públicos e bloqueados por padrão"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Não está em execução"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Aviso"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Número das últimas linhas salvas nos arquivos de log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "OPCIONAL: Force o uso de apenas comunicação IPv4/IPv6 pura."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr "OPCIONAL: Force o uso de TCP em vez do padrão UDP em requisições DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPCIONAL: Rede para usar para comunicação"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPCIONAL: Servidor Proxy para detecção e atualização."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr "OPCIONAL: Use servidor DNS não-padrão para detectar \"IP Registrado\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"Em erro, o script interromperá a execução após uma determinada quantidade de "
+"tentativas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Parâmetro Opcionalmente Codificado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Parâmetro Opcional"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Opcional: Substitui [PARAMEND] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Opcional: Substitui [PARAMOPT] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "servidor PROXY"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Senha"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Caminho para o certificado 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 ""
+"Por favor, siga as instruções na página inicial do OpenWrt para habilitar o "
+"suporte do IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Por favor, pressione o botão [Ler]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Ler / Ler novamente o arquivo do registro log"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Deseja realmente trocar o serviço?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "IP registrado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Recarregar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Recarregar este serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Substitui [DOMÍNIO] na URL de atualização (codificado por URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Substitui [PASSWORD] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Substitui [USERNAME] na URL de atualização"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Reiniciar DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Tentar a Unidade Novamente"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Rodar apenas uma vez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Em execução"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Script"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Selecione um serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "O serviço não suporta este tipo de IP"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "O serviço não está instalado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Serviços"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "URL dos serviços para download"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Última atualização da lista dos serviços"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Ao definir este parâmetro para 0 irá impor que o script rode apenas uma vez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Iniciar DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Estado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Diretório de status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Parar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Parar DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Para este serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Parado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Trocar o serviço"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "A configuração padrão de '0' terá infinitas tentativas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+"O intervalo entre o qual cada nova tentativa com sucesso será iniciada."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "O nome do serviço já é usado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Não há serviço configurado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+"Este é o conteúdo atual do arquivo de registro em %h para este serviço."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Este é o padrão se você executar scripts DDNS por si mesmo (ou seja, via "
+"cron com force_interval definido para \"0\")"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Isso será automaticamente definido para a interface selecionada"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Configurações do Controlador de Tempo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "Detectada pela URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Desconhecido"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Atualizar a lista dos serviços DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "Atualize url para ser usado para atualizar seu provedor de DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"A Url usada para baixar o arquivo de serviços. Por padrão é o pacote master "
+"openwrt ddns repo."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Usar HTTP Seguro"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Usar cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Script definido pelo usuário para ler endereço IP do sistema"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nome do usuário"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Usar servidor DNS específico não é suportado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Valores abaixo de 5 minutos == 300 segundos não são suportados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "Valores mais baixos 'Check Interval', exceto '0' não são suportados"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Verificar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Alerta"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Quais unidades de tempo usar para a contagem das novas tentativas."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Escreve mensagens detalhadas no arquivo de log. Arquivo será automaticamente "
+"truncado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Escreve mensagens de log no log do sistema. Erros críticos sempre serão "
+"escritos no log do sistema."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Você deve instalar o pacote 'bind-host' ou 'knot-host' ou 'drill' ou "
+"'hostip' caso precise especificar um servidor DNS para detectar seu IP "
+"registrado."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Você deve instalar o pacote 'bind-host' ou 'knot-host' ou 'drill' para "
+"requisições DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Você deve instalar o pacote 'wget' ou 'curl' ou 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Você deve instalar o pacote 'wget' ou 'curl' ou 'uclient-fetch' com "
+"'libustream-*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Você deve instalar o pacote ‘wget’ ou ‘curl’."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Você deve instalar o pacote ‘wget’ ou ‘uclient-fetch’ ou substituir libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL está instalado, mas libcurl foi compilada sem suporte a proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL sem suporte a proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "personalizado"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "dias"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "diretório ou caminho/arquivo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "horas"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minutos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "ou"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "ou atualize seu sistema para o mais recente lançamento do OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "segundos"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"para rodar HTTPS sem verificação dos certificados do servidor (não seguro)"
diff --git a/package/luci/applications/luci-app-ddns/po/ro/ddns.po b/package/luci/applications/luci-app-ddns/po/ro/ddns.po
new file mode 100644 (file)
index 0000000..8a949ab
--- /dev/null
@@ -0,0 +1,959 @@
+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: 2023-04-23 07:03+0000\n"
+"Last-Translator: olimpiumarius <oliver_magnum44@yahoo.com>\n"
+"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/ro/>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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 4.18-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" nu este permis în calea de acces din motive de securitate."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Adaugă servicii noi..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Setări avansate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Permite IP-uri non-publice"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Setări de bază"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Leagă de rețea"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Legarea de o anumită rețea nu este suportată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"BusyBox's nslookup și Wget nu suportă specificarea versiunii IP de utilizat "
+"pentru comunicarea cu furnizorul DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"BusyBox's nslookup și hostip nu acceptă specificarea utilizării TCP în loc "
+"de UDP implicit atunci când se solicită un server DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"BusyBox's nslookup în versiunea compilată actuală nu gestionează corect "
+"serverele DNS date!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Ca Certs cale de acces"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Ca Certs calea de acces care va fi utilizată pentru a descărca datele "
+"serviciilor. Setați IGNORE pentru a sări peste validarea certificatelor."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Anulare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Interval de verificare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Verificați unitatea"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Verificarea suportului de service..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Configurație"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Eroare de configurație"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Creează serviciu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Setarea curentă:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"În prezent, actualizările DDNS nu sunt pornite la pornire sau la evenimente "
+"de interfață."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Script de actualizare personalizat care va fi utilizat pentru actualizarea "
+"furnizorului DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Adresa particularizata de actualizare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Script de update personalizat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Pornirea automată a DDNS dezactivată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Pornirea automată a DDNS activată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Furnizorul de servicii DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Serviciul DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Cererile DNS prin TCP nu sunt acceptate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Server DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Formatul datei"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Definește pagina web de pe care se citește adresa IP a sistemelor."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Definește interfața de la care se citește adresa IP a sistemelor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Definește rețeaua din care se citește adresa IP a sistemelor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Definește sursa de la care se citește adresa IP a sistemelor, care va fi "
+"trimisă furnizorului DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Definește care adresă IP \"IPv4/IPv6\" este trimisa furnizorului DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+"Directorul conține fișierele jurnal pentru fiecare secțiune în curs de "
+"execuție."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Directorul conține PID și alte informații de stare pentru fiecare secțiune "
+"în curs de execuție."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Dezactivat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domeniu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "DNS dinamic"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Versiune DNS Dinamic"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Editați"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Activează comunicarea securizată cu furnizorul DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "activat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Eroare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Intervalul reîncercărilor în caz de eroare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Rețeaua de evenimente"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Exemplu pentru IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Exemplu pentru IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Fișier"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Urmați instrucțiunile pe care le veți găsi pe pagina lor WEB."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Pentru coduri acceptate, uitați-vă aici"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Forțează versiune IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Forțarea versiunii IP nu este suportată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Interval de forță"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Forțați TCP pe DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Unitatea de forță"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Format"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Format: IP sau FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget va folosi IP-ul rețelei date, iar cURL va folosi interfața fizică."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Setări generale"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Acordați acces la procedurile ddns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS nu este acceptat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Numele de gazdă/FQDN de validat, dacă se întâmplă sau este necesară "
+"actualizarea IP-ului"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Sursa adresei IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Versiunea adresei IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Adresa IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Adresa IPv6 trebuie indicată între paranteze drepte"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 nu este în prezent (pe deplin) acceptat de acest sistem"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 nu este suportat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Adresă IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"În cazul în care sunt instalate pachetele Wget și cURL, Wget este utilizat "
+"în mod implicit pentru comunicare."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+"Dacă această secțiune de serviciu este dezactivată, nu a putut fi pornită."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Dacă utilizați o comunicare securizată, ar trebui să verificați "
+"certificatele serverului!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"În unele versiuni, cURL/libcurl din OpenWrt este compilat fără suport pentru "
+"proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Informații"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informație"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Introduceți un script de actualizare SAU un URL de actualizare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Instalați pachetul 'ca-certificates' sau certificatele necesare manual în "
+"directorul implicit /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Instalarea serviciului"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Interfață"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+"Interval pentru a forța trimiterea de actualizări către furnizorul DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Intervalul de verificare pentru IP schimbat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Unitatea de interval pentru a forța trimiterea de actualizări către "
+"furnizorul DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Ultima actualizare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Vizualizator de fișiere jurnal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Director de jurnal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Lungimea jurnalului"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Înregistrare în fișier"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Înregistrare în syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Căutarea numelui de gazdă"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Nume"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Nici GNU Wget cu SSL și nici cURL nu sunt instalate pentru a selecta o rețea "
+"de utilizat pentru comunicare."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Nici GNU Wget cu SSL și nici cURL nu sunt instalate pentru a suporta "
+"actualizări securizate prin protocolul HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Nici de la interfața LuCI, nici de la consolă."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Rețea"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Rețeaua pe care vor fi pornite scripturile ddns-updater"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Niciodată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Noul serviciu DDns…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Următoarea actualizare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Nu există date"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Nu s-au găsit certificate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Fără logare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "IP-uri nepublice și implicit blocate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Nu funcționează"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Aviz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Numărul ultimelor linii stocate în fișierele jurnal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "OPȚIONAL: Forțează utilizarea exclusivă a comunicațiilor IPv4/IPv6."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"OPȚIONAL: Forțează utilizarea TCP în loc de UDP implicit pentru cererile DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "OPȚIONAL: Rețeaua de utilizat pentru comunicare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "OPȚIONAL: Proxy-Server pentru detectare și actualizări."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"OPȚIONAL: Utilizați un server DNS care nu este prestabilit pentru a detecta "
+"\"Registered IP\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"În caz de eroare, scriptul va întrerupe execuția după un anumit număr de "
+"încercări repetate."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Parametru codificat opțional"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Parametru opțional"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Opțional: Înlocuiește [PARAMENC] în Update-URL (URL-encodat)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Opțional: Înlocuiește [PARAMOPT] în Update-URL (NU este codificat URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "PROXY-Server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Parolă"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Calea către certificatul 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 ""
+"Vă rugăm să urmați instrucțiunile de pe pagina de start a OpenWrt pentru a "
+"activa suportul IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Vă rugăm să apăsați butonul [Read]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Citiți / Recitiți fișierul jurnal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Chiar schimbați serviciul?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "IP înregistrat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Reîncărcați"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Reîncărcați acest serviciu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Înlocuiește [DOMAIN] în Update-URL (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Înlocuiește [PASSWORD] în Update-URL (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Înlocuiește [USERNAME] în Update-URL (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Reporniți DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Unitate de reluare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Rulați o dată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Rulare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Scenariu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Selectați un serviciu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Serviciul nu acceptă acest tip de ip"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Serviciul nu este instalat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Servicii"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Servicii URL Descărcare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Ultima actualizare a listei de servicii"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Setarea acestui parametru la 0 va forța scriptul să ruleze doar o singură "
+"dată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Porniți DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Stat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Stare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Director de stare"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Stop"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Opriți DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Opriți acest serviciu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "S-a oprit"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Comutați serviciul"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Setarea implicită de \"0\" va reîncerca la infinit."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "Intervalul între care va începe fiecare reîncercare succesivă."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Numele serviciului este deja utilizat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Nu este configurat niciun serviciu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+"Acesta este conținutul actual al fișierului jurnal în %h pentru acest "
+"serviciu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Aceasta este valoarea implicită în cazul în care rulați singur scripturile "
+"DDNS (de exemplu, prin cron cu force_interval setat la '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Aceasta va fi setată automat pe interfața selectată"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Setări temporizator"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL de detectat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Necunoscut"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Actualizarea listei de servicii DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+"URL de actualizare care urmează să fie utilizat pentru actualizarea "
+"furnizorului DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"Url utilizat pentru a descărca fișierul de servicii. În mod implicit, este "
+"repo-ul principal al pachetului openwrt ddns."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Utilizați HTTP Securizat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Utilizați cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Script definit de utilizator pentru a citi adresa IP a sistemelor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Nume Utilizator"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Nu se acceptă utilizarea unui server DNS specific"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Valorile sub 5 minute == 300 de secunde nu sunt acceptate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+"Valorile mai mici ale 'Intervalului de verificare', cu excepția lui '0', nu "
+"sunt acceptate"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Verifică"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Avertisment"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+"Unitățile de timp care trebuie utilizate pentru contoarele de încercări "
+"repetate."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Scrie mesaje detaliate în fișierul jurnal. Fișierul va fi trunchiat automat."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Scrie mesajele de jurnal în syslog. Erorile critice vor fi întotdeauna "
+"scrise în syslog."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Ar trebui să instalați pachetul \"bind-host\" sau \"knot-host\" sau "
+"\"drill\" sau \"hostip\", dacă aveți nevoie să specificați un server DNS "
+"pentru a vă detecta IP-ul înregistrat."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Ar trebui să instalați pachetul 'bind-host' ori 'knot-host' sau 'drill' "
+"pentru cererile DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Ar trebui să instalați pachetul 'wget' ori 'curl' sau 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Ar trebui să instalați \"wget\" sau \"curl\" sau \"uclient-fetch\" cu "
+"pachetul \"libustream-*ssl\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Ar trebui să instalați pachetul \"wget\" sau \"curl\"."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Ar trebui să instalați pachetul 'wget' sau 'uclient-fetch' sau să înlocuiți "
+"libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"cURL este instalat, dar libcurl a fost compilat fără suport pentru proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL fără suport Proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "personalizat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "zile"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "director sau cale/file"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "ore"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minute"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "sau"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "sau actualizați-vă sistemul la cea mai recentă versiune OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "secunde"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"pentru a rula HTTPS fără verificarea certificatelor serverului (nesigur)"
diff --git a/package/luci/applications/luci-app-ddns/po/ru/ddns.po b/package/luci/applications/luci-app-ddns/po/ru/ddns.po
new file mode 100644 (file)
index 0000000..1bf1b52
--- /dev/null
@@ -0,0 +1,948 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: ddns\n"
+"POT-Creation-Date: 2017-10-17 21:00+0300\n"
+"PO-Revision-Date: 2024-01-23 10:05+0000\n"
+"Last-Translator: st7105 <st7105@gmail.com>\n"
+"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.4-dev\n"
+"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
+"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+"Использование «../» в пути не разрешается по соображениям безопасности."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Добавить новую службу..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Дополнительные настройки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Разрешить непубличные IP-адреса"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Основные настройки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Привязать сеть"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Привязка к определенной сети не поддерживается"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"Утилиты nslookup и wget из состава busybox не поддерживают указание версии "
+"IP, используемой для связи с провайдером DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"Утилиты nslookup и hostip из состава busybox не позволяют указать "
+"использование TCP вместо UDP по умолчанию при запросе к DNS-серверу!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"Утилита nslookup из установленной сборки busybox некорректно работает с "
+"данными серверами DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Путь к сертификатам CA"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Путь к сертификатам CA, которые будут использоваться для загрузки данных "
+"сервисов. Установите IGNORE, чтобы пропустить проверку сертификата."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Отмена"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Период проверки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Элемент проверки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Проверка поддержки службы..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Конфигурация"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Ошибка конфигурации"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Создать службу"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Текущие настройки:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Пользовательский скрипт обновления, который будет использоваться для вашего "
+"провайдера DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Пользовательский URL обновления"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Пользовательский скрипт обновления"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Автозапуск DDNS отключен"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Автозапуск DDNS включён"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Провайдер службы DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Служба DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Запросы DNS по протоколу TCP не поддерживаются"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Сервер DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Формат даты"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Определяет веб-страницу, с которой будет считываться IP-адрес системы."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Определяет интерфейс для чтения системного IP-адреса из"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Определяет сеть для считывания системного IP-адреса"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Определяет источник для чтения системного IP-адреса, который будет "
+"отправляться провайдеру DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Определяет, который IP-адрес 'IPv4/IPv6' отправляется провайдеру DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Каталог, содержащий файлы журналов для каждой запущенной службы."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+"Каталог, содержащий PID-файлы и другую информацию о состоянии каждой "
+"запущенной службы."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Отключено"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Домен"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Динамический DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Версия DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Изменить"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Включить безопасное соединение с провайдером DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Включено"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Ошибка"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Ошибка Максимальный счетчик повторных попыток"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Интервал попытки повтора при ошибке"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Событие сети"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Шаблон для IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Шаблон для IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Файл"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+"Следуйте инструкциям, которые вы найдете в документации провайдера DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "С поддерживаемыми кодами вы можете ознакомится здесь"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Назначенная версия протокола IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Назначенная версия протокола IP не поддерживается"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Назначить интервал"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Использовать протокол TCP для DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Размерность интервала обновления"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Формат"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "В виде: IP-адрес или полное доменное имя"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+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 "Общие настройки"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Предоставить доступ к процедурам DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS не поддерживается"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"Имя хоста/полное доменное имя для проверки, если IP-адрес изменяется или "
+"есть необходимость"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP-адрес источника"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Версия IP-адреса"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-адрес"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "IPv6-адрес должен быть указан в квадратных скобках"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+"В настоящее время эта система не (полностью) поддерживает протокол IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 не поддерживается"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-адрес"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Если установлены пакеты wget и cURL, то по умолчанию будет использоваться "
+"wget."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Если служба отключена, её нельзя будет запустить."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Если используется безопасное соединение, необходимо проверить сертификаты "
+"сервера!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"В некоторых версиях OpenWrt пакеты cURL/libcurl скомпилированы без поддержки "
+"прокси."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Информация"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Информация"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Укажите скрипт обновления или URL обновления"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Установите пакет 'ca-certificates' или поместите необходимые сертификаты в "
+"каталог /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Установить службу"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Интерфейс"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Интервал для отправки обновлений провайдеру DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Размерность интервала проверки изменений IP-адреса"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr "Размерность интервала отправки обновлений провайдеру DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Последнее обновление"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Просмотр файла журнала"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Каталог журнала"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Просмотр журнала"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Запись в файл"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Записывать в syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Поиск имени хоста"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Название"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Не установлены пакеты GNU wget c SSL или cURL для возможности выбора сети "
+"для связи."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Не установлены пакеты GNU wget с SSL или cURL для поддержки безопасных "
+"обновлений по протоколу HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Ни из веб-интерфейса LuCI, ни из консоли."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Сеть"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Сеть, в которой будут запущены скрипты DDNS-updater"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Никогда"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Новая служба DDNS…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Следующее обновление"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Нет данных"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Сертификаты не найдены"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Отключить журналирование"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Непубличные и заблокированные по умолчанию IP-адреса"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Не работает"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Уведомление"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Число последних строк, для хранения в журнале"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "Необязательно: использовать исключительно одну из версий IPv4/IPv6."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"Необязательно: использовать протокол TCP вместо UDP по умолчанию для DNS-"
+"запросов."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "Необязательно: сеть для связи"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "Необязательно: прокси-сервер для обнаружения и обновления."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"Необязательно: использовать особый DNS-сервер для обнаружения "
+"'Зарегистрированного IP-адреса'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr "Необязательный кодированный параметр"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Необязательный параметр"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Необязательно: заменяет [PARAMENC] в Update-URL (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "Необязательно: заменяет [PARAMOPT] в Update-URL (не URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Прокси-сервер"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Пароль"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+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 ""
+"Следуйте инструкциям на домашней странице OpenWrt, чтобы включить поддержку "
+"IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Нажмите кнопку [Читать]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Читать / Перечитать файл журнала"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Действительно переключить службу?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Зарегистрированный IP-адрес"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Перезагрузить"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Перезагрузить данную службу"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Заменяет [DOMAIN] в Update-URL (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Заменяет [PASSWORD] в Update-URL (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Заменяет [USERNAME] в Update-URL (URL-encoded)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Перезапустить DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Размерность интервалов повтора"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Запустить один раз"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Запущенные"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Скрипт"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Выберите службу"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Служба не поддерживает выбранный тип IP"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Служба не установлена"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Службы"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "URL файла поддержки служб"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Последнее обновление списка служб"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr "Установка значения 0 заставит сценарий отработать только один раз"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Запустить DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Состояние"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Статус"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Папка состояния"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Остановить"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Остановить DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Остановить эту службу"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Остановлена"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Переключить службу"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Значение по умолчанию '0' используется для бесконечного повтора."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "Интервал между последовательными попытками."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Имя службы уже используется"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Служба не настроена."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Это текущее содержимое файла журнала в %h для этой службы."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Это поведение по умолчанию, если вы запускаете скрипты DDNS самостоятельно "
+"(т.е. через cron с параметром force_interval, установленным в '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Будет выполнена автоматическая настройка на выбранный интерфейс"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Настройка таймера"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL для обнаружения"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Неизвестный"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Обновить список служб DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "URL для обновления данных провайдера DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"URL для загрузки файла служб. По умолчанию используется файл из ветки master "
+"основного репозитория пакетов OpenWrt."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Использовать HTTPS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Использовать cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Заданный пользователем скрипт для чтения системного IP-адреса"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Имя пользователя"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Использование определенного DNS сервера не поддерживается"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Значения меньше 5 минут (300 секунд) не поддерживаются"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "Значения меньше интервала проверки (кроме 0) не поддерживаются"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Проверить"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Внимание"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Какие единицы времени использовать для таймера повторных попыток."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Записывать сообщения в syslog. Критические ошибки всегда будут записаны в "
+"syslog."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Следует установить пакет 'bind-host', 'knot-host', 'drill' или 'hostip', "
+"если нужно указать DNS-сервер для обнаружения вашего зарегистрированного IP-"
+"адреса."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Следует установить пакет 'bind-host', 'knot-host' или 'drill' для DNS-"
+"запросов."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Следует установить пакет 'wget', 'curl' или 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Следует установить пакет 'wget', 'curl' или 'uclient-fetch' с 'libustream-"
+"*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Следует установить пакет 'wget' или 'curl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"Следует установить пакет 'wget' или 'uclient-fetch' либо заменить 'libcurl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL установлен, но libcurl был скомпилирован без поддержки прокси."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL без поддержки прокси"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "пользовательский"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "дни"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "каталог или путь/файл"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "часа(ов)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "минут(ы)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "или"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "или обновить вашу систему до последнего релиза OpenWrt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "секунд(ы)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "использовать HTTPS без проверки сертификатов сервера (небезопасно)"
diff --git a/package/luci/applications/luci-app-ddns/po/sk/ddns.po b/package/luci/applications/luci-app-ddns/po/sk/ddns.po
new file mode 100644 (file)
index 0000000..351adf5
--- /dev/null
@@ -0,0 +1,884 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-07-12 15:48+0000\n"
+"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
+"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/sk/>\n"
+"Language: sk\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.0-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Pridať nové služby..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Pokročilé nastavenia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Povoliť neverejné adresy IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Základné nastavenia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Previazať siete"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Previazanie k určitej sieti nie je podporované"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Zrušiť"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Interval kontroly"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Kontroluje sa podpora služby..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Konfigurácia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Chyba konfigurácie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Vytvoriť službu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Aktuálne nastavenie:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Vlastný aktualizačný skript použitý na aktualizáciu vášho poskytovateľa DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Automatické spustenie DDNS zakázané"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Automatické spustenie DDNS povolené"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Poskytovateľ služby DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Služba DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Server DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Formát dátumu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Zakázané"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Doména"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Upraviť"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Zapnuté"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Chyba"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Súbor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Adresa IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Adresa IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Informácia"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Informácie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Rozhranie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Názov"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Sieť"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Oznámenie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Heslo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Služby"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Stav"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Zastaviť"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "Adresa URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Neznáme"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Používateľské meno"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Upozornenie"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/sv/ddns.po b/package/luci/applications/luci-app-ddns/po/sv/ddns.po
new file mode 100644 (file)
index 0000000..1ce7148
--- /dev/null
@@ -0,0 +1,889 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-05-20 08:09+0000\n"
+"Last-Translator: Daniel Nilsson <daniel.nilsson94@outlook.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.6-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" ej tillåten i sökväg av säkerhetsskäl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Lägg till nya tjänster..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Avancerade inställningar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Tillåt icke-publika IP-adresser"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Grundläggande inställningar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Bind samman nätverk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Att binda samman med ett specifikt nätverk stöds inte"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Sökväg till CA-certifikat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Sökvägen till CA-certifikaten som används för att ladda ner tjänstdata. Välj "
+"IGNORE för att hoppa över certifikatvalidering."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Avbryt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Kontrollintervall"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Kontrollera enhet"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Kontrollerar service-stödet..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Konfiguration"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Konfigurationsfel"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Skapa tjänst"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Nuvarande inställning:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Skräddarsytt uppdateringsskript att använda vid uppdatering av din DDNS-"
+"leverantör."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Anpassad webbadress för uppdatering"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Anpassat uppdateringsskript"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS autostart inaktiverad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS autostart aktiverad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS-tjänstleverantör"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDns-tjänst"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "DNS-förfrågningar via TCP stöds inte"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS-server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Datumformat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Mappen innehåller Logg-filer för varje del som körs."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Avstängd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Domän"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dynamisk DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Dynamisk DNS-version"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Redigera"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Aktivera säker kommunikation med DDNS-leverantör"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Aktiverad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Fel"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Fil"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Tvinga IP-version"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Påtvingad IP-version stöds inte"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Format"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Format: IP eller FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget kommer att använda IP-adressen för det angivna nätverket, cURL "
+"kommer att använda det fysiska gränssnittet."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Globala inställningar"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS stöds inte"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP-adressens källa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Version för IP-adress"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4-adress"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 stöds inte"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6-adress"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Information"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Gränssnitt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Senaste uppdateringen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Visare av loggfil"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Loggens längd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Logga till fil"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Logga till syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Kolla upp värdnamn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Namn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Nätverk"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Aldrig"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Nästa uppdatering"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Inga ceritifikat hittades"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Ingen loggning"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Avisering"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Valfri parameter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "PROXY-server"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Lösenord"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Genväg till CA-certifikat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:312
+msgid ""
+"Please follow the instructions on OpenWrt's homepage to enable IPv6 support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Vänligen tryck på [Läs]-knappen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Läs / Läs om loggfilen"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Registrerad IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Ladda om"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Kör en gång"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Igång"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Skript"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Tjänster"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Stopp"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Stoppad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Det finns ingen tjänst inställd."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "Webbadress"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "Webbadress att upptäcka"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Okänd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Använd Säker HTTP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Använd cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Användarnamn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Verkställ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Varning"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL utan Proxy-stöd"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "anpassad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "dagar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "timmar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "minuter"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "eller"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "sekunder"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "för att köra HTTPS utan verifiering av server-certifikaten (osäkert)"
diff --git a/package/luci/applications/luci-app-ddns/po/templates/ddns.pot b/package/luci/applications/luci-app-ddns/po/templates/ddns.pot
new file mode 100644 (file)
index 0000000..c2dc34e
--- /dev/null
@@ -0,0 +1,874 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr ""
+
+#: 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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/tr/ddns.po b/package/luci/applications/luci-app-ddns/po/tr/ddns.po
new file mode 100644 (file)
index 0000000..8e554ab
--- /dev/null
@@ -0,0 +1,946 @@
+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: 2024-03-31 19:53+0000\n"
+"Last-Translator: Oğuz Han <h4n.3545@gmail.com>\n"
+"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/tr/>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "Güvenlik nedeniyle yol içerisinde \"../\" öğesine izin verilmez."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Yeni hizmetler ekle..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Gelişmiş Ayarlar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Genel olmayan IP'lere izin ver"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Temel Ayarlar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Ağı Bağla"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Belirli bir ağa bağlanma desteklenmez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"BusyBox'ın nslookup ve Wget'i, DDNS Sağlayıcısı ile iletişim için "
+"kullanılacak IP sürümünü belirlemeyi desteklemez!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"BusyBox'ın nslookup ve hostip'i, DNS sunucusu talep ederken varsayılan UDP "
+"yerine TCP kullanmayı belirtmeyi desteklemez!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"BusyBox'ın mevcut derlenmiş sürümdeki nslookup'ı, verilen DNS Sunucularını "
+"doğru şekilde işlemez!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Ca Sertifikaları yolu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Servis verilerini indirmek için kullanılacak Ca Sertifikaları yolu. "
+"Sertifika doğrulamasını atlamak için IGNORE'u ayarlayın."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "İptal"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Kontrol etme aralığı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Kontrol Ünitesi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Servis desteği kontrol ediliyor..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Yapılandırma"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Yapılandırma hatası"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Hizmet oluştur"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Şimdiki ayar:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Şu anda DDNS güncellemeleri önyükleme sırasında veya arayüz olaylarında "
+"başlatılmamaktadır."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"DDNS Sağlayıcınızı güncellemek için kullanılacak özel güncelleme komut "
+"dosyası."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Özel güncelleme URL'si"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Özel güncelleme betiği"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS Otomatik Başlatma devre dışı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS Otomatik Başlatma etkin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS Servis sağlayıcısı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDns Hizmeti"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "TCP üzerinden DNS istekleri desteklenmez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Dns sunucusu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Tarih formatı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Sistemlerin IP Adresinin okunacağı Web sayfasını tanımlar."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Sistemin IP Adresini okuyacak arayüzü tanımlar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Sistemin IP Adresini okuyacak ağı tanımlar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"DDNS sağlayıcısına gönderilecek olan sistem IP Adresini okumak için kaynağı "
+"tanımlar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+"DDNS sağlayıcısına hangi IP adresinin 'IPv4 / IPv6' gönderileceğini tanımlar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Dizin, çalışan her bölüm için Günlük dosyalarını içerir."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr "Dizin, çalışan her bölüm için PID ve diğer durum bilgilerini içerir."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Devre dışı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Alan"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dinamik DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Dinamik DNS Sürümü"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Düzenle"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "DDNS sağlayıcısı ile güvenli iletişimi etkinleştirin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Etkinleştirildi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Hata"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "Hata Azami Yeniden Deneme Sayacı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Yeniden Deneme Hatası Aralığı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Etkinlik Ağı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "IPv4 için örnek"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "IPv6 için örnek"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Dosya"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Web sayfalarında bulacağınız talimatları izleyin."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Desteklenen kodlar için buraya bakın"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "IP Sürümünü Zorla"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "IP Sürümünü Zorla desteklenmiyor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Zorlama Aralığı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "DNS üzerinde TCP'yi zorla"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Zorlama Birimi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Biçim"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Biçim: IP veya FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget, verilen ağın IP'sini kullanacaktır, cURL fiziksel arayüzü "
+"kullanacaktır."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Genel Ayarlar"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "DDNS prosedürlerine erişim izni verin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS desteklenmiyor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+"IP güncellemesinin gerçekleşip gerçekleşmediğini veya gerekli olup "
+"olmadığını doğrulamak için ana bilgisayar adı / FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP adresi kaynağı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP adresi sürümü"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4 Adresi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "IPv6 adresi köşeli parantez içinde verilmelidir"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "IPv6 şu anda bu sistem tarafından (tam olarak) desteklenmemektedir"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 desteklenmiyor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6 Adresi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Wget ve cURL paketi yüklüyse, iletişim için varsayılan olarak Wget "
+"kullanılır."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Bu servis bölümü devre dışı bırakılırsa başlatılamaz."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+"Güvenli iletişim kullanıyorsanız, sunucu sertifikalarını doğrulamalısınız!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"Bazı sürümlerde OpenWrt'deki cURL / libcurl proxy desteği olmadan derlenir."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Bilgi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Bilgi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Bir Güncelleme Komut Dosyası Ekle VEYA ve Güncelleme URL'si"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"'ca-certificates' paketini veya gerekli sertifikaları /etc/ssl/certs "
+"varsayılan dizinine elle yükleyin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Hizmeti yükleyin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Arayüz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Güncellemelerin DDNS Sağlayıcısına gönderilmesini zorlama aralığı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Değiştirilen IP'yi kontrol etmek için aralık birimi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"DDNS Sağlayıcısına gönderilen güncellemeleri zorlamak için aralık birimi."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Son Güncelleme"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Günlük Dosyası Görüntüleyicisi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Günlük dizini"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Günlük uzunluğu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Günlüğü dosyaya yaz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Günlüğü syslog'a yaz"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Ana Makine Adı Ara"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Ad"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Ne SSL ile GNU Wget ne de cURL iletişim için kullanmak üzere bir ağ seçmek "
+"için kurulu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"HTTPS protokolü aracılığıyla güvenli güncellemeleri desteklemek için ne "
+"SSL'li GNU Wget ne de cURL yüklü."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Ne LuCI arayüzünden ne de konsoldan."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Ağ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "DDns güncelleyici komut dosyalarının başlatılacağı ağ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Asla"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Yeni DDns Hizmeti…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Sonraki Güncelleme"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Veri Yok"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Sertifika bulunamadı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Günlük kaydı yok"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Herkese açık olmayan ve varsayılan olarak engellenen IP'ler"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Çalışmıyor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Uyarı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Günlük dosyalarında saklanan son satırların sayısı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "İSTEĞE BAĞLI: Yalnızca IPv4 / IPv6 iletişimini kullanmaya zorlayın."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"İSTEĞE BAĞLI: DNS isteklerinde varsayılan UDP yerine TCP kullanımını "
+"zorlayın."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "İSTEĞE BAĞLI: İletişim için kullanılacak ağ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "İSTEĞE BAĞLI: Algılama ve güncellemeler için Proxy-Sunucu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"İSTEĞE BAĞLI: 'Kayıtlı IP'yi algılamak için varsayılan olmayan DNS "
+"Sunucusunu kullanın."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"Hata durumunda, verilen yeniden deneme sayısından sonra betik yürütmeyi "
+"durduracaktır."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "İsteğe Bağlı Kodlanmış Parametre"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Opsiyonel Parametre"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+"İsteğe bağlı: Güncelleme URL'sindeki [PARAMENC] 'i değiştirir (URL kodlu)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+"İsteğe bağlı: Güncelleme URL'sindeki [PARAMOPT] 'u değiştirir (URL kodlu "
+"DEĞİL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Proxy sunucu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Şifre"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "CA-Sertifikası'nın Yolu"
+
+#: 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 ""
+"IPv6 desteğini etkinleştirmek için lütfen OpenWrt ana sayfasındaki "
+"talimatları izleyin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Lütfen [Oku] düğmesine basın"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Günlük dosyasını oku / yeniden oku"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Gerçekten hizmet değiştirilsin mi?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "Kayıtlı IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Yeniden yükle"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Bu hizmeti yeniden yükleyin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Güncelleme URL'sindeki [ETKİ ALANI] 'nı değiştirir (URL kodlu)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Güncelleme URL'sindeki [ŞİFRE] 'yi değiştirir (URL kodlu)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Güncelleme URL'sindeki [KULLANICI ADI] 'nı değiştirir (URL kodlu)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "DDns'yi yeniden başlatın"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Yeniden Deneme Birimi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Bir kere çalıştır"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Çalışıyor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Betik"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Bir hizmet seçin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Hizmet bu ip türünü desteklemiyor"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Hizmet yüklü değil"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Hizmetler"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "Hizmetin URL'sini İndirme"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Servis listesi son güncelleme"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+"Bu parametrenin 0 olarak ayarlanması, komut dosyasını yalnızca bir kez "
+"çalışmaya zorlar"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "DDNS'yi başlatın"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Durum"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Durum"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Durum dizini"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Durdur"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "DDNS'yi durdur"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Bu hizmeti durdur"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Durduruldu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Hizmeti değiştir"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Varsayılan '0' ayarı sonsuz olarak yeniden deneyecektir."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "Her ardışık yeniden denemenin başlayacağı aralık."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Hizmet adı zaten kullanılıyor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Yapılandırılmış hizmet yok."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Bu, bu hizmet için günlük dosyasının %h içindeki geçerli içeriğidir."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"DDNS komut dosyalarını kendiniz çalıştırırsanız bu varsayılandır (yani "
+"force_interval '0' olarak ayarlanmış cron aracılığıyla)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Bu, seçilen arayüze otomatik olarak ayarlanacaktır"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Zamanlayıcı Ayarları"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "Algılanacak URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Bilinmiyor"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "DDns Hizmetleri Listesini Güncelle"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "DDNS Sağlayıcınızı güncellemek için kullanılacak URL'yi güncelleyin."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"Hizmet dosyasını indirmek için kullanılan URL. Varsayılan olarak ana openwrt "
+"ddns paket deposudur."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Güvenli HTTP kullan"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "cURL kullan"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Sistemlerin IP Adresini okumak için kullanıcı tanımlı komut dosyası"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Kullanıcı adı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Özel DNS Sunucusunun kullanılması desteklenmez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "5 dakika == 300 saniyenin altındaki değerler desteklenmez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "\"0\" dışındaki \"Kontrol Aralığı\" altındaki değerler desteklenmez"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Doğrula"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Uyarı"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Yeniden deneme sayaçları için hangi zaman birimlerinin kullanılacağı."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr ""
+"Günlük dosyasına ayrıntılı mesajlar yazar. Dosya otomatik olarak kırpılacak."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Günlük mesajlarını syslog'a yazar. Kritik Hatalar her zaman syslog'a yazılır."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Kayıtlı IP'nizi algılamak için bir DNS sunucusu belirtmeniz gerekiyorsa, "
+"'bind-host' veya 'knot-host' veya 'drill' veya 'hostip' paketini "
+"kurmalısınız."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"DNS talepleri için 'bind-host' veya 'knot-host' veya 'drill' paketini "
+"kurmalısınız."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "'Wget' veya 'curl' veya 'uclient-fetch' paketini kurmalısınız."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"'Wget' veya 'curl' veya 'uclient-fetch' i 'libustream-*ssl' paketi ile "
+"kurmalısınız."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "'Wget' veya 'curl' paketini kurmalısınız."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+"'Wget' veya 'uclient-fetch' paketini kurmalı veya libcurl'yi "
+"değiştirmelisiniz."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL yüklendi, ancak libcurl proxy desteği olmadan derlendi."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "Proxy Desteği olmadan cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "özel"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "gün"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "dizin veya yol/dosya"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "saat"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "dakika"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "veya"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "veya sisteminizi en son OpenWrt Sürümüne güncelleyin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "saniye"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
+"HTTPS'yi sunucu sertifikalarının doğrulanması olmadan çalıştırmak için "
+"(güvenli değil)"
diff --git a/package/luci/applications/luci-app-ddns/po/uk/ddns.po b/package/luci/applications/luci-app-ddns/po/uk/ddns.po
new file mode 100644 (file)
index 0000000..0695958
--- /dev/null
@@ -0,0 +1,895 @@
+# Generated from applications/luci-ddns/luasrc/model/cbi/ddns/ddns.lua
+#
+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: 2024-02-25 06:41+0000\n"
+"Last-Translator: Костянтин Серьогін <seryoginki@gmail.com>\n"
+"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/uk/>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "Використання «../» на шляху не дозволяється з міркувань безпеки."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Додати новий сервіс..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Розширені налаштування"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Дозволити не публічні IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Базові налаштування"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Привʼязати мережу"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Прив’язка до певної мережі не підтримується"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"Nslookup і Wget від BusyBox не підтримують вказівку версії протоколу IP для "
+"зв’язку з постачальником DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Шлях до CA сертифікатів"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Скасувати"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Інтервал перевірки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Елемент перевірки"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Перевірка підтримки сервісу..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Конфігурація"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Помилка конфігурації"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Створити сервіс"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Поточні налаштування:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Користувацький скрипт оновлення, який буде використовуватися для оновлення "
+"вашого постачальника DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Користувацький URL оновлення"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Користувацький скрипт оновлення"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS сервер"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Формат дати"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Вимкнено"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Домен"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Динамічний DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Редагувати"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Увімкнено"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Помилка"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Файл"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Формат"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Загальні параметри"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "HTTPS не підтримується"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP адреса джерела"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Версія IP адреси"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Адреса IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 не підтримується"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Адреса IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Інформація"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Інформація"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Інтерфейс"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Директорія для звіту"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Назва"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Мережа"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Ніколи"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Немає даних"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Зауваження"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Пароль"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Перезавантажити"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr ""
+
+#: 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:670
+msgid "Service not installed"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Сервіси"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Штат"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Стан"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Зупинити"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Зупинено"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Невідомо"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Ім'я користувача"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Застереження"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "днів"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "годин"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "хв."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "або"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "секунди"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-ddns/po/vi/ddns.po b/package/luci/applications/luci-app-ddns/po/vi/ddns.po
new file mode 100644 (file)
index 0000000..12b0302
--- /dev/null
@@ -0,0 +1,933 @@
+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: 2024-01-26 16:51+0000\n"
+"Last-Translator: Hứa Đức Quân <huaducquan14@gmail.com>\n"
+"Language-Team: Vietnamese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsddns/vi/>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.4-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "\"../\" không được phép trong đường dẫn vì lý do bảo mật."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "Thêm dịch vụ mới..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "Cài đặt Nâng cao"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "Cho phép IP không công khai"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "Cài đặt cơ bản"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "Ràng buộc mạng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "Không hỗ trợ ràng buộc vào một mạng cụ thể"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"nslookup và wget trên BusyBox không hỗ trợ để chỉ định phiên bản IP để sử "
+"dụng cho việc giao tiếp với nhà cung cấp dịch vụ DDNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"nslookup và hostip trên BusyBox không hỗ trợ để chỉ định cho việc sử dụng "
+"TCP thay vì mặc định là UDP khi yêu cầu máy chủ DNS!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr ""
+"Phiên bản nslookup hiện tại trên BusyBox không xử lý các máy chủ DNS chính "
+"xác!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Đường dẫn Ca Certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr ""
+"Đường dẫn Ca Certs sẽ được sử dụng để tải dữ liệu dịch vụ. Đặt IGNORE để bỏ "
+"qua xác thực chứng chỉ."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "Hủy lệnh"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "Kiểm tra khoảng thời gian"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "Kiểm tra đơn vị"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "Đang kiểm tra hỗ trợ dịch vụ..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "Cấu hình"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "Lỗi cấu hình"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "Tạo dịch vụ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "Cài đặt hiện tại:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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 ""
+"Hiện tại, các cập nhật DDNS không được bắt đầu khi khởi động hoặc sự kiện "
+"giao diện."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr ""
+"Kịch bản cập nhật tùy chỉnh được sử dụng để cập nhật Nhà cung cấp DDNS của "
+"bạn."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "Tùy chỉnh cập nhật - URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "Kịch bản cập nhật tùy chỉnh"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "Tắt tự động khởi động DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "Bật tự động khởi động DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "Nhà cung cấp dịch vụ DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "Dịch vụ DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "Không hỗ trợ yêu cầu DNS qua TCP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "Máy chủ DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "Định dạng ngày tháng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "Xác định trang Web để đọc địa chỉ IP của hệ thống từ."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "Xác định giao diện để đọc địa chỉ IP của hệ thống từ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "Xác định mạng để đọc địa chỉ IP của hệ thống từ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr ""
+"Xác định nguồn để đọc địa chỉ IP của hệ thống từ, sẽ được gửi đến nhà cung "
+"cấp DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "Xác định địa chỉ IP 'IPv4/IPv6' nào được gửi đến nhà cung cấp DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "Thư mục chứa các tệp Log cho mỗi phần đang chạy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr "Thư mục chứa PID và thông tin trạng thái khác cho mỗi phần đang chạy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "Vô hiệu hoá"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "Tên Miền"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "Dynamic DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "Phiên bản Dynamic DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "Chỉnh Sửa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "Kích hoạt giao tiếp an toàn với nhà cung cấp DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "Kích Hoạt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "Lỗi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr ""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "Khoảng thời gian thử lại lỗi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "Mạng sự kiện"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "Ví dụ cho IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "Ví dụ cho IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "Tệp"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "Theo hướng dẫn bạn sẽ tìm thấy trên trang WEB của họ."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "Để xem các mã được hỗ trợ, hãy xem ở đây"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "Bắt buộc Phiên bản IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "Bắt buộc Phiên bản IP không được hỗ trợ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "Khoảng thời gian bắt buộc"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "Bắt buộc sử dụng TCP trên DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "Đơn vị bắt buộc"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "Định dạng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "Định dạng: IP hoặc FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+msgid ""
+"GNU Wget will use the IP of given network, cURL will use the physical "
+"interface."
+msgstr ""
+"GNU Wget sẽ sử dụng IP của mạng đã cho, cURL sẽ sử dụng giao diện vật lý."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:265
+msgid "Global Settings"
+msgstr "Cài đặt chung"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "Cấp quyền tru cập cho phương thức ddns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "Không hỗ trợ HTTPS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr "Tên máy/FQDN để xác nhận, nếu cập nhật IP xảy ra hoặc cần thiết"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "Nguồn địa chỉ IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "Phiên bản địa chỉ IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "Địa chỉ IPv4"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "Địa chỉ IPv6 phải được đặt trong dấu ngoặc vuông"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "Hiện tại hệ thống này không hỗ trợ IPv6 (hoàn toàn)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "Không hỗ trợ IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "Địa chỉ IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr ""
+"Nếu đã cài đặt gói Wget và cURL, Wget sẽ được sử dụng cho giao tiếp theo mặc "
+"định."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "Nếu phần dịch vụ này bị tắt, nó không thể được khởi động."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr "Nếu sử dụng giao tiếp an toàn, bạn nên xác minh chứng chỉ máy chủ!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr ""
+"Trong một số phiên bản, cURL/libcurl trên OpenWrt được biên dịch mà không có "
+"hỗ trợ proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "Thông tin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "Thông Tin"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "Chèn một Kịch bản Cập nhật HOẶC một URL Cập nhật"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"Cài đặt gói 'ca-certificates' hoặc cần bỏ chứng thư bằng tay vào thư mục mặc "
+"định /etc/ssl/certs"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "Cài đặt Dịch vụ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "Giao diện"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "Khoảng thời gian để gửi cập nhật bắt buộc đến Nhà cung cấp DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "Đơn vị khoảng thời gian để kiểm tra IP đã thay đổi"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr ""
+"Đơn vị khoảng thời gian để gửi cập nhật bắt buộc đến Nhà cung cấp DDNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "Cập nhật cuối cùng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "Trình xem Tệp Nhật ký"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "Thư mục nhật ký"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "Độ dài nhật ký"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "Lưu nhật ký vào tệp"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "Log to syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "Tra cứu Tên máy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "Tên"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to select a network to use for "
+"communication."
+msgstr ""
+"Không cài đặt GNU Wget với SSL hoặc cURL để chọn một mạng để sử dụng cho "
+"giao tiếp."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:321
+msgid ""
+"Neither GNU Wget with SSL nor cURL installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"Không cài đặt GNU Wget với SSL hoặc cURL để hỗ trợ cập nhật an toàn qua giao "
+"thức HTTPS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "Không từ giao diện LuCI cũng không từ bảng điều khiển."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "Mạng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "Mạng mà các kịch bản ddns-updater sẽ được khởi động"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "Không bao giờ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "Dịch vụ DDns mới…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "Cập nhật tiếp theo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "Không có dữ liệu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "Không tìm thấy chứng chỉ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "Không có nhật ký"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "Địa chỉ IP không công khai và bị chặn theo mặc định"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "Không Chạy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "Lưu ý"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "Số dòng cuối cùng được lưu trữ trong tệp nhật ký"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "TÙY CHỌN: Bắt buộc sử dụng giao tiếp chỉ với IPv4/IPv6."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr ""
+"TÙY CHỌN: Bắt buộc sử dụng giao thức TCP thay vì UDP mặc định cho yêu cầu "
+"DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "TÙY CHỌN: Mạng để sử dụng cho giao tiếp"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "TÙY CHỌN: Máy chủ Proxy để phát hiện và cập nhật."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr ""
+"TÙY CHỌN: Sử dụng DNS-Server không mặc định để phát hiện 'IP đã đăng ký'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+msgid ""
+"On Error the script will stop execution after the given number of retries."
+msgstr ""
+"Khi xảy ra Lỗi, tập lệnh sẽ dừng thực thi sau một số lần thử nhất định."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:756
+msgid "Optional Encoded Parameter"
+msgstr "Tham số Tùy chọn đã Mã hóa"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "Tham số Tùy chọn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "Tùy chọn: Thay thế [PARAMENC] trong Địa chỉ URL Cập nhật (Mã hóa URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr ""
+"Tùy chọn: Thay thế [PARAMOPT] trong Địa chỉ URL Cập nhật (KHÔNG mã hóa URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "Máy chủ PROXY"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "Mật khẩu"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+msgstr "Đường dẫn đến Chứng chỉ 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 ""
+"Vui lòng làm theo hướng dẫn trên trang chủ của OpenWrt để bật chế độ hỗ trợ "
+"IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "Vui lòng nhấn nút [Đọc]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "Đọc / Đọc lại tệp nhật ký"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "Thật sự chuyển dịch vụ?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "IP Đã Đăng ký"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "Tải lại"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "Tải lại dịch vụ này"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "Thay thế [DOMAIN] trong Địa chỉ URL Cập nhật (Mã hóa URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "Thay thế [PASSWORD] trong Địa chỉ URL Cập nhật (Mã hóa URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "Thay thế [USERNAME] trong Địa chỉ URL Cập nhật (Mã hóa URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "Khởi động lại DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "Đơn vị Thử lại"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "Chạy một lần"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "Đang chạy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "Kịch bản"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "Chọn một dịch vụ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "Dịch vụ không hỗ trợ loại IP này"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "Dịch vụ chưa được cài đặt"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "Các dịch vụ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "URL Tải về Dịch vụ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "Cập nhật cuối cùng danh sách Dịch vụ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr "Thiết lập tham số này thành 0 sẽ bắt buộc tập lệnh chỉ chạy một lần"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "Khởi động DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "Trạng thái"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "Trạng thái"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "Thư mục Trạng thái"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "Dừng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "Dừng DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "Dừng dịch vụ này"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "Đã dừng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "Chuyển dịch vụ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "Thiết lập mặc định là '0' sẽ thử lại vô hạn."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "Khoảng thời gian mà mỗi lần thử lại liên tiếp sẽ bắt đầu."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "Tên dịch vụ đã được sử dụng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "Không có dịch vụ nào được cấu hình."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "Đây là nội dung hiện tại của tệp nhật ký trong %h cho dịch vụ này."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"Đây là mặc định nếu bạn chạy các tập lệnh DDNS bằng chính mình (tức là thông "
+"qua cron với force_interval được đặt thành '0')"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "Điều này sẽ được tự động thiết lập cho giao diện đã chọn"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "Cài đặt hẹn giờ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "URL để phát hiện"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "Không xác định"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "Cập nhật Danh sách Dịch vụ DDns"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "Cập nhật URL được sử dụng để cập nhật Nhà cung cấp DDNS của bạn."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"Url được sử dụng để tải xuống tệp dịch vụ. Mặc định là kho dữ liệu gói "
+"openwrt ddns."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "Sử dụng HTTP Bảo mật"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "Sử dụng cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "Kịch bản xác định người dùng để đọc Địa chỉ IP của hệ thống"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "Tên người dùng"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "Không hỗ trợ sử dụng máy chủ DNS cụ thể"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "Không hỗ trợ giá trị dưới 5 phút == 300 giây"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "Không hỗ trợ giá trị thấp hơn 'Check Interval' trừ '"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "Xác minh"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "Cảnh báo"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "Các đơn vị thời gian nào được sử dụng cho bộ đếm thử lại."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+msgid ""
+"Writes detailed messages to log file. File will be truncated automatically."
+msgstr "Ghi thông điệp chi tiết vào tệp nhật ký. Tệp sẽ tự động bị cắt."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"Ghi thông điệp nhật ký vào syslog. Lỗi nghiêm trọng sẽ luôn được ghi vào "
+"syslog."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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 ""
+"Bạn nên cài đặt gói 'bind-host' hoặc 'knot-host' hoặc 'drill' hoặc 'hostip' "
+"nếu bạn cần chỉ định máy chủ DNS để phát hiện Địa chỉ IP đã đăng ký của bạn."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"Bạn nên cài đặt gói 'bind-host' hoặc 'knot-host' hoặc 'drill' cho các yêu "
+"cầu DNS."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "Bạn nên cài đặt gói 'wget' hoặc 'curl' hoặc 'uclient-fetch'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"Bạn nên cài đặt gói 'wget' hoặc 'curl' hoặc 'uclient-fetch' với gói "
+"'libustream-*ssl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "Bạn nên cài đặt gói 'wget' hoặc 'curl'."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr "Bạn nên cài đặt gói 'wget' hoặc 'uclient-fetch' hoặc thay thế libcurl."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr ""
+"cURL đã được cài đặt, nhưng libcurl đã được biên dịch mà không có hỗ trợ "
+"proxy."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL không có Hỗ trợ Proxy"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "tùy chỉnh"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "ngày"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "thư mục hoặc đường dẫn/tệp"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "giờ"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "phút"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "hoặc"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "hoặc cập nhật hệ thống của bạn lên phiên bản OpenWrt mới nhất"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "Giây"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "để chạy HTTPS mà không xác minh chứng chỉ máy chủ (không an toàn)"
diff --git a/package/luci/applications/luci-app-ddns/po/zh_Hans/ddns.po b/package/luci/applications/luci-app-ddns/po/zh_Hans/ddns.po
new file mode 100644 (file)
index 0000000..bae86f6
--- /dev/null
@@ -0,0 +1,898 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017, 2018.
+#
+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: 2024-02-22 18:08+0000\n"
+"Last-Translator: try496 <pinghejk@gmail.com>\n"
+"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsddns/zh_Hans/>\n"
+"Language: zh_Hans\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "基于安全原因路径中不允许含有 \"../\" 。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "添加新服务..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "高级设置"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "允许非公网 IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "基本设置"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "使用的接口"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "不支持绑定到一个指定的网络"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr "BusyBox 的 nslookup 和 wget 不支持指定 IP 协议版本与 DDNS 供应商通讯!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"向 DNS 服务器查询时,BusyBox 的 nslookup 和 hostip 不支持使用 TCP ,而是使用"
+"默认的 UDP!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr "当前编译版本中的 BusyBox 的 nslookup 不能正确处理给定的 DNS 服务器!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "Ca 证书路径"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr "用于下载服务数据的 Ca 证书路径。设置 IGNORE 将跳过证书验证。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "取消"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "检查间隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "检查时间单位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "正在检查服务支持..."
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "配置"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "配置错误"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "创建服务"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "当前配置:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr "用来更新 DDNS 的自定义脚本。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "自定义更新 URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "自定义更新脚本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS 已禁止自动运行"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS 已开启自动运行"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS 服务提供商"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "动态DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "动态DNS 服务项"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "不支持使用 TCP 进行 DNS 解析"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS-服务器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "日期格式"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "定义用于读取系统IP地址的网页。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "设定用于读取系统 IP 地址的接口"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "设定用于读取系统 IP 地址的网络"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr "设定从哪里读取系统 IP 地址,这个地址会发送到 DDNS 提供商"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "设定哪一个 IP 地址(IPv4 或 IPv6)会被发送给 DDNS 提供商"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "用于存放各个项目运行日志的的目录。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr "用于存放各个项目运行时的PID和其他状态信息的目录。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "已禁用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "域名"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "动态 DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "动态 DNS 版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "编辑"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "与 DDNS 提供商通信时使用安全连接"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "已启用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "错误"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "出错时最大重试次数"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "错误重试间隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "事件网络"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "IPv4 的例子"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "IPv6 的例子"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "文件"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "按照网页上的说明操作。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "查看这里获取支持的编码"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "强制设定 IP 版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "不支持强制设定 IP 版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "强制更新的周期"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "强制使用 TCP 进行 DNS 查询"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "强制更新单位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "格式"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "格式:IP 或者 FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+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 "全局设置"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "授予访问 DDNS 程序的权限"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "不支持 HTTPS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr "IP发生更新或需要更新时,用于验证的 主机名 / FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP 地址来源"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP 地址版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4 地址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "IPv6 地址必须填写在中括号(\"[ ]\")内"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "该系统当前不(完全)支持IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "IPv6 不被支持"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6 地址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr "如果 Wget 和 cURL 包都安装了,默认会用 Wget 来通信。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "如果禁用此服务项,则不会启动。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr "如果使用安全通信,您应该验证服务器证书!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr "OpenWrt 中某些 cURL/libcurl 版本编译时没有启用代理服务器支持。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "信息"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "信息"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "插入更新脚本或更新 URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"手动将“ca-certificates”包或需要的证书安装到 /etc/ssl/certs 的默认目录中"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "安装服务"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "接口"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "强制向 DDNS 提供商进行更新的间隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "检查 IP 变更间隔的单位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr "强制发送更新到 DDNS 提供商的间隔单位。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "上次更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "日志查看器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "日志目录"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "日志长度"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "把日志记录到文件"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "记录日志到 syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "查询主机名"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "名称"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL 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 installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"包含 SSL 支持的 GNU Wget 或者 cURL 均未安装,无法通过 HTTPS 协议进行安全的更"
+"新。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "无论是从 LuCI 界面还是从控制台。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "网络"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "DDNS 更新脚本将会运行于该网络"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "永不"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "新建 DDNS 服务项…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "下次更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "无数据"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "找不到证书"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "不记录"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "非公网 IP 以及默认被屏蔽的 IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "未在运行"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "注意"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "日志文件中的最后几行"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "可选:强制仅使用 IPv4/IPv6 通信。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr "可选:强制使用 TCP 而非 UDP 请求 DNS。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "可选:用于通信的网络"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "可选:用于检测以及更新的代理服务器。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr "可选:使用非默认 DNS 服务器检测\"已注册的 IP 地址\"。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr "可选编码参数"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "可选参数"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "可选:替换更新 URL(已编码 URL)中的 [PARAMENC]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "可选:替换更新 URL(未编码 URL)中的 [PARAMOPT]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "代理服务器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "密码"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+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 "请按照OpenWrt主页上的说明启用IPv6支持"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "请按下 [读取] 按钮"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "读取/重新读取 日志文件"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "确认切换服务?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "已注册的 IP 地址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "重新加载"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "重启这个服务项"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "替换更新 URL 中的 [DOMAIN] (已编码 URL)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "替换更新 URL(已编码 URL)中的 [PASSWORD]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "替换更新 URL(已编码 URL)中的 [USERNAME]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "重启 DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "重试时间单位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "运行一次"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "运行中"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "脚本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "选择服务"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "服务不支持此 ip 类型"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "服务未安装"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "服务"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "服务下载网址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "更新最新服务列表"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr "将此参数设置为 0 将强制脚本仅运行一次"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "运行 DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "状态"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "状态"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "状态目录"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "停止"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "停止 DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "停止这个服务"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "已停止"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "切换服务"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "默认设置“0”将无限重试。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "发起连续重试之间相隔的时长。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "这个服务项名称已经被使用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "没有已经配置好的服务项。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "这是此服务 %h 中日志文件的当前内容。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"如果您自己运行 DDNS 脚本(即使用 cron 并将强制更新周期设置为\"0\"),则这是默"
+"认值"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "这将自动设置为选定的接口"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "计时器设定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "用于检测的 URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "未知"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "更新 DDNS 服务列表"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "用于向 DDNS 提供商进行更新的 更新URL。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr "用于下载服务文件的 Url 。默认情况下是主 openwrt ddns 包仓库。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "使用 HTTPS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "使用 cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "使用设定的脚本来读取系统 IP 地址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "用户名"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "不支持使用特定的 DNS 服务器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "不支持小于5分钟== 300秒的值"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "不支持除低于“检查间隔”的值,除了“ 0”"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "验证"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "警告"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "重试计数器使用的时间单位。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr "把日志写入syslog。无论是否启用这项,严重错误始终被写入syslog。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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”或“drill”或“hostip”软件包。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr "您应该为 DNS 请求安装“bind-host”或“knot-host”或“drill”软件包。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "您应该安装“wget”或“curl”或“uclient-fetch”软件包。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr "您应该安装“wget”或“curl”或“uclient-fetch”,及“libustream-*ssl”软件包。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "您应该安装“wget”或“curl”软件包。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr "您应该安装“wget”或“uclient-fetch”软件包,或替换 libcurl。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL 已经安装,但是 libcurl 编译时没有启用代理支持。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL 没有包含代理支持"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "自定义"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "天"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "目录或者到文件的路径"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "小时"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "分钟"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "或者"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "或将系统更新到最新的 OpenWrt 版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "秒"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "使用 HTTPS 但不检查服务器证书(不安全)"
diff --git a/package/luci/applications/luci-app-ddns/po/zh_Hant/ddns.po b/package/luci/applications/luci-app-ddns/po/zh_Hant/ddns.po
new file mode 100644 (file)
index 0000000..fe7e2df
--- /dev/null
@@ -0,0 +1,904 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017, 2018.
+#
+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: 2023-12-20 18:08+0000\n"
+"Last-Translator: Yuan Law <traverslombard@outlook.com>\n"
+"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsddns/zh_Hant/>\n"
+"Language: zh_Hant\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.3\n"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:432
+msgid "\"../\" not allowed in path for Security Reason."
+msgstr "基於安全原因,不容許在路徑中含有 \"../\"。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:464
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:534
+msgid "Add new services..."
+msgstr "加入新服務…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:608
+msgid "Advanced Settings"
+msgstr "進階設定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:401
+msgid "Allow non-public IP's"
+msgstr "容許非公共 IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:607
+msgid "Basic Settings"
+msgstr "基本設定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:886
+msgid "Bind Network"
+msgstr "繫結網路"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:332
+msgid "Binding to a specific network not supported"
+msgstr "不支援繫結到特定的網路"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:359
+msgid ""
+"BusyBox's nslookup and Wget do not support to specify the IP version to use "
+"for communication with DDNS Provider!"
+msgstr ""
+"BusyBox 的 nslookup 和 Wget 不支援使用特定的 IP 版本與 DDNS 提供者通信!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:370
+msgid ""
+"BusyBox's nslookup and hostip do not support to specify to use TCP instead "
+"of default UDP when requesting DNS server!"
+msgstr ""
+"當請求 DNS 伺服器時,BusyBox 的 nslookup 和 hostip 只支援預設的 UDP 通信,無"
+"法規定使用 TCP !"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:381
+msgid ""
+"BusyBox's nslookup in the current compiled version does not handle given DNS "
+"Servers correctly!"
+msgstr "現行編譯版本中 BusyBox 的 nslookup 無法正確處理給定的 DNS 伺服器!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:452
+msgid "Ca Certs path"
+msgstr "CA 憑證路徑"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:453
+msgid ""
+"Ca Certs path that will be used to download services data. Set IGNORE to "
+"skip certificate validation."
+msgstr "下載服務資料使用的 CA 憑證路徑;設定 IGNORE 來略過憑證驗證。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:540
+msgid "Cancel"
+msgstr "取消"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:964
+msgid "Check Interval"
+msgstr "檢查間隔時間"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:979
+msgid "Check Unit"
+msgstr "檢查時間單位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:525
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:658
+msgid "Checking the service support..."
+msgstr "檢查服務支援中…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:27
+msgid "Configuration"
+msgstr "組態"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:214
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1124
+msgid "Configuration Error"
+msgstr "組態錯誤"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:544
+msgid "Create service"
+msgstr "建立服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:414
+msgid "Current setting:"
+msgstr "現行設定:"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:198
+#: 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:721
+msgid "Custom update script to be used for updating your DDNS Provider."
+msgstr "使用自訂更新指令碼來更新您的 DDNS 提供者。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:701
+msgid "Custom update-URL"
+msgstr "自訂更新 URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:720
+msgid "Custom update-script"
+msgstr "自訂更新指令碼"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:196
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart disabled"
+msgstr "DDNS 自動啟動已停用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:195
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:279
+msgid "DDNS Autostart enabled"
+msgstr "DDNS 自動啟動已啟用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:520
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:641
+msgid "DDNS Service provider"
+msgstr "DDNS 服務提供者"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:284
+msgid "DDns"
+msgstr "DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:585
+msgid "DDns Service"
+msgstr "DDNS 服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:369
+msgid "DNS requests via TCP not supported"
+msgstr "不支援透過 TCP 處理 DNS 請求"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:907
+msgid "DNS-Server"
+msgstr "DNS 伺服器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:410
+msgid "Date format"
+msgstr "日期格式"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:836
+msgid "Defines the Web page to read systems IP-Address from."
+msgstr "定義要從中讀取系統 IP 地址的網頁。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:846
+msgid "Defines the interface to read systems IP-Address from"
+msgstr "定義介面來讀取系統 IP 位址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:828
+msgid "Defines the network to read systems IP-Address from"
+msgstr "定義網路來讀取系統 IP 位址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:790
+msgid ""
+"Defines the source to read systems IP-Address from, that will be send to the "
+"DDNS provider"
+msgstr "定義要從中讀取系統 IP 位址的源,該源將發送到 DDNS 提供商"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:512
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:631
+msgid "Defines which IP address 'IPv4/IPv6' is send to the DDNS provider"
+msgstr "定義要被送至 DDNS 提供者的 \"IPv4/IPv6\" 位址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:426
+msgid "Directory contains Log files for each running section."
+msgstr "包含每個運行部分的日誌檔目錄。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:420
+msgid ""
+"Directory contains PID and other status information for each running section."
+msgstr "包含每個運行區段的 PID 和其他狀態資訊目錄。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:17
+msgid "Disabled"
+msgstr "已停用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:737
+msgid "Domain"
+msgstr "網域名稱"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:260
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:7
+#: applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json:3
+msgid "Dynamic DNS"
+msgstr "動態 DNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:267
+msgid "Dynamic DNS Version"
+msgstr "動態 DNS 版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:553
+msgid "Edit"
+msgstr "編輯"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:770
+msgid "Enable secure communication with DDNS provider"
+msgstr "啟用與 DDNS 提供者的安全通訊"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:613
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1132
+msgid "Enabled"
+msgstr "啟用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:949
+msgid "Error"
+msgstr "錯誤"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1024
+msgid "Error Max Retry Counter"
+msgstr "錯誤重試次數"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1034
+msgid "Error Retry Interval"
+msgstr "錯誤重試間隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:860
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:869
+msgid "Event Network"
+msgstr "事件網路"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:838
+msgid "Example for IPv4"
+msgstr "IPv4 實例"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:840
+msgid "Example for IPv6"
+msgstr "IPv6 實例"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:958
+msgid "File"
+msgstr "檔案"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:704
+msgid "Follow instructions you will find on their WEB page."
+msgstr "請跟隨您在網頁上找到的說明進行操作。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:412
+msgid "For supported codes look here"
+msgstr "要獲取支援的代碼,請檢視這裡"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:898
+msgid "Force IP Version"
+msgstr "強制設定 IP 版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:358
+msgid "Force IP Version not supported"
+msgstr "不支援強制設定 IP 版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:988
+msgid "Force Interval"
+msgstr "強制更新間隔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:919
+msgid "Force TCP on DNS"
+msgstr "強制使用 TCP 進行 DNS 查詢"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1014
+msgid "Force Unit"
+msgstr "強制時間單位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:931
+msgid "Format"
+msgstr "格式"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:910
+msgid "Format: IP or FQDN"
+msgstr "格式:IP 或 FQDN"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:337
+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 "全域設定"
+
+#: applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json:3
+msgid "Grant access to ddns procedures"
+msgstr "給予存取 DDNS 程序的權限"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:320
+msgid "HTTPS not supported"
+msgstr "不支援 HTTPS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:623
+msgid "Hostname/FQDN to validate, if IP update happen or necessary"
+msgstr "使用「主機名稱/FQDN」驗證(如果發生 IP 更新或有必要時)"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:789
+msgid "IP address source"
+msgstr "IP 位址來源"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:511
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:630
+msgid "IP address version"
+msgstr "IP 位址版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:514
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:635
+msgid "IPv4-Address"
+msgstr "IPv4 位址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:933
+msgid "IPv6 address must be given in square brackets"
+msgstr "IPv6 位址必須被中括號包圍起來"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:311
+msgid "IPv6 is currently not (fully) supported by this system"
+msgstr "該系統目前尚不(完全)支援 IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:310
+msgid "IPv6 not supported"
+msgstr "不支援 IPv6"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:516
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:637
+msgid "IPv6-Address"
+msgstr "IPv6 位址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:445
+msgid ""
+"If Wget and cURL package are installed, Wget is used for communication by "
+"default."
+msgstr "如果同時安裝了 Wget 和 cURL 套件,則預設使用 Wget 來通信。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:614
+msgid "If this service section is disabled it could not be started."
+msgstr "如果設定為停用,該服務部分將不會啟動。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:393
+msgid "If using secure communication you should verify server certificates!"
+msgstr "如果使用安全通訊,您應該驗證伺服器憑證!"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:325
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:339
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:351
+msgid ""
+"In some versions cURL/libcurl in OpenWrt is compiled without proxy support."
+msgstr "OpenWrt 中的某些 \"cURL/libcurl\" 編譯版本不支援代理伺服器。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:946
+msgid "Info"
+msgstr "資訊"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:264
+msgid "Information"
+msgstr "資訊"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:713
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:730
+msgid "Insert a Update Script OR a Update URL"
+msgstr "插入更新指令碼或更新 URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:395
+msgid ""
+"Install 'ca-certificates' package or needed certificates by hand into /etc/"
+"ssl/certs default directory"
+msgstr ""
+"手動安裝 \"ca-certificates\" 套件或所需憑證到預設目錄 \"/etc/ssl/certs\""
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:671
+msgid "Install Service"
+msgstr "安裝服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:795
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:845
+msgid "Interface"
+msgstr "介面"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:989
+msgid "Interval to force updates send to DDNS Provider"
+msgstr "強制將更新發送至 DDNS 提供者的間隔時間"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:980
+msgid "Interval unit to check for changed IP"
+msgstr "檢查 IP 變更的間隔時間單位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1015
+msgid "Interval unit to force updates sent to DDNS Provider."
+msgstr "強制將更新發送至 DDNS 提供者的間隔時間單位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+msgid "Last Update"
+msgstr "最後更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:610
+msgid "Log File Viewer"
+msgstr "日誌檔檢視器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:425
+msgid "Log directory"
+msgstr "日誌目錄"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:437
+msgid "Log length"
+msgstr "日誌長度"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:952
+msgid "Log to file"
+msgstr "將日誌寫入檔案"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:940
+msgid "Log to syslog"
+msgstr "將日誌寫入 syslog"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:622
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:29
+msgid "Lookup Hostname"
+msgstr "查詢主機名稱"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:499
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1114
+msgid "Name"
+msgstr "名稱"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:333
+msgid ""
+"Neither GNU Wget with SSL nor cURL 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 installed to support secure updates via "
+"HTTPS protocol."
+msgstr ""
+"包含 SSL 支援的 GNU Wget 或者 cURL 均未安裝,無法通過 HTTPS 協議進行安全的更"
+"新。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:616
+msgid "Neither from LuCI interface nor from console."
+msgstr "無論是從 LuCI 介面抑或從主控台。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:793
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:827
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:31
+msgid "Network"
+msgstr "網路"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:861
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:870
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:889
+msgid "Network on which the ddns-updater scripts will be started"
+msgstr "DDNS 更新指令碼將會運行於該網路"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:216
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+msgid "Never"
+msgstr "永不"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:502
+msgid "New DDns Service…"
+msgstr "新增 DDNS 服務…"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1137
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:28
+msgid "Next Update"
+msgstr "下次更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:215
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1125
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:40
+msgid "No Data"
+msgstr "無資料"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:392
+msgid "No certificates found"
+msgstr "找不到憑證"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:945
+msgid "No logging"
+msgstr "無日誌"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:402
+msgid "Non-public and by default blocked IP's"
+msgstr "非公共和預設受阻的 IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:218
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1106
+msgid "Not Running"
+msgstr "未運行"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:947
+msgid "Notice"
+msgstr "注意"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:438
+msgid "Number of last lines stored in log files"
+msgstr "日誌檔中儲存的最後行數"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:899
+msgid "OPTIONAL: Force the usage of pure IPv4/IPv6 only communication."
+msgstr "可選:強制僅使用純 IPv4/IPv6 通訊。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:920
+msgid "OPTIONAL: Force the use of TCP instead of default UDP on DNS requests."
+msgstr "可選:強制使用 TCP 而非 UDP 處理 DNS 請求。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:887
+msgid "OPTIONAL: Network to use for communication"
+msgstr "可選:用於通訊的網路"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:929
+msgid "OPTIONAL: Proxy-Server for detection and updates."
+msgstr "可選:用於檢測和更新的代理伺服器。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:908
+msgid "OPTIONAL: Use non-default DNS-Server to detect 'Registered IP'."
+msgstr "可選:使用非預設 DNS 伺服器來對「已註冊的 IP」檢測。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1025
+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:756
+msgid "Optional Encoded Parameter"
+msgstr "可選編碼參數"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:762
+msgid "Optional Parameter"
+msgstr "可選參數"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:757
+msgid "Optional: Replaces [PARAMENC] in Update-URL (URL-encoded)"
+msgstr "可選:替換更新 URL(已編碼 URL)中的 [PARAMENC]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:763
+msgid "Optional: Replaces [PARAMOPT] in Update-URL (NOT URL-encoded)"
+msgstr "可選:替換更新 URL(未編碼 URL)中的 [PARAMENC]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:928
+msgid "PROXY-Server"
+msgstr "代理伺服器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:749
+msgid "Password"
+msgstr "密碼"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:775
+msgid "Path to CA-Certificate"
+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 "請跟隨 OpenWrt 首頁上的說明來啟用 IPv6 支援"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1071
+msgid "Please press [Read] button"
+msgstr "請點按[讀取]按鈕"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1054
+msgid "Read / Reread log file"
+msgstr "讀取/重讀日誌檔"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:686
+msgid "Really switch service?"
+msgstr "真的要更換服務嗎?"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1120
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:30
+msgid "Registered IP"
+msgstr "已註冊 IP"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:575
+msgid "Reload"
+msgstr "重新載入"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:558
+msgid "Reload this service"
+msgstr "重新載入此服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:738
+msgid "Replaces [DOMAIN] in Update-URL (URL-encoded)"
+msgstr "替換更新 URL(已編碼 URL)中的 [DOMAIN]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:750
+msgid "Replaces [PASSWORD] in Update-URL (URL-encoded)"
+msgstr "替換更新 URL(已編碼 URL)中的 [PASSWORD]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:744
+msgid "Replaces [USERNAME] in Update-URL (URL-encoded)"
+msgstr "替換更新 URL(已編碼 URL)中的 [USERNAME]"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:290
+msgid "Restart DDns"
+msgstr "重新啟動 DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1042
+msgid "Retry Unit"
+msgstr "重試時間單位"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:16
+msgid "Run once"
+msgstr "運行一次"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:229
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1109
+msgid "Running"
+msgstr "執行中"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:796
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:853
+msgid "Script"
+msgstr "指令碼"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:524
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:657
+msgid "Select a service"
+msgstr "選擇一項服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:526
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:660
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:680
+msgid "Service doesn't support this ip type"
+msgstr "服務不支援此 IP 類型"
+
+#: 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:670
+msgid "Service not installed"
+msgstr "未安裝服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:461
+msgid "Services"
+msgstr "服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:456
+msgid "Services URL Download"
+msgstr "服務 URL 下載"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:294
+msgid "Services list last update"
+msgstr "服務列表最後更新"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:991
+msgid "Setting this parameter to 0 will force the script to only run once"
+msgstr "設定此參數為「0」,將強制指令碼只執行一次"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Start DDNS"
+msgstr "啟動 DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:272
+msgid "State"
+msgstr "狀態"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1103
+msgid "Status"
+msgstr "狀態"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:419
+msgid "Status directory"
+msgstr "狀態目錄"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:574
+msgid "Stop"
+msgstr "停止"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:190
+msgid "Stop DDNS"
+msgstr "停止 DDNS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:563
+msgid "Stop this service"
+msgstr "停止此服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:18
+msgid "Stopped"
+msgstr "已停止"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:687
+msgid "Switch service"
+msgstr "切換服務"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1027
+msgid "The default setting of '0' will retry infinitely."
+msgstr "如果設定為預設值「0」,將無限重試。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1035
+msgid "The interval between which each successive retry commences."
+msgstr "當出錯時,指令碼將在給定的重試次數執行完成後退出"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:505
+msgid "The service name is already used"
+msgstr "服務名稱已被使用"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:43
+msgid "There is no service configured."
+msgstr "尚未配置任何服務。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1070
+msgid "This is the current content of the log file in %h for this service."
+msgstr "這是此服務 %h 中日誌檔案的目前內容。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:199
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:277
+msgid ""
+"This is the default if you run DDNS scripts by yourself (i.e. via cron with "
+"force_interval set to '0')"
+msgstr ""
+"如果您要透過 Cron 執行 DDNS 指令碼,請設定 force_interval 為預設值「0」"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:876
+msgid "This will be autoset to the selected interface"
+msgstr "這將自動設定到被選介面"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:609
+msgid "Timer Settings"
+msgstr "計時器設定"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:794
+msgid "URL"
+msgstr "URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:835
+msgid "URL to detect"
+msgstr "用於檢測的 URL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:217
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1141
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/status/include/70_ddns.js:38
+msgid "Unknown"
+msgstr "未知"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:301
+msgid "Update DDns Services List"
+msgstr "更新 DDNS 服務列表"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:702
+msgid "Update URL to be used for updating your DDNS Provider."
+msgstr "使用更新 URL 來更新您的 DDNS 提供者。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:457
+msgid ""
+"Url used to download services file. By default is the master openwrt ddns "
+"package repo."
+msgstr ""
+"下載服務檔使用的 URL,預設為 OpenWrt 儲存庫中 master 分支下的 DDNS 套件。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:769
+msgid "Use HTTP Secure"
+msgstr "使用 HTTPS"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:444
+msgid "Use cURL"
+msgstr "使用 cURL"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:854
+msgid "User defined script to read systems IP-Address"
+msgstr "使用自定指令碼來讀取系統 IP 位址"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:743
+msgid "Username"
+msgstr "用戶名稱"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:380
+msgid "Using specific DNS Server not supported"
+msgstr "不支援使用特定的 DNS 伺服器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:973
+msgid "Values below 5 minutes == 300 seconds are not supported"
+msgstr "不支援 5分鐘(300秒)以下的值"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1008
+msgid "Values lower 'Check Interval' except '0' are not supported"
+msgstr "除「0」之外,不支援比「檢查間隔時間」低的值"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:15
+msgid "Verify"
+msgstr "驗證"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:948
+msgid "Warning"
+msgstr "警告"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1043
+msgid "Which time units to use for retry counters."
+msgstr "當出錯時,指令碼將在給定時間後重試失敗的操作"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:957
+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:941
+msgid ""
+"Writes log messages to syslog. Critical Errors will always be written to "
+"syslog."
+msgstr ""
+"將日誌訊息寫入 syslog(系統日誌);無論您選擇與否,關鍵錯誤都會寫入 syslog。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:384
+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/"
+"drill/hostip\" 套件中的任意一個。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:373
+msgid ""
+"You should install 'bind-host' or 'knot-host' or 'drill' package for DNS "
+"requests."
+msgstr ""
+"如果要處理 DNS 請求,您應該安裝 \"bind-host/knot-host/drill\" 套件中的任意一"
+"個。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:361
+msgid "You should install 'wget' or 'curl' or 'uclient-fetch' package."
+msgstr "您應該安裝 \"Wget/cURL/uclient-fetch\" 套件中的任意一個。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:323
+msgid ""
+"You should install 'wget' or 'curl' or 'uclient-fetch' with 'libustream-"
+"*ssl' package."
+msgstr ""
+"您應該安裝 \"Wget/cURL/uclient-fetch\" 套件中的任意一個,以及 \"libustream-"
+"*ssl\" 套件。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:335
+msgid "You should install 'wget' or 'curl' package."
+msgstr "您應該安裝 \"Wget/cURL\" 套件中的任意一個。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:349
+msgid ""
+"You should install 'wget' or 'uclient-fetch' package or replace libcurl."
+msgstr "您應該安裝 \"Wget/uclient-fetch\" 套件中的任意一個,或者替換 libcurl。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:347
+msgid "cURL is installed, but libcurl was compiled without proxy support."
+msgstr "cURL 已經安裝,但編譯的 libcurl 不支援代理伺服器。"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:346
+msgid "cURL without Proxy Support"
+msgstr "cURL 不支援代理伺服器"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:521
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:643
+msgid "custom"
+msgstr "自訂"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1021
+msgid "days"
+msgstr "天"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:776
+msgid "directory or path/file"
+msgstr "目錄抑或檔案路徑"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:985
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1020
+msgid "hours"
+msgstr "小時"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:984
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1019
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1048
+msgid "minutes"
+msgstr "分鐘"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:778
+msgid "or"
+msgstr "或"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:313
+msgid "or update your system to the latest OpenWrt Release"
+msgstr "或將您的系統更新到 OpenWrt 最新版本"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:983
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:1047
+msgid "seconds"
+msgstr "秒"
+
+#: applications/luci-app-ddns/htdocs/luci-static/resources/view/ddns/overview.js:780
+msgid "to run HTTPS without verification of server certificates (insecure)"
+msgstr "使用 HTTPS 但不檢查伺服器憑證 (不安全)"
diff --git a/package/luci/applications/luci-app-ddns/root/etc/uci-defaults/40_luci-ddns b/package/luci/applications/luci-app-ddns/root/etc/uci-defaults/40_luci-ddns
new file mode 100755 (executable)
index 0000000..9923e86
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# no longer needed for "Save and Apply" to restart ddns
+uci -q batch <<-EOF >/dev/null
+       delete ucitrack.@ddns[-1]
+       commit ucitrack
+EOF
+
+return 0
diff --git a/package/luci/applications/luci-app-ddns/root/usr/libexec/rpcd/luci.ddns b/package/luci/applications/luci-app-ddns/root/usr/libexec/rpcd/luci.ddns
new file mode 100755 (executable)
index 0000000..b2e60cb
--- /dev/null
@@ -0,0 +1,346 @@
+#!/usr/bin/env lua
+
+local json = require "luci.jsonc"
+local nixio = require "nixio"
+local fs   = require "nixio.fs"
+local UCI = require "luci.model.uci"
+local sys  = require "luci.sys"
+local util = require "luci.util"
+
+local ddns_package_path = "/usr/share/ddns"
+local luci_helper = "/usr/lib/ddns/dynamic_dns_lucihelper.sh"
+local srv_name    = "ddns-scripts"
+
+-- convert epoch date to given format
+local function epoch2date(epoch, format)
+       if not format or #format < 2 then
+               local uci = UCI.cursor()
+               format    = uci:get("ddns", "global", "ddns_dateformat") or "%F %R"
+               uci:unload("ddns")
+       end
+       format = format:gsub("%%n", "<br />")   -- replace newline
+       format = format:gsub("%%t", "    ")     -- replace tab
+       return os.date(format, epoch)
+end
+
+-- function to calculate seconds from given interval and unit
+local function calc_seconds(interval, unit)
+       if not tonumber(interval) then
+               return nil
+       elseif unit == "days" then
+               return (tonumber(interval) * 86400)     -- 60 sec * 60 min * 24 h
+       elseif unit == "hours" then
+               return (tonumber(interval) * 3600)      -- 60 sec * 60 min
+       elseif unit == "minutes" then
+               return (tonumber(interval) * 60)        -- 60 sec
+       elseif unit == "seconds" then
+               return tonumber(interval)
+       else
+               return nil
+       end
+end
+
+local methods = {
+       get_services_log = {
+               args = { service_name = "service_name" },
+               call = function(args)
+                       local result = "File not found or empty"
+                       local uci = UCI.cursor()
+
+                       local dirlog = uci:get('ddns', 'global', 'ddns_logdir') or "/var/log/ddns"
+
+                       -- Fallback to default logdir with unsecure path
+                       if dirlog:match('%.%.%/') then dirlog = "/var/log/ddns" end
+
+                       if args and args.service_name and fs.access("%s/%s.log" % { dirlog, args.service_name }) then
+                               result = fs.readfile("%s/%s.log" % { dirlog, args.service_name })
+                       end
+
+                       uci.unload()
+
+                       return { result = result }
+               end
+       },
+       get_services_status = {
+               call = function()
+                       local uci = UCI.cursor()
+
+                       local rundir = uci:get("ddns", "global", "ddns_rundir") or "/var/run/ddns"
+                       local date_format = uci:get("ddns", "global", "ddns_dateformat")
+                       local res = {}
+
+                       uci:foreach("ddns", "service", function (s)
+                               local ip, last_update, next_update
+                               local section   = s[".name"]
+                               if fs.access("%s/%s.ip" % { rundir, section }) then
+                                       ip = fs.readfile("%s/%s.ip" % { rundir, section })
+                               else
+                                       local dnsserver = s["dns_server"] or ""
+                                       local force_ipversion = tonumber(s["force_ipversion"] or 0)
+                                       local force_dnstcp = tonumber(s["force_dnstcp"] or 0)
+                                       local is_glue = tonumber(s["is_glue"] or 0)
+                                       local command = { luci_helper , [[ -]] }
+                                       local lookup_host = s["lookup_host"] or "_nolookup_"
+
+                                       if (use_ipv6 == 1) then command[#command+1] = [[6]] end
+                                       if (force_ipversion == 1) then command[#command+1] = [[f]] end
+                                       if (force_dnstcp == 1) then command[#command+1] = [[t]] end
+                                       if (is_glue == 1) then command[#command+1] = [[g]] end
+                                       command[#command+1] = [[l ]]
+                                       command[#command+1] = lookup_host
+                                       command[#command+1] = [[ -S ]]
+                                       command[#command+1] = section
+                                       if (#dnsserver > 0) then command[#command+1] = [[ -d ]] .. dnsserver end
+                                       command[#command+1] = [[ -- get_registered_ip]]
+                                       line = util.exec(table.concat(command))
+                               end
+
+                               local last_update = tonumber(fs.readfile("%s/%s.update" % { rundir, section } ) or 0)
+                               local next_update, converted_last_update
+                               local pid  = tonumber(fs.readfile("%s/%s.pid" % { rundir, section } ) or 0)
+
+                               if pid > 0 and not nixio.kill(pid, 0) then
+                                       pid = 0
+                               end
+
+                               local uptime   = sys.uptime()
+
+                               local force_seconds = calc_seconds(
+                                       tonumber(s["force_interval"]) or 72,
+                                       s["force_unit"] or "hours" )
+
+                               local check_seconds = calc_seconds(
+                                       tonumber(s["check_interval"]) or 10,
+                                       s["check_unit"] or "minutes" )
+
+                               if last_update > 0 then
+                                       local epoch = os.time() - uptime + last_update
+                                       -- use linux date to convert epoch
+                                       converted_last_update = epoch2date(epoch,date_format)
+                                       next_update = epoch2date(epoch + force_seconds + check_seconds)
+                               end
+
+                               if pid > 0 and ( last_update + force_seconds + check_seconds - uptime ) <= 0 then
+                                       next_update = "Verify"
+
+                               -- run once
+                               elseif force_seconds == 0 then
+                                       next_update = "Run once"
+
+                               -- no process running and NOT enabled
+                               elseif pid == 0 and s['enabled'] == '0' then
+                                       next_update  = "Disabled"
+
+                               -- no process running and enabled
+                               elseif pid == 0 and s['enabled'] ~= '0' then
+                                       next_update = "Stopped"
+                               end
+
+                               res[section] = {
+                                       ip = ip and ip:gsub("\n","") or nil,
+                                       last_update = last_update ~= 0 and converted_last_update or nil,
+                                       next_update = next_update or nil,
+                                       pid = pid or nil,
+                               } 
+                       end
+                       )
+
+                       uci:unload("ddns")
+
+                       return res
+
+               end
+       },
+       get_ddns_state = {
+               call = function()
+                       local uci = UCI.cursor()
+                       local dateformat = uci:get("ddns", "global", "ddns_dateformat") or "%F %R"
+                       local services_mtime = fs.stat(ddns_package_path .. "/list", 'mtime')
+                       uci:unload("ddns")
+                       local res = {}
+                       local ver
+
+                       local ok, ctrl = pcall(io.lines, "/usr/lib/opkg/info/%s.control" % srv_name)
+                       if ok then
+                               for line in ctrl do
+                                       ver = line:match("^Version: (.+)$")
+
+                                       if ver then
+                                               break
+                                       end
+                               end
+                       end
+
+                       ver = ver or util.trim(util.exec("%s -V | awk {'print $2'}" % luci_helper))
+
+                       res['_version'] = ver and #ver > 0 and ver or nil
+                       res['_enabled'] = sys.init.enabled("ddns")
+                       res['_curr_dateformat'] = os.date(dateformat)
+                       res['_services_list'] = services_mtime and os.date(dateformat, services_mtime) or 'NO_LIST'
+
+                       return res
+               end
+       },
+       get_env = {
+               call = function()
+                       local res = {}
+                       local cache = {}
+
+                       local function has_wget()
+                               return (sys.call( [[command -v wget >/dev/null 2>&1]] ) == 0)
+                       end
+
+                       local function has_wgetssl()
+                               if cache['has_wgetssl'] then return cache['has_wgetssl'] end
+                               local res = has_wget() and (sys.call( [[wget --version | grep -qF +https >/dev/null 2>&1]] ) == 0)
+                               cache['has_wgetssl'] = res
+                               return res
+                       end
+
+                       local function has_curlssl()
+                               return (sys.call( [[$(command -v curl) -V 2>&1 | grep -qF "https"]] ) == 0)
+                       end
+
+                       local function has_fetch()
+                               if cache['has_fetch'] then return cache['has_fetch'] end
+                               local res = (sys.call( [[command -v uclient-fetch >/dev/null 2>&1]] ) == 0)
+                               cache['has_fetch'] = res
+                               return res
+                       end
+
+                       local function has_fetchssl()
+                               return fs.access("/lib/libustream-ssl.so")
+                       end
+
+                       local function has_curl()
+                               if cache['has_curl'] then return cache['has_curl'] end
+                               local res = (sys.call( [[command -v curl >/dev/null 2>&1]] ) == 0)
+                               cache['has_curl'] = res
+                               return res
+                       end
+
+                       local function has_curlpxy()
+                               return (sys.call( [[grep -i "all_proxy" /usr/lib/libcurl.so* >/dev/null 2>&1]] ) == 0)
+                       end
+
+                       local function has_bbwget()
+                               return (sys.call( [[$(command -v wget) -V 2>&1 | grep -iqF "busybox"]] ) == 0)
+                       end
+
+                       res['has_wget'] = has_wget() or false
+                       res['has_curl'] = has_curl() or false
+
+                       res['has_ssl'] = has_wgetssl() or has_curlssl() or (has_fetch() and has_fetchssl()) or false
+                       res['has_proxy'] = has_wgetssl() or has_curlpxy() or has_fetch() or has_bbwget or false
+                       res['has_forceip'] = has_wgetssl() or has_curl() or has_fetch() or false
+                       res['has_bindnet'] = has_curl() or has_wgetssl() or false
+
+                       local function has_bindhost()
+                               if cache['has_bindhost'] then return cache['has_bindhost'] end
+                               local res = (sys.call( [[command -v host >/dev/null 2>&1]] ) == 0)
+                               if res then
+                                       cache['has_bindhost'] = res
+                                       return true
+                               end
+                               res = (sys.call( [[command -v khost >/dev/null 2>&1]] ) == 0)
+                               if res then
+                                       cache['has_bindhost'] = res
+                                       return true
+                               end
+                               res = (sys.call( [[command -v drill >/dev/null 2>&1]] ) == 0)
+                               if res then
+                                       cache['has_bindhost'] = res
+                                       return true
+                               end
+                               cache['has_bindhost'] = false
+                               return false
+                       end
+
+                       res['has_bindhost'] = cache['has_bindhost'] or has_bindhost() or false
+
+                       local function has_hostip()
+                               return (sys.call( [[command -v hostip >/dev/null 2>&1]] ) == 0)
+                       end
+
+                       local function has_nslookup()
+                               return (sys.call( [[command -v nslookup >/dev/null 2>&1]] ) == 0)
+                       end
+
+                       res['has_dnsserver'] = cache['has_bindhost'] or has_nslookup() or has_hostip() or has_bindhost() or false
+
+                       local function check_certs()
+                               local _, v = fs.glob("/etc/ssl/certs/*.crt")
+                               if ( v == 0 ) then _, v = fs.glob("/etc/ssl/certs/*.pem") end
+                               return (v > 0)
+                       end
+
+                       res['has_cacerts'] = check_certs() or false
+                       
+                       res['has_ipv6'] = (fs.access("/proc/net/ipv6_route") and
+                               (fs.access("/usr/sbin/ip6tables") or fs.access("/usr/sbin/nft")))
+
+                       return res
+               end
+       }
+}
+
+local function parseInput()
+       local parse = json.new()
+       local done, err
+
+       while true do
+               local chunk = io.read(4096)
+               if not chunk then
+                       break
+               elseif not done and not err then
+                       done, err = parse:parse(chunk)
+               end
+       end
+
+       if not done then
+               print(json.stringify({ error = err or "Incomplete input" }))
+               os.exit(1)
+       end
+
+       return parse:get()
+end
+
+local function validateArgs(func, uargs)
+       local method = methods[func]
+       if not method then
+               print(json.stringify({ error = "Method not found" }))
+               os.exit(1)
+       end
+
+       if type(uargs) ~= "table" then
+               print(json.stringify({ error = "Invalid arguments" }))
+               os.exit(1)
+       end
+
+       uargs.ubus_rpc_session = nil
+
+       local k, v
+       local margs = method.args or {}
+       for k, v in pairs(uargs) do
+               if margs[k] == nil or
+                  (v ~= nil and type(v) ~= type(margs[k]))
+               then
+                       print(json.stringify({ error = "Invalid arguments" }))
+                       os.exit(1)
+               end
+       end
+
+       return method
+end
+
+if arg[1] == "list" then
+       local _, method, rv = nil, nil, {}
+       for _, method in pairs(methods) do rv[_] = method.args or {} end
+       print((json.stringify(rv):gsub(":%[%]", ":{}")))
+elseif arg[1] == "call" then
+       local args = parseInput()
+       local method = validateArgs(arg[2], args)
+       local result, code = method.call(args)
+       print((json.stringify(result):gsub("^%[%]$", "{}")))
+       os.exit(code or 0)
+end
diff --git a/package/luci/applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json b/package/luci/applications/luci-app-ddns/root/usr/share/luci/menu.d/luci-app-ddns.json
new file mode 100644 (file)
index 0000000..6a7ee9a
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "admin/services/ddns": {
+               "title": "Dynamic DNS",
+               "order": 59,
+               "action": {
+                       "type": "view",
+                       "path": "ddns/overview"
+               },
+               "depends": {
+                       "acl": [ "luci-app-ddns" ]
+               }
+       }
+}
diff --git a/package/luci/applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json b/package/luci/applications/luci-app-ddns/root/usr/share/rpcd/acl.d/luci-app-ddns.json
new file mode 100644 (file)
index 0000000..2983784
--- /dev/null
@@ -0,0 +1,24 @@
+{
+       "luci-app-ddns": {
+               "description": "Grant access to ddns procedures",
+               "read": {
+                       "ubus": {
+                               "luci.ddns": [ "get_services_status", "get_ddns_state", "get_env", "get_services_log" ],
+                               "luci": [ "setInitAction" ]
+                       },
+                       "file": {
+                               "/usr/share/ddns/default": [ "list" ],
+                               "/usr/share/ddns/default/*": [ "read" ],
+                               "/usr/share/ddns/custom": [ "list" ],
+                               "/usr/share/ddns/custom/*": [ "read" ],
+                               "/usr/share/ddns/list": [ "read" ],
+                               "/usr/bin/ddns": [ "exec" ],
+                               "/usr/lib/ddns/dynamic_dns_lucihelper.sh": [ "exec" ]
+                       },
+                       "uci": [ "ddns" ]
+               },
+               "write": {
+                       "uci": [ "ddns" ]
+               }
+       }
+}
diff --git a/package/luci/applications/luci-app-mwan3/Makefile b/package/luci/applications/luci-app-mwan3/Makefile
new file mode 100644 (file)
index 0000000..8edba3c
--- /dev/null
@@ -0,0 +1,18 @@
+#
+# Copyright (C) 2017 Dan Luedtke <mail@danrl.com>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI support for the MWAN3 MultiWAN Manager
+LUCI_DEPENDS:=+mwan3
+LUCI_PKGARCH:=all
+PKG_LICENSE:=GPLv2
+
+PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/mwan3.css b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/mwan3.css
new file mode 100644 (file)
index 0000000..ebe7764
--- /dev/null
@@ -0,0 +1,8 @@
+#mwan3-service-status > .alert-message {
+       display: inline-block;
+       margin: 1rem;
+       padding: 1rem;
+       width: 15rem;
+       height: 6rem;
+       vertical-align: middle;
+}
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js
new file mode 100644 (file)
index 0000000..b8c12c0
--- /dev/null
@@ -0,0 +1,43 @@
+'use strict';
+'require form';
+'require view';
+
+return view.extend({
+
+       render: function () {
+               var m, s, o;
+
+               m = new form.Map('mwan3', _('MultiWAN Manager - Globals'));
+
+               s = m.section(form.NamedSection, 'globals', 'globals');
+
+               o = s.option(form.Value, 'mmx_mask', _('Firewall mask'),
+                       _('Enter value in hex, starting with <code>0x</code>'));
+               o.datatype = 'hex(4)';
+               o.default = '0x3F00';
+
+               o = s.option(form.Flag, 'logging', _('Logging'),
+                       _('Enables global firewall logging'));
+
+               o = s.option(form.ListValue, 'loglevel', _('Loglevel'),
+                       _('Firewall loglevel'));
+               o.default = 'notice';
+               o.value('emerg', _('Emergency'));
+               o.value('alert', _('Alert'));
+               o.value('crit', _('Critical'));
+               o.value('error', _('Error'));
+               o.value('warning', _('Warning'));
+               o.value('notice', _('Notice'));
+               o.value('info', _('Info'));
+               o.value('debug', _('Debug'));
+               o.depends('logging', '1');
+
+               o = s.option(form.DynamicList, 'rt_table_lookup',
+                       _('Routing table lookup'),
+                       _('Also scan this Routing table for connected networks'));
+               o.datatype = 'uinteger';
+               o.value('220', _('Routing table %d').format('220'));
+
+               return m.render();
+       }
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js
new file mode 100644 (file)
index 0000000..74c1718
--- /dev/null
@@ -0,0 +1,277 @@
+'use strict';
+'require form';
+'require fs';
+'require view';
+'require uci';
+
+return view.extend({
+       load: function() {
+               return Promise.all([
+                       L.resolveDefault(fs.stat('/usr/bin/httping'), {}),
+                       L.resolveDefault(fs.stat('/usr/bin/nping'), {}),
+                       L.resolveDefault(fs.stat('/usr/bin/arping'), {}),
+                       uci.load('network')
+               ]);
+       },
+
+       render: function (stats) {
+               var m, s, o;
+
+               m = new form.Map('mwan3', _('MultiWAN Manager - Interfaces'),
+                       _('Mwan3 requires that all interfaces have a unique metric configured in /etc/config/network.') + '<br />' +
+                       _('Names must match the interface name found in /etc/config/network.') + '<br />' +
+                       _('Names may contain characters A-Z, a-z, 0-9, _ and no spaces-') + '<br />' +
+                       _('Interfaces may not share the same name as configured members, policies or rules.'));
+
+               s = m.section(form.GridSection, 'interface');
+               s.addremove = true;
+               s.anonymous = false;
+               s.nodescriptions = true;
+
+               o = s.option(form.Flag, 'enabled', _('Enabled'));
+               o.default = false;
+
+               o = s.option(form.ListValue, 'initial_state', _('Initial state'),
+                       _('Expect interface state on up event'));
+               o.default = 'online';
+               o.value('online', _('Online'));
+               o.value('offline', _('Offline'));
+               o.modalonly = true;
+
+               o = s.option(form.ListValue, 'family', _('Internet Protocol'));
+               o.default = 'ipv4';
+               o.value('ipv4', _('IPv4'));
+               o.value('ipv6', _('IPv6'));
+               o.modalonly = true;
+
+               o = s.option(form.DynamicList, 'track_ip', _('Tracking hostname or IP address'),
+                       _('This hostname or IP address will be pinged to determine if the link is up or down. Leave blank to assume interface is always online'));
+               o.datatype = 'host';
+               o.modalonly = true;
+
+               o = s.option(form.ListValue, 'track_method', _('Tracking method'));
+               o.default = 'ping';
+               o.value('ping');
+               if (stats[0].type === 'file') {
+                       o.value('httping');
+               }
+               if (stats[1].type === 'file') {
+                       o.value('nping-tcp');
+                       o.value('nping-udp');
+                       o.value('nping-icmp');
+                       o.value('nping-arp');
+               }
+               if (stats[2].type === 'file') {
+                       o.value('arping');
+               }
+
+               o = s.option(form.Flag, 'httping_ssl', _('Enable ssl tracking'),
+                       _('Enables https tracking on ssl port 443'));
+               o.depends('track_method', 'httping');
+               o.rmempty = false;
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'reliability', _('Tracking reliability'),
+                       _('Acceptable values: 1-100. This many Tracking IP addresses must respond for the link to be deemed up'));
+               o.datatype = 'range(1, 100)';
+               o.default = '1';
+
+               o = s.option(form.ListValue, 'count', _('Ping count'));
+               o.default = '1';
+               o.value('1');
+               o.value('2');
+               o.value('3');
+               o.value('4');
+               o.value('5');
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'size', _('Ping size'));
+               o.default = '56';
+               o.depends('track_method', 'ping');
+               o.value('8');
+               o.value('24');
+               o.value('56');
+               o.value('120');
+               o.value('248');
+               o.value('504');
+               o.value('1016');
+               o.value('1472');
+               o.value('2040');
+               o.datatype = 'range(1, 65507)';
+               o.modalonly = true;
+
+               o =s.option(form.Value, 'max_ttl', _('Max TTL'));
+               o.default = '60';
+               o.depends('track_method', 'ping');
+               o.value('10');
+               o.value('20');
+               o.value('30');
+               o.value('40');
+               o.value('50');
+               o.value('60');
+               o.value('70');
+               o.datatype = 'range(1, 255)';
+               o.modalonly = true;
+
+               o = s.option(form.Flag, 'check_quality', _('Check link quality'));
+               o.depends('track_method', 'ping');
+               o.default = false;
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'failure_latency', _('Failure latency [ms]'));
+               o.depends('check_quality', '1');
+               o.default = '1000';
+               o.value('25');
+               o.value('50');
+               o.value('75');
+               o.value('100');
+               o.value('150');
+               o.value('200');
+               o.value('250');
+               o.value('300');
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'failure_loss', _('Failure packet loss [%]'));
+               o.depends('check_quality', '1');
+               o.default = '40';
+               o.value('2');
+               o.value('5');
+               o.value('10');
+               o.value('20');
+               o.value('25');
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'recovery_latency', _('Recovery latency [ms]'));
+               o.depends('check_quality', '1');
+               o.default = '500';
+               o.value('25');
+               o.value('50');
+               o.value('75');
+               o.value('100');
+               o.value('150');
+               o.value('200');
+               o.value('250');
+               o.value('300');
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'recovery_loss', _('Recovery packet loss [%]'));
+               o.depends('check_quality', '1');
+               o.default = '10';
+               o.value('2');
+               o.value('5');
+               o.value('10');
+               o.value('20');
+               o.value('25');
+               o.modalonly = true;
+
+               o = s.option(form.ListValue, "timeout", _("Ping timeout"));
+               o.default = '4';
+               o.value('1', _('%d second').format('1'));
+               for (var i = 2; i <= 10; i++)
+                       o.value(String(i), _('%d seconds').format(i));
+               o.modalonly = true;
+
+               o = s.option(form.ListValue, 'interval', _('Ping interval'));
+               o.default = '10';
+               o.value('1', _('%d second').format('1'));
+               o.value('3', _('%d seconds').format('3'));
+               o.value('5', _('%d seconds').format('5'));
+               o.value('10', _('%d seconds').format('10'));
+               o.value('20', _('%d seconds').format('20'));
+               o.value('30', _('%d seconds').format('30'));
+               o.value('60', _('%d minute').format('1'));
+               o.value('300', _('%d minutes').format('5'));
+               o.value('600', _('%d minutes').format('10'));
+               o.value('900', _('%d minutes').format('15'));
+               o.value('1800', _('%d minutes').format('30'));
+               o.value('3600', _('%d hour').format('1'));
+
+               o = s.option(form.Value, 'failure_interval', _('Failure interval'),
+                       _('Ping interval during failure detection'));
+               o.default = '5';
+               o.value('1', _('%d second').format('1'));
+               o.value('3', _('%d seconds').format('3'));
+               o.value('5', _('%d seconds').format('5'));
+               o.value('10', _('%d seconds').format('10'));
+               o.value('20', _('%d seconds').format('20'));
+               o.value('30', _('%d seconds').format('30'));
+               o.value('60', _('%d minute').format('1'));
+               o.value('300', _('%d minutes').format('5'));
+               o.value('600', _('%d minutes').format('10'));
+               o.value('900', _('%d minutes').format('15'));
+               o.value('1800', _('%d minutes').format('30'));
+               o.value('3600', _('%d hour').format('1'));
+               o.modalonly = true;
+
+               o = s.option(form.Flag, 'keep_failure_interval', _('Keep failure interval'),
+                       _('Keep ping failure interval during failure state'));
+               o.default = false;
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'recovery_interval', _('Recovery interval'),
+                       _('Ping interval during failure recovering'));
+               o.default = '5';
+               o.value('1', _('%d second').format('1'));
+               o.value('3', _('%d seconds').format('3'));
+               o.value('5', _('%d seconds').format('5'));
+               o.value('10', _('%d seconds').format('10'));
+               o.value('20', _('%d seconds').format('20'));
+               o.value('30', _('%d seconds').format('30'));
+               o.value('60', _('%d minute').format('1'));
+               o.value('300', _('%d minutes').format('5'));
+               o.value('600', _('%d minutes').format('10'));
+               o.value('900', _('%d minutes').format('15'));
+               o.value('1800', _('%d minutes').format('30'));
+               o.value('3600', _('%d hour').format('1'));
+               o.modalonly = true;
+
+               o = s.option(form.ListValue, 'down', _('Interface down'),
+                       _('Interface will be deemed down after this many failed ping tests'));
+               o.default = '5';
+               o.value('1');
+               o.value('2');
+               o.value('3');
+               o.value('4');
+               o.value('5');
+               o.value('6');
+               o.value('7');
+               o.value('8');
+               o.value('9');
+               o.value('10');
+
+               o = s.option(form.ListValue, 'up', _('Interface up'),
+                       _('Downed interface will be deemed up after this many successful ping tests'));
+               o.default = "5";
+               o.value('1');
+               o.value('2');
+               o.value('3');
+               o.value('4');
+               o.value('5');
+               o.value('6');
+               o.value('7');
+               o.value('8');
+               o.value('9');
+               o.value('10');
+
+               o = s.option(form.DynamicList, 'flush_conntrack', _('Flush conntrack table'),
+                       _('Flush global firewall conntrack table on interface events'));
+               o.value('ifup', _('ifup (netifd)'));
+               o.value('ifdown', _('ifdown (netifd)'));
+               o.value('connected', _('connected (mwan3)'));
+               o.value('disconnected', _('disconnected (mwan3)'));
+               o.modalonly = true;
+
+               o = s.option(form.DummyValue, 'metric', _('Metric'),
+                       _('This displays the metric assigned to this interface in /etc/config/network'));
+               o.rawhtml = true;
+               o.cfgvalue = function(s) {
+                       var metric = uci.get('network', s, 'metric')
+                       if (metric)
+                               return metric;
+                       else
+                               return _('No interface metric set!');
+               }
+
+               return m.render();
+       }
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js
new file mode 100644 (file)
index 0000000..c49cc6e
--- /dev/null
@@ -0,0 +1,43 @@
+'use strict';
+'require form';
+'require view';
+'require uci';
+
+return view.extend({
+       load: function() {
+               return Promise.all([
+                       uci.load('mwan3')
+               ]);
+       },
+
+       render: function () {
+               var m, s, o;
+
+               m = new form.Map('mwan3', _('MultiWAN Manager - Members'),
+                       _('Members are profiles attaching a metric and weight to an MWAN interface.') + '<br />' +
+                       _('Names may contain characters A-Z, a-z, 0-9, _ and no spaces.') + '<br />' +
+                       _('Members may not share the same name as configured interfaces, policies or rules.'));
+
+               s = m.section(form.GridSection, 'member');
+               s.addremove = true;
+               s.anonymous = false;
+               s.nodescriptions = true;
+
+               o = s.option(form.ListValue, 'interface', _('Interface'));
+               var options = uci.sections('mwan3', 'interface')
+               for (var i = 0; i < options.length; i++) {
+                       var value = options[i]['.name'];
+                       o.value(value);
+               }
+
+               o = s.option(form.Value, 'metric', _('Metric'),
+                       _('Acceptable values: 1-256. Defaults to 1 if not set'));
+               o.datatype = 'range(1, 256)';
+
+               o = s.option(form.Value, 'weight', ('Weight'),
+                       _('Acceptable values: 1-1000. Defaults to 1 if not set'));
+               o.datatype = 'range(1, 1000)';
+
+               return m.render();
+       }
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js
new file mode 100644 (file)
index 0000000..ed27535
--- /dev/null
@@ -0,0 +1,52 @@
+'use strict';
+'require view';
+'require fs';
+'require ui';
+
+var isReadonlyView = !L.hasViewPermission() || null;
+
+return view.extend({
+       load: function() {
+               return L.resolveDefault(fs.read('/etc/mwan3.user'), '');
+       },
+
+       handleSave: function(ev) {
+               var value = (document.querySelector('textarea').value || '').trim().replace(/\r\n/g, '\n') + '\n';
+
+               return fs.write('/etc/mwan3.user', value).then(function(rc) {
+                       document.querySelector('textarea').value = value;
+                               ui.addNotification(null, E('p', _('Contents have been saved.')), 'info');
+                       }).catch(function(e) {
+                               ui.addNotification(null, E('p', _('Unable to save contents: %s').format(e.message)));
+                       });
+               },
+
+       render: function(mwan3user) {
+               return E([
+                       E('h2', _('MultiWAN Manager - Notify')),
+                       E('p', { 'class': 'cbi-section-descr' },
+                       _('This section allows you to modify the content of \"/etc/mwan3.user\".') + '<br/>' +
+                       _('The file is also preserved during sysupgrade.') + '<br/>' +
+                       '<br />' +
+                       _('Notes:') + '<br />' +
+                       _('This file is interpreted as a shell script.') + '<br />' +
+                       _('The first line of the script must be &#34;#!/bin/sh&#34; without quotes.') + '<br />' +
+                       _('Lines beginning with # are comments and are not executed.') + '<br />' +
+                       _('Put your custom mwan3 action here, they will be executed with each netifd hotplug interface event on interfaces for which mwan3 is enabled.') + '<br />' +
+                       '<br />' +
+                       _('There are three main environment variables that are passed to this script.') + '<br />' +
+                       '<br />' +
+                       _('%s: Name of the action that triggered this event').format('$ACTION') + '<br />' +
+                       _('* %s: Is called by netifd and mwan3track').format('ifup') + '<br />' +
+                       _('* %s: Is called by netifd and mwan3track').format('ifdown') + '<br />' +
+                       _('* %s: Is only called by mwan3track if tracking was successful').format('connected') + '<br />' +
+                       _('* %s: Is only called by mwan3track if tracking has failed').format('disonnected') + '<br />' +
+                       _('%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")').format('$INTERFACE') + '<br />' +
+                       _('%s: Name of Physical device which interface went up or down (e.g. \"eth0\" or \"wwan0\")').format('$DEVICE') + '<br />'),
+                       E('p', {}, E('textarea', { 'style': 'width:100%', 'rows': 10, 'disabled': isReadonlyView }, [ mwan3user != null ? mwan3user : '' ]))
+               ]);
+       },
+
+       handleSaveApply: null,
+       handleReset: null
+});
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js
new file mode 100644 (file)
index 0000000..d39eb3b
--- /dev/null
@@ -0,0 +1,46 @@
+'use strict';
+'require form';
+'require view';
+'require uci';
+
+return view.extend({
+       load: function() {
+               return Promise.all([
+                       uci.load('mwan3')
+               ]);
+       },
+
+       render: function () {
+               var m, s, o;
+
+               m = new form.Map('mwan3', _('MultiWAN Manager - Policies'),
+                       _('Policies are profiles grouping one or more members controlling how Mwan3 distributes traffic.') +
+                       _('Member interfaces with lower metrics are used first.') +
+                       _('Member interfaces with the same metric will be load-balanced.') +
+                       _('Load-balanced member interfaces distribute more traffic out those with higher weights.') +
+                       _('Names may contain characters A-Z, a-z, 0-9, _ and no spaces.') +
+                       _('Names must be 15 characters or less.') +
+                       _('Policies may not share the same name as configured interfaces, members or rules'));
+
+               s = m.section(form.GridSection, 'policy');
+               s.addremove = true;
+               s.anonymous = false;
+               s.nodescriptions = true;
+
+               o = s.option(form.DynamicList, 'use_member', _('Member used'));
+               var options = uci.sections('mwan3', 'member')
+               for (var i = 0; i < options.length; i++) {
+                       var value = options[i]['.name'];
+                       o.value(value);
+               }
+
+               o = s.option(form.ListValue, 'last_resort', _('Last resort'),
+                       _('When all policy members are offline use this behavior for matched traffic'));
+               o.default = 'unreachable';
+               o.value('unreachable', _('unreachable (reject)'));
+               o.value('blackhole', _('blackhole (drop)'));
+               o.value('default', _('default (use main routing table)'));
+
+               return m.render();
+       }
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js
new file mode 100644 (file)
index 0000000..6452caf
--- /dev/null
@@ -0,0 +1,109 @@
+'use strict';
+'require form';
+'require fs';
+'require view';
+'require uci';
+
+return view.extend({
+       load: function() {
+               return Promise.all([
+                       fs.exec_direct('/usr/libexec/luci-mwan3', ['ipset', 'dump']),
+                       uci.load('mwan3')
+               ]);
+       },
+
+       render: function (data) {
+               var m, s, o;
+
+               m = new form.Map('mwan3', _('MultiWAN Manager - Rules'),
+                       _('Rules specify which traffic will use a particular MWAN policy.') + '<br />' +
+                       _('Rules are based on IP address, port or protocol.') + '<br />' +
+                       _('Rules are matched from top to bottom.') + '<br />' +
+                       _('Rules below a matching rule are ignored.') + '<br />' +
+                       _('Traffic not matching any rule is routed using the main routing table.') + '<br />' +
+                       _('Traffic destined for known (other than default) networks is handled by the main routing table.') + '<br />' +
+                       _('Traffic matching a rule, but all WAN interfaces for that policy are down will be blackholed.') + '<br />' +
+                       _('Names may contain characters A-Z, a-z, 0-9, _ and no spaces.') + '<br />' +
+                       _('Rules may not share the same name as configured interfaces, members or policies.'));
+
+               s = m.section(form.GridSection, 'rule');
+               s.addremove = true;
+               s.anonymous = false;
+               s.nodescriptions = true;
+               s.sortable  = true;
+
+               o = s.option(form.ListValue, 'family', _('Internet Protocol'));
+               o.default = '';
+               o.value('', _('IPv4 and IPv6'));
+               o.value('ipv4', _('IPv4 only'));
+               o.value('ipv6', _('IPv6 only'));
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'proto', _('Protocol'),
+                       _('View the content of /etc/protocols for protocol description'));
+               o.default = 'all';
+               o.rmempty = false;
+               o.value('all');
+               o.value('tcp');
+               o.value('udp');
+               o.value('icmp');
+               o.value('esp');
+
+               o = s.option(form.Value, 'src_ip', _('Source address'),
+                       _('Supports CIDR notation (eg \"192.168.100.0/24\") without quotes'));
+               o.datatype = 'ipaddr';
+
+               o = s.option(form.Value, 'src_port', _('Source port'),
+                       _('May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes'));
+               o.depends('proto', 'tcp');
+               o.depends('proto', 'udp');
+
+               o = s.option(form.Value, 'dest_ip', _('Destination address'),
+                       _('Supports CIDR notation (eg \"192.168.100.0/24\") without quotes'));
+               o.datatype = 'ipaddr';
+
+               o = s.option(form.Value, 'dest_port', _('Destination port'),
+                       _('May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or as a portrange (eg \"1024:2048\") without quotes'));
+               o.depends('proto', 'tcp');
+               o.depends('proto', 'udp');
+
+               o = s.option(form.ListValue, 'sticky', _('Sticky'),
+                       _('Traffic from the same source IP address that previously matched this rule within the sticky timeout period will use the same WAN interface'));
+               o.default = '0';
+               o.value('1', _('Yes'));
+               o.value('0', _('No'));
+               o.modalonly = true;
+
+               o = s.option(form.Value, 'timeout', _('Sticky timeout'),
+                       _('Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set'));
+               o.datatype = 'range(1, 1000000)';
+               o.modalonly = true;
+               o.depends('sticky', '1');
+
+               o = s.option(form.Value, 'ipset', _('IPset'),
+                       _('Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/youtube.com/youtube\")'));
+               o.value('', _('-- Please choose --'));
+               var ipsets = data[0].split(/\n/);
+               for (var i = 0; i < ipsets.length; i++) {
+                       if (ipsets[i].length > 0)
+                               o.value(ipsets[i]);
+               }
+               o.modalonly = true;
+
+               o = s.option(form.Flag, 'logging', _('Logging'),
+                       _('Enables firewall rule logging (global mwan3 logging must also be enabled)'));
+               o.modalonly = true;
+
+               o = s.option(form.ListValue, 'use_policy', _('Policy assigned'));
+               var options = uci.sections('mwan3', 'policy')
+               for (var i = 0; i < options.length; i++) {
+                       var value = options[i]['.name'];
+                       o.value(value);
+               }
+               o.value('unreachable', _('unreachable (reject)'));
+               o.value('blackhole', _('blackhole (drop)'));
+               o.value('default', _('default (use main routing table)'));
+
+               return m.render();
+       }
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js
new file mode 100644 (file)
index 0000000..552b132
--- /dev/null
@@ -0,0 +1,22 @@
+'use strict';
+'require fs';
+'require view';
+
+return view.extend({
+       load: function() {
+               return L.resolveDefault(fs.exec_direct('/usr/sbin/mwan3', [ 'status' ]),'');
+       },
+
+       render: function (report) {
+               return E('div', { 'class': 'cbi-map', 'id': 'map' }, [
+                       E('h2', _('MultiWAN Manager - Status')),
+                       E('div', { 'class': 'cbi-section' }, [
+                               E('pre', [ report ])
+                       ]),
+               ])
+       },
+
+       handleSaveApply: null,
+       handleSave: null,
+       handleReset: null
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js
new file mode 100644 (file)
index 0000000..71bee68
--- /dev/null
@@ -0,0 +1,116 @@
+'use strict';
+'require fs';
+'require uci';
+'require dom';
+'require ui';
+'require view';
+
+return view.extend({
+       handleCommand: function(exec, args) {
+               var buttons = document.querySelectorAll('.cbi-button');
+
+               for (var i = 0; i < buttons.length; i++)
+                       buttons[i].setAttribute('disabled', 'true');
+
+               return fs.exec(exec, args).then(function(res) {
+                       var out = document.querySelector('.command-output');
+                       out.style.display = '';
+
+                       dom.content(out, [ res.stdout || '', res.stderr || '' ]);
+               }).catch(function(err) {
+                       ui.addNotification(null, E('p', [ err ]))
+               }).finally(function() {
+                       for (var i = 0; i < buttons.length; i++)
+                               buttons[i].removeAttribute('disabled');
+               });
+       },
+
+       handleAction: function(ev) {
+               var iface = document.getElementById('iface');
+               var task = document.getElementById('task');
+
+               switch (task.value) {
+                       case 'gateway':
+                               return this.handleCommand('/usr/libexec/luci-mwan3',
+                                       [ 'diag', 'gateway', iface.value ]);
+                       case 'tracking':
+                               return this.handleCommand('/usr/libexec/luci-mwan3',
+                                       [ 'diag', 'tracking', iface.value ]);
+                       case 'rules':
+                               return this.handleCommand('/usr/libexec/luci-mwan3',
+                                       [ 'diag', 'rules', iface.value ]);
+                       case 'routes':
+                               return this.handleCommand('/usr/libexec/luci-mwan3',
+                                       [ 'diag', 'routes', iface.value ]);
+                       case 'ifup':
+                               return this.handleCommand('/usr/sbin/mwan3',
+                                       [ 'ifup', iface.value]);
+                       case 'ifdown':
+                               return this.handleCommand('/usr/sbin/mwan3',
+                                       [ 'ifdown', iface.value]);
+               }
+       },
+
+       load: function() {
+               return Promise.all([
+                       uci.load('mwan3')
+               ]);
+       },
+
+       render: function () {
+
+               var taskSel = [
+                       E('option', { 'value': 'gateway' }, [ _('Ping default gateway') ]),
+                       E('option', { 'value': 'tracking' }, [ _('Ping tracking IP') ]),
+                       E('option', { 'value': 'rules' }, [ _('Check IP rules') ]),
+                       E('option', { 'value': 'routes' }, [ _('Check routing table') ]),
+                       E('option', { 'value': 'ifup' }, [ _('Hotplug ifup') ]),
+                       E('option', { 'value': 'ifdown' }, [ _('Hotplug ifdown') ])
+               ];
+
+               var ifaceSel = [E('option', { value: '' }, [_('-- Interface Selection --')])];
+
+               var options = uci.sections('mwan3', 'interface')
+               for (var i = 0; i < options.length; i++) {
+                       ifaceSel.push(E('option', { 'value': options[i]['.name'] }, options[i]['.name']));
+               }
+
+               return E('div', { 'class': 'cbi-map', 'id': 'map' }, [
+                               E('h2', {}, [ _('MultiWAN Manager - Diagnostics') ]),
+                               E('div', { 'class': 'cbi-section' }, [
+                                       E('div', { 'class': 'cbi-section-node' }, [
+                                               E('div', { 'class': 'cbi-value' }, [
+                                                       E('label', { 'class': 'cbi-value-title' }, [ _('Interface') ]),
+                                                       E('div', { 'class': 'cbi-value-field' }, [
+                                                               E('select', {'class': 'cbi-input-select', 'id': 'iface'},
+                                                                       ifaceSel
+                                                               )
+                                                       ])
+                                               ]),
+                                               E('div', { 'class': 'cbi-value' }, [
+                                                       E('label', { 'class': 'cbi-value-title' }, [ _('Task') ]),
+                                                       E('div', { 'class': 'cbi-value-field' }, [
+                                                               E('select', { 'class': 'cbi-input-select', 'id': 'task' },
+                                                                       taskSel
+                                                               )
+                                                       ])
+                                               ])
+                                       ])
+                               ]),
+                               '\xa0',
+                               E('pre', { 'class': 'command-output', 'style': 'display:none' }),
+                               '\xa0',
+                               E('div', { 'class': 'right' }, [
+                                       E('button', {
+                                               'class': 'cbi-button cbi-button-apply',
+                                               'id': 'execute',
+                                               'click': ui.createHandlerFn(this, 'handleAction')
+                                       }, [ _('Execute') ]),
+                               ]),
+                       ]);
+       },
+
+       handleSaveApply: null,
+       handleSave: null,
+       handleReset: null
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js
new file mode 100644 (file)
index 0000000..c60ac7a
--- /dev/null
@@ -0,0 +1,104 @@
+'use strict';
+'require poll';
+'require view';
+'require rpc';
+
+var callMwan3Status = rpc.declare({
+       object: 'mwan3',
+       method: 'status',
+       expect: {  },
+});
+
+document.querySelector('head').appendChild(E('link', {
+       'rel': 'stylesheet',
+       'type': 'text/css',
+       'href': L.resource('view/mwan3/mwan3.css')
+}));
+
+function renderMwan3Status(status) {
+       if (!status.interfaces)
+               return '<strong>%h</strong>'.format(_('No MWAN interfaces found'));
+
+       var statusview = '';
+       for ( var iface in status.interfaces) {
+               var state = '';
+               var css = '';
+               var time = '';
+               var tname = '';
+               switch (status.interfaces[iface].status) {
+                       case 'online':
+                               state = _('Online');
+                               css = 'success';
+                               time = '%t'.format(status.interfaces[iface].online);
+                               tname = _('Uptime');
+                               css = 'success';
+                               break;
+                       case 'offline':
+                               state = _('Offline');
+                               css = 'danger';
+                               time = '%t'.format(status.interfaces[iface].offline);
+                               tname = _('Downtime');
+                               break;
+                       case 'notracking':
+                               state = _('No Tracking');
+                               if ((status.interfaces[iface].uptime) > 0) {
+                                       css = 'success';
+                                       time = '%t'.format(status.interfaces[iface].uptime);
+                                       tname = _('Uptime');
+                               }
+                               else {
+                                       css = 'warning';
+                                       time = '';
+                                       tname = '';
+                               }
+                               break;
+                       default:
+                               state = _('Disabled');
+                               css = 'warning';
+                               time = '';
+                               tname = '';
+                               break;
+               }
+
+               statusview += '<div class="alert-message %h">'.format(css);
+               statusview += '<div><strong>%h:&#160;</strong>%h</div>'.format(_('Interface'), iface);
+               statusview += '<div><strong>%h:&#160;</strong>%h</div>'.format(_('Status'), state);
+
+               if (time)
+                       statusview += '<div><strong>%h:&#160;</strong>%h</div>'.format(tname, time);
+
+               statusview += '</div>';
+       }
+
+       return statusview;
+}
+
+return view.extend({
+       load: function() {
+               return Promise.all([
+                       callMwan3Status(),
+               ]);
+       },
+
+       render: function (data) {
+               poll.add(function() {
+                       return callMwan3Status().then(function(result) {
+                               var view = document.getElementById('mwan3-service-status');
+                               view.innerHTML = renderMwan3Status(result);
+                       });
+               });
+
+               return E('div', { class: 'cbi-map' }, [
+                       E('h2', [ _('MultiWAN Manager - Overview') ]),
+                       E('div', { class: 'cbi-section' }, [
+                               E('div', { 'id': 'mwan3-service-status' }, [
+                                       E('em', { 'class': 'spinning' }, [ _('Collecting data ...') ])
+                               ])
+                       ])
+               ]);
+       },
+
+       handleSaveApply: null,
+       handleSave: null,
+       handleReset: null
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js
new file mode 100644 (file)
index 0000000..6446125
--- /dev/null
@@ -0,0 +1,22 @@
+'use strict';
+'require fs';
+'require view';
+
+return view.extend({
+       load: function() {
+               return L.resolveDefault(fs.exec_direct('/usr/sbin/mwan3', [ 'internal', 'ipv4' ]),'');
+       },
+
+       render: function (report) {
+               return E('div', { 'class': 'cbi-map', 'id': 'map' }, [
+                       E('h2', _('MultiWAN Manager - Troubleshooting')),
+                       E('div', { 'class': 'cbi-section' }, [
+                               E('pre', [ report ])
+                       ]),
+               ])
+       },
+
+       handleSaveApply: null,
+       handleSave: null,
+       handleReset: null
+})
diff --git a/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js b/package/luci/applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js
new file mode 100644 (file)
index 0000000..0fc1155
--- /dev/null
@@ -0,0 +1,117 @@
+'use strict';
+'require baseclass';
+'require rpc';
+
+var callMwan3Status = rpc.declare({
+       object: 'mwan3',
+       method: 'status',
+       expect: {  },
+});
+
+document.querySelector('head').appendChild(E('link', {
+       'rel': 'stylesheet',
+       'type': 'text/css',
+       'href': L.resource('view/mwan3/mwan3.css')
+}));
+
+return baseclass.extend({
+       title: _('MultiWAN Manager'),
+
+       load: function() {
+               return Promise.all([
+                       callMwan3Status(),
+               ]);
+       },
+
+       render: function (result) {
+               if (!result[0].interfaces)
+                       return null;
+
+               var container = E('div', { 'id': 'mwan3-service-status' });
+               var iface;
+               for ( iface in result[0].interfaces) {
+                       var state = '';
+                       var css = '';
+                       var time = '';
+                       var tname = '';
+                       switch (result[0].interfaces[iface].status) {
+                               case 'online':
+                                       state = _('Online');
+                                       css = 'alert-message success';
+                                       time = '%t'.format(result[0].interfaces[iface].online);
+                                       tname = _('Uptime');
+                                       break;
+                               case 'offline':
+                                       state = _('Offline');
+                                       css = 'alert-message danger';
+                                       time = '%t'.format(result[0].interfaces[iface].offline);
+                                       tname = _('Downtime');
+                                       break;
+                               case 'notracking':
+                                       state = _('No Tracking');
+                                       if ((result[0].interfaces[iface].uptime) > 0) {
+                                               css = 'alert-message success';
+                                               time = '%t'.format(result[0].interfaces[iface].uptime);
+                                               tname = _('Uptime');
+                                       }
+                                       else {
+                                               css = 'alert-message warning';
+                                               time = '';
+                                               tname = '';
+                                       }
+                                       break;
+                               default:
+                                       css = 'alert-message warning';
+                                       state = _('Disabled');
+                                       time = '';
+                                       tname = '';
+                                       break;
+                       }
+
+                       if (time !== '' ) {
+                               container.appendChild(
+                                       E('div', { 'class': css }, [
+                                               E('div', {}, [
+                                                       E('strong', {}, [
+                                                               _('Interface'), ':', ' '
+                                                       ]),
+                                                       iface
+                                               ]),
+                                               E('div', {}, [
+                                                       E('strong', {}, [
+                                                               _('Status'), ':', ' '
+                                                       ]),
+                                                       state
+                                               ]),
+                                               E('div', {}, [
+                                                       E('strong', {}, [
+                                                               tname, ':', ' '
+                                                       ]),
+                                                       time
+                                               ])
+                                       ])
+                               );
+                       }
+                       else {
+                               container.appendChild(
+                                       E('div', { 'class': css }, [
+                                               E('div', {}, [
+                                                       E('strong', {}, [
+                                                               _('Interface'), ':', ' '
+                                                       ]),
+                                                       iface
+                                               ]),
+                                               E('div', {}, [
+                                                       E('strong', {}, [
+                                                               _('Status'), ':', ' '
+                                                       ]),
+                                                       state
+                                               ])
+                                       ])
+                               );
+                       }
+               }
+
+               return container;
+       }
+});
diff --git a/package/luci/applications/luci-app-mwan3/po/ar/mwan3.po b/package/luci/applications/luci-app-mwan3/po/ar/mwan3.po
new file mode 100644 (file)
index 0000000..2ae8916
--- /dev/null
@@ -0,0 +1,796 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2021-09-17 06:52+0000\n"
+"Last-Translator: Mark MA <daomeideshu@gmail.com>\n"
+"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/ar/>\n"
+"Language: ar\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- اختر من فضلك --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "انذار"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "حرج"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "تصحيح الأخطاء"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "عنوان الوجهة"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "بوابة الوجهة"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "التشخيص"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "غير مفعل"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "طوارئ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "مفعل"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "خطأ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 و IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "IPv4 فقط"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "IPv6 فقط"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "معلومات"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "واجهه"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "تسجيل"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "قياس"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "لا"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "ملاحضة"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "سياسة"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "بروتوكول"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "القاعدة"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "عنوان المصدر"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "منفذ المصدر"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "تحذير"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "نعم"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/bg/mwan3.po b/package/luci/applications/luci-app-mwan3/po/bg/mwan3.po
new file mode 100644 (file)
index 0000000..789b922
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-02-28 14:29+0000\n"
+"Last-Translator: Boyan Alexiev <nneauu@gmail.com>\n"
+"Language-Team: Bulgarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/bg/>\n"
+"Language: bg\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.5-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d час"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Моля изберете --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Предупреждение"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Събиране на данни ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Съдържанието е записано."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Критично"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Дебъгване"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Адрес на дестинацията"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Дестинейшън Порт"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Диагностики"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Забранено"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Извънредно"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Разрешен"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Грешка"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 и IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Само IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Само IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Инфо"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Интерфейс"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Протокол"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Състояние"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Ъптайм"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Предупреждение"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/bn_BD/mwan3.po b/package/luci/applications/luci-app-mwan3/po/bn_BD/mwan3.po
new file mode 100644 (file)
index 0000000..780ad6c
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2021-10-08 17:53+0000\n"
+"Last-Translator: Rayhan Nabi <rayhanjanam@gmail.com>\n"
+"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsmwan3/bn_BD/>\n"
+"Language: bn_BD\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "তথ্য সংগ্রহ করা হচ্ছে ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "ডিবাগ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "নিষ্ক্রিয়"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "সক্রিয়"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "ভুল"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "তথ্য"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "ইন্টারফেস"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "লগিং"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "না"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "নির্দেশনা"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "অফলাইন"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "অনলাইন"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "নীতি"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "প্রোটোকল"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "অবস্থা"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "সতর্কতা"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "হ্যাঁ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/ca/mwan3.po b/package/luci/applications/luci-app-mwan3/po/ca/mwan3.po
new file mode 100644 (file)
index 0000000..a9e7a3a
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-03-18 11:11+0000\n"
+"Last-Translator: \"S. Barj.\" <sbarjola@proton.me>\n"
+"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/ca/>\n"
+"Language: ca\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.5-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "S'han desat els continguts."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Depuració"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Activat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interfície"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "No"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protocol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regla"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Sí"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/cs/mwan3.po b/package/luci/applications/luci-app-mwan3/po/cs/mwan3.po
new file mode 100644 (file)
index 0000000..b41112e
--- /dev/null
@@ -0,0 +1,799 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-09-27 19:02+0000\n"
+"Last-Translator: David Rapaň <david@rapan.cz>\n"
+"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/cs/>\n"
+"Language: cs\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.1-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d hodina"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minuta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minut"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+#, fuzzy
+msgid "%d second"
+msgstr "%d sekunda"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d sekund"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Vyberte --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+#, fuzzy
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Přijatelné hodnoty: 1-100. Takovýto počet IP adres pro sledování musí "
+"odpovídat, aby byla síťová linka považována za aktivní"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Přijatelné hodnoty: 1-1000. Výchozí je 1, pokud není nastaveno"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Přijatelné hodnoty: 1-256. Výchozí je 1, pokud není nastaveno"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Upozornění"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritické"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Ladění"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Cílová adresa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Cílový port"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Zakázáno"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Záchrana"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Zapnuto"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Chyba"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 a IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Pouze IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Pouze IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Rozhraní"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Protokolování"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Ne"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Upozornění"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Přehled"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Politika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Pravidlo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Zdrojová adresa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Zdrojový port"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Stav"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Nelze uložit obsah: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Doba běhu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Varování"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Ano"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/da/mwan3.po b/package/luci/applications/luci-app-mwan3/po/da/mwan3.po
new file mode 100644 (file)
index 0000000..1ce9b69
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-25 02:53+0000\n"
+"Last-Translator: drax red <drax@outlook.dk>\n"
+"Language-Team: Danish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/da/>\n"
+"Language: da\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.4-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d timer"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Vælg venligst --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Advarsel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Indholdet er blevet gemt."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritisk"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Debug"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Destinationsadresse"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Destinationsport"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostik"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Deaktiveret"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Nødsituation"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Aktiveret"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Fejl"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 og IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Kun IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Kun IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Logning"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metric"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Nej"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Varsel"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Oversigt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Politik"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Opgave"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Kan ikke gemme indholdet: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Oppetid"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Advarsel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Ja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/de/mwan3.po b/package/luci/applications/luci-app-mwan3/po/de/mwan3.po
new file mode 100644 (file)
index 0000000..322ca9f
--- /dev/null
@@ -0,0 +1,867 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-05-23 02:34+0000\n"
+"Last-Translator: David <dawin@users.noreply.hosted.weblate.org>\n"
+"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/de/>\n"
+"Language: de\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.6-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d Stunde"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d Minute"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d Minuten"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d Sekunde"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d Sekunden"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Name des physischen Geräts, dessen Schnittstelle hoch- oder "
+"heruntergefahren wurde (z. B. \"eth0\" oder \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: Name der Aktion, die dieses Ereignis ausgelöst hat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Name der Schnittstelle, die hoch- oder heruntergefahren wurde (z. B. "
+"\"wan\" oder \"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: Wird von netifd und mwan3track aufgerufen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+"* %s: Wird nur von mwan3track aufgerufen, wenn die Verfolgung fehlgeschlagen "
+"ist"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+"* %s: Wird nur von mwan3track aufgerufen, wenn die Verfolgung erfolgreich war"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Schnittstellenauswahl --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Bitte auswählen --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Gültige Werte: 1-100. Diese Anzahl an Tracking-IP-Adressen müssen antworten, "
+"damit die Schnittstelle als aktiv angesehen wird"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Gültige Werte: 1-1000. Standardwert ist 1, falls nicht gesetzt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Akzeptable Werte: 1-256. Standardwert ist 1, wenn nicht gesetzt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Meldung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "Auch diese Routing-Tabelle für verbundene Netzwerke scannen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Prüfen der IP-Regeln"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Linkqualität prüfen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Prüfen der Routing-Tabelle"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Sammeln von Daten ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Inhalte wurden gespeichert."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritisch"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Debug"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Zieladresse"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Zielport"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnosen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Deaktiviert"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Eine als offline markierte Schnittstelle wird nach dieser Anzahl "
+"erfolgreicher Tracking-Runden als online angesehen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Ausfallzeit"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Notfall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Aktiviere SSL-Tracking"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Aktiviert"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Aktiviert die Protokollierung von Firewall-Regeln (globale Firewall-"
+"Protokollierung muss ebenfalls aktiviert sein)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Aktiviert die globale Firewall-Protokollierung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Aktiviert HTTPS-Tracking auf SSL-Port 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Geben Sie den Wert in hex ein, beginnend mit <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Fehler"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Ausführen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Erwarteter Schnittstellen status beim up event"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Fehler-Intervall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Fehler-Latenzzeit [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Fehler-Paketverlust [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Firewall-Protokollierungsstufe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Firewall-Maske"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Conntrack-Tabelle leeren"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "Leere Global-Firewall-Conntrack-Table bei Schnittstellen-Events"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Allgemein"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "UCI-Zugriff für luci-app-mwan3 erlauben"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IP-Set"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 und IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "nur IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "nur IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Ausgangszustand"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Schnittstelle"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Schnittstelle nicht aktiv"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Schnittstelle aktiv"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"Die Schnittstelle wird nach dieser Anzahl an fehlgeschlagenen Tracking-"
+"Runden als offline angesehen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Schnittstellen dürfen nicht denselben Namen wie konfigurierte Mitglieder, "
+"Richtlinien oder Regeln haben."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Internet-Protokoll"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Fehlerintervall beibehalten"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Ping-Fehlerintervall während des Ausfalls beibehalten"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Letzter Ausweg"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+"Zeilen, die mit # beginnen, sind Kommentare und werden nicht ausgeführt."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Bei Schnittstellen mit Lastausgleich wird mehr Verkehr auf die "
+"Schnittstellen mit höherer Gewichtung verteilt."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Protokollierung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Protokollierungsstufe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Maximale TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Kann als einzelner oder mehrfacher Port (z.B. \"22\" oder \"80,443\") oder "
+"als Port-Range (z.B. \"1024:2048\") ohne Anführungsstriche eingegeben werden"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Mitglied"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+"Mitgliedsschnittstellen mit niedrigeren Metriken werden zuerst verwendet."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+"Mitgliedsschnittstellen mit derselben Metrik werden einem Lastenausgleich "
+"unterzogen."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Mitglied, in Verwendung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+"Mitglieder sind Profile, die einer MWAN-Schnittstelle eine Metrik und ein "
+"Gewicht zuweisen."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Mitglieder dürfen nicht denselben Namen wie konfigurierte Schnittstellen, "
+"Richtlinien oder Regeln haben."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrik"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "MultiWAN-Manager"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "MultiWAN Manager - Diagnosen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "MultiWAN-Manager - Globale"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "MultiWAN Manager - Schnittstellen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "MultiWAN-Manager - Mitglieder"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "MultiWAN Manager - Benachrichtigen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "MultiWAN Manager - Übersicht"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "MultiWAN Manager - Richtlinien"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "MultiWAN Manager - Regeln"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "MultiWAN Manager - Status"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "MultiWAN Manager - Fehlerbehebung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3 erfordert, dass alle Schnittstellen eine eindeutige Metrik in /etc/"
+"config/network konfiguriert haben."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Name der IPset-Regel. Benötigt eine IPset-Regel in /etc/dnsmasq.conf (z.B. "
+"\"ipset=/youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+"Namen dürfen die Zeichen A-Z, a-z, 0-9, _ und keine Leerzeichen enthalten-"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+"Namen dürfen die Zeichen A-Z, a-z, 0-9, _ und keine Leerzeichen enthalten."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Namen dürfen höchstens 15 Zeichen lang sein."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Namen müssen mit den Schnittstellennamen in /etc/config/network "
+"übereinstimmen."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Nein"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Keine MWAN-Schnittstellen gefunden"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Keine Verfolgung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Keine Schnittstellenmetrik festgelegt!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Anmerkungen:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Hinweis"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Benachrichtigen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Offline"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Online"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Übersicht"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Ping-Zähler"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ping-Standard-Gateway"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Ping-Intervall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Ping-Intervall während Fehlererkennung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Ping-Intervall während der Wiederherstellung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Ping-Größe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Ping-Timeout"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping-Tracking-IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"Richtlinien sind Profile, in denen ein oder mehrere Mitglieder gruppiert "
+"werden, die steuern, wie Mwan3 den Datenverkehr verteilt."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"Richtlinien dürfen nicht denselben Namen haben wie konfigurierte "
+"Schnittstellen, Mitglieder oder Regeln"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Standardregel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Richtlinie, zugewiesen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Tragen Sie hier Ihre eigene mwan3-Aktion ein. Sie wird bei jedem netifd-"
+"Hotplug-Schnittstellenereignis auf Schnittstellen ausgeführt, für die mwan3 "
+"aktiviert ist."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Recovery Intervall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Recovery Latenzzeit [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Recovery Paketverlust [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Routing-Tabelle %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Routing-Tabelle nachschlagen"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Regeln basieren auf IP-Adresse, Port oder Protokoll."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Regeln werden von oben nach unten abgeglichen."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Regeln unterhalb einer passenden Regel werden ignoriert."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Regeln dürfen nicht denselben Namen wie konfigurierte Schnittstellen, "
+"Mitglieder oder Richtlinien haben."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"Regeln legen fest, welcher Datenverkehr eine bestimmte MWAN-Richtlinie "
+"verwenden soll."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Sekunden. Gültige Werte: 1-1000000. Standard bei 600 falls nicht gesetzt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Quelladresse"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Quellport"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Sticky"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Sticky-Timeout"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+"Unterstützt CIDR-Schreibweise (z.B. \"192.168.100.0/24\") ohne "
+"Anführungsstriche"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Aufgabe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "Die Datei bleibt auch während eines Sysupgrades erhalten."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+"Die erste Zeile des Skripts muss &#34;#!/bin/sh&#34; ohne Anführungszeichen "
+"lauten."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+"Es gibt drei wichtige Umgebungsvariablen, die an dieses Skript übergeben "
+"werden."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Zeigt die Metrik an, die dieser Schnittstelle in /etc/config/network "
+"zugeordnet ist"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Diese Datei wird als Shell-Skript interpretiert."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Dieser Hostname oder die IP-Adresse wird gepingt, um festzustellen, ob der "
+"Link aktiv oder inaktiv ist. Leer lassen, um die Schnittstelle als dauerhaft "
+"online anzusehen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+"In diesem Abschnitt können Sie den Inhalt von \"/etc/mwan3.user\" ändern."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Name oder IP-Adresse des Tracking Hosts"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Tracking-Methode"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Tracking-Sicherheit"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"Datenverkehr, der für bekannte (nicht default) Netzwerke bestimmt ist, wird "
+"von der Hauptroutingtabelle verarbeitet."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Traffic von der gleichen Quell-IP-Adresse, die zuvor dieser Regel innerhalb "
+"der festgelegten Timeout-Periode entspricht, wird die gleiche WAN-"
+"Schnittstelle verwenden"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"Datenverkehr, der einer Regel entspricht, aber alle WAN-Schnittstellen für "
+"diese Richtlinie ausgefallen sind, wird blockiert."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"Datenverkehr, der keiner Regel entspricht, wird mithilfe der "
+"Hauptroutingtabelle weitergeleitet."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Fehlerbehebung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Inhalt kann nicht gespeichert werden: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Laufzeit"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Schaue in der Datei /etc/protocols für Protokollbeschreibung mach"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Warnung"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Sobald alle Mitglieder der Richtlinie offline sind, wird dieses Verhalten "
+"für passenden Traffic verwendet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Ja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "blackhole (drop)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "verbunden (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "default (Haupt-Routing-Tabelle wird benutzt)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "getrennt (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "unerreichbar (rejectet)"
diff --git a/package/luci/applications/luci-app-mwan3/po/el/mwan3.po b/package/luci/applications/luci-app-mwan3/po/el/mwan3.po
new file mode 100644 (file)
index 0000000..bf5dd5b
--- /dev/null
@@ -0,0 +1,796 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2022-05-15 17:04+0000\n"
+"Last-Translator: MarioK239 <marios.k239@gmail.com>\n"
+"Language-Team: Greek <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/el/>\n"
+"Language: el\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 4.13-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d ώρα"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d λεπτό"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d λεπτά"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+#, fuzzy
+msgid "%d second"
+msgstr "%d δευτερόλεπτο"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d δευτερόλεπτα"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Παρακαλώ επιλέξτε --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Αποδεκτές τιμές: 1-1000. Προεπιλέγεται το 1 αν δεν οριστεί"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Αποδεκτές τιμές: 1-256. Προεπιλέγεται το 1 αν δεν οριστεί"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Κρίσιμο"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Αποσφαλμάτωση"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Διεύθυνση προορισμού"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Θύρα προορισμού"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Διαγνωστικά"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Ενεργοποιήθηκε"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Σφάλμα"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Εκτέλεση"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 και IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Διεπαφή"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Πολιτική"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Πρωτόκολλο"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Χρόνος λειτουργίας"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/en/mwan3.po b/package/luci/applications/luci-app-mwan3/po/en/mwan3.po
new file mode 100644 (file)
index 0000000..ab562f2
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-11-30 14:34+0000\n"
+"Last-Translator: rygle <pittos@post.com>\n"
+"Language-Team: English <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/en/>\n"
+"Language: en\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.3-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Enabled"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Overview"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/es/mwan3.po b/package/luci/applications/luci-app-mwan3/po/es/mwan3.po
new file mode 100644 (file)
index 0000000..31f0ade
--- /dev/null
@@ -0,0 +1,861 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2024-06-20 20:09+0000\n"
+"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\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.6-rc\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d hora"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minuto"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minutos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d segundo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d segundos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: nombre del dispositivo físico cuya interfaz subió o bajó (p. ej., "
+"\"eth0\" o \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: nombre de la acción que desencadenó este evento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: nombre de la interfaz que subió o bajó (p. ej., \"wan\" o \"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: es llamado por netifd y mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: solo lo llama mwan3track si el seguimiento ha fallado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+"* %s: mwan3track solo lo llama si el seguimiento se realizó correctamente"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Selección de interfaz --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- por favor elija --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Valores aceptables: 1-100. Esta cantidad de direcciones IP de seguimiento "
+"debe responder para que el enlace se considere activo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+"Valores aceptables: 1-1000. El valor predeterminado es 1 si no se establece"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+"Valores aceptables: 1-256. El valor predeterminado es 1 si no se establece"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Alerta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "También escanee esta tabla de enrutamiento para redes conectadas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Comprobar reglas de IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Comprobar calidad del enlace"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Ver tabla de enrutamiento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Recopilando los datos..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Se han guardado los contenidos."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Crítico"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Depurar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Dirección de destino"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Puerto de destino"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnósticos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Desactivado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"La interfaz inactiva se considerará activa después de tantas pruebas de ping "
+"exitosas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Tiempo de inactividad"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Emergencia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Activar seguimiento de SSL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Activado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Activa el registro de reglas de firewall (el registro global de mwan3 "
+"también debe estar activado)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Activa el registro de firewall global"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Activa el seguimiento de HTTPS en el puerto SSL 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Ingrese el valor en hexadecimal, comenzando con <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Error"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Ejecutar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Esperar el estado de la interfaz en el evento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Intervalo de fracaso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Latencia de falla [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Pérdida de paquetes fallidos [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Nivel de firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Mascara de Firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Purgar mesa de conexión"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+"Vaciar la tabla de conexiones de firewall global en los eventos de la "
+"interfaz"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globales"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Conceder acceso UCI para luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "intercambio en caliente si está caído"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Conexión en caliente si funciona"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 e IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Solo IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Solo IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Estado inicial"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interfaz"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Bajar interfaz"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Levantar interfaz"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"La interfaz se considerará inactiva después de tantas pruebas de ping "
+"fallidas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Es posible que las interfaces no compartan el mismo nombre que los miembros, "
+"las políticas o las reglas configurados."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Protocolo de Internet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Mantener el intervalo de falla"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Mantener el intervalo de falla de ping durante el estado de falla"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Último recurso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "Las líneas que comienzan con # son comentarios y no se ejecutan."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Se distribuye más tráfico a los interfaces miembros del balanceo de carga "
+"que tienen mayor peso."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Inicio sesión"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Nivel de registro"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Máx TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Puede ingresarse como uno o varios puertos (por ejemplo, \"22\" o "
+"\"80,443\") o como un puerto (por ejemplo, \"1024:2048\") sin comillas"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Miembro"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr "Las interfaces de miembros con métricas más bajas se utilizan primero."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+"Las interfaces de miembros con la misma métrica se equilibrarán en la carga."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Miembro utilizado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+"Los miembros son perfiles que adjuntan una métrica y un peso a una interfaz "
+"MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Los miembros no pueden compartir el mismo nombre que las interfaces, "
+"políticas o reglas configuradas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Métrica"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Administrador de MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "Administrador de MultiWAN - Diagnóstico"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Administrador de MultiWAN - Globales"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "Administrador de MultiWAN - Interfaces"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "Administrador de MultiWAN - Miembros"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Administrador de MultiWAN - Notificar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "Administrador de MultiWAN - Visión general"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "Administrador de MultiWAN - Políticas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "Administrador de MultiWAN - Reglas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Administrador de MultiWAN - Estado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "Administrador de MultiWAN - Solución de problemas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3 requiere que todas las interfaces tengan una métrica única configurada "
+"en /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Nombre de la regla IPset. Requiere la regla de IPset en /etc/dnsmasq.conf "
+"(por ejemplo, \"ipset=/youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+"Los nombres pueden contener caracteres A-Z, a-z, 0-9, _ y sin espacios-"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+"Los nombres pueden contener caracteres A-Z, a-z, 0-9, _ y sin espacios."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Los nombres deben tener 15 caracteres o menos."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Los nombres deben coincidir con el nombre de la interfaz que se encuentra "
+"en /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "No"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "No se encontraron interfaces MWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Sin seguimiento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "¡Sin métricas configuradas para el interfaz!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Notas:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Nota"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Notificar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Desconectado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Conectado"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Visión general"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Recuento de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ping a puerta de enlace predeterminada"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Intervalo de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Intervalo de ping durante la detección de fallos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Intervalo de ping durante la recuperación de fallos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Tamaño de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Tiempo de espera de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping de seguimiento de IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"Las políticas son perfiles que agrupan a uno o más miembros que controlan "
+"cómo Mwan3 distribuye el tráfico."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"Es posible que las políticas no compartan el mismo nombre que las "
+"interfaces, los miembros o las reglas configurados"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Política"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Política asignada"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Ponga su acción personalizada mwan3 aquí, se ejecutarán con cada evento de "
+"interfaz netifd hotplug en interfaces para las que mwan3 está activado."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Intervalo de recuperación"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Latencia de recuperación [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Pérdida de paquetes de recuperación [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Tabla de enrutamiento %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Tabla de enrutamiento de búsqueda"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regla"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Las reglas se basan en la dirección IP, el puerto o el protocolo."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Las reglas se validan de arriba a abajo."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Las reglas debajo de una regla coincidente se ignoran."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Es posible que las reglas no compartan el mismo nombre que las interfaces, "
+"los miembros o las políticas configurados."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"Las reglas especifican qué tráfico utilizará una política MWAN en particular."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Segundos. Valores aceptables: 1-1000000. El valor predeterminado es 600 si "
+"no se establece"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Dirección de origen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Puerto de origen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Estado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Pegajoso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Tiempo de espera pegajoso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+"Admite la notación CIDR (por ejemplo, \"192.168.100.0/24\") sin comillas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Tarea"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+"El archivo también se conserva durante la actualización con sysupgrade."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr "La primera línea del script debe ser &#34;#!/bin/sh&#34; sin comillas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "Hay tres variables de entorno principales que se pasan a este script."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Esto muestra la métrica asignada a esta interfaz en /etc/config/network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Este archivo se interpreta como un script de shell."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Se hará un ping a este nombre de host o dirección IP para determinar si el "
+"enlace está activo o inactivo. Deje en blanco para suponer que la interfaz "
+"está siempre en línea"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "Esta sección le permite modificar el contenido de \"/etc/mwan3.user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Seguimiento de nombre de host o dirección IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Método de seguimiento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Fiabilidad de seguimiento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"El tráfico destinado a redes conocidas (distintas de las predeterminadas) es "
+"manejado por la tabla de enrutamiento principal."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"El tráfico de la misma dirección IP de origen que coincidía anteriormente "
+"con esta regla dentro del período de tiempo de espera fijo utilizará la "
+"misma interfaz WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"El tráfico que coincida con una regla, pero tenga todas las interfaces WAN "
+"para esa política inactivas, se descartará."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"El tráfico que no coincide con ninguna regla se enruta mediante la tabla de "
+"enrutamiento principal."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Solución de problemas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "No se puede guardar el contenido: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Tiempo de actividad"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Ver el contenido de /etc/protocol para la descripción del protocolo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Advertencia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Cuando todos los miembros de la política están fuera de línea, utilice este "
+"comportamiento para el tráfico coincidente"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Si"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "agujero negro (caída)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "conectado (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "predeterminado (usar tabla de enrutamiento principal)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "desconectado (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "Interfaz abajo (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "Interfaz arriba (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "inalcanzable (rechazar)"
diff --git a/package/luci/applications/luci-app-mwan3/po/fi/mwan3.po b/package/luci/applications/luci-app-mwan3/po/fi/mwan3.po
new file mode 100644 (file)
index 0000000..7694fd8
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-06 10:10+0000\n"
+"Last-Translator: Hannu Nyman <hannu.nyman@iki.fi>\n"
+"Language-Team: Finnish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/fi/>\n"
+"Language: fi\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.4-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Valitse --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Hälytys"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kriittinen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Debug"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Kohdeosoite"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Kohdeportti"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostiikka"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Pois käytöstä"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Hätä"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Käytössä"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Virhe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 ja IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Vain IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Vain IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Tietoja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Sovitin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Kirjaaminen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Mittari"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Ei"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Huomaa"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Yleiskatsaus"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Käytäntö"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokolla"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Sääntö"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Lähdeosoite"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Lähdeportti"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Tila"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Sisältöä ei voi tallentaa: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Toiminta-aika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Varoitus"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Kyllä"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/fr/mwan3.po b/package/luci/applications/luci-app-mwan3/po/fr/mwan3.po
new file mode 100644 (file)
index 0000000..b72d724
--- /dev/null
@@ -0,0 +1,860 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-06-14 11:53+0000\n"
+"Last-Translator: viking76 <liaudetgael@gmail.com>\n"
+"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/fr/>\n"
+"Language: fr\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 4.18-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d heure"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minute"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minutes"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d seconde"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d secondes"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s : Nom de l'appareil physique dont l'interface est montée ou descendante "
+"(p. ex. \"eth0\" ou \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s : Nom de l'action qui a déclenché cet événement"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s : Nom de l'interface qui est Activé ou Désactivé (par exemple \"wan\" ou "
+"\"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "*%s: Appelé par netifd et mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %: Est seulement appelé par mwan3track si le suivi a échoué"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s: Est seulement appelé par mwan3track si le suivi a été réussi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Sélection d'interface --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Veuillez choisir --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Valeurs acceptables : 1-100. Ce nombre d'adresses IP de suivi doit répondre "
+"pour que le lien soit considéré comme"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Valeurs acceptables : 1-1000. Par défaut à 1 si non défini"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Valeurs acceptables : 1-256. Par défaut à 1 si non défini"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Alerte"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "Analysez également cette table de routage pour les réseaux connectés"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Vérifiez les règles IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Vérifier la qualité du lien"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Vérifier la table de routage"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Collecte de données ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Les contenus ont été enregistrés."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Critique"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Débogage"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Adresse de destination"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Port de destination"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostiques"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Désactivé"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"L'interface désactivée sera considérée comme opérationnelle après ces "
+"nombreux tests ping réussis"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Temps d'arrêt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Urgence"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Activer le suivi ssl"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Activé"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Active la journalisation des règles pare-feu (la journalisation globale du "
+"mwan3 doit également être activée)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Active la journalisation globale du pare-feu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Active le suivi https sur le port ssl 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Entrez la valeur en hexadécimal, en commençant par <code> 0x </code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Erreur"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Exécuter"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Attendez-vous à l’état de l’interface sur l’événement en place"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Intervalle de défaillance"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Latence d'échec [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Perte de paquets [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Niveau de journal de pare-feu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Masque pare-feu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Vider la table conntrack"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "Flush table conntrack pare-feu globale sur les événements d’interface"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globales"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Accorder tout les accès l'UCI pour luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 et IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "IPv4 uniquement"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "IPv6 uniquement"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Infos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "État initial"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Interface Arretée"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Interface Actif"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"L'interface sera considérée comme hors service après de nombreux échecs aux "
+"tests ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Les interfaces ne peuvent pas partager le même nom que les membres "
+"configurés, les politiques ou les règles."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Protocole Internet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Conserver l’intervalle d’échec"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Conserver l’intervalle d’échec de ping pendant l’état d’échec"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Dernier recours"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+"Les lignes commençant par # sont des commentaires et ne sont pas exécutées."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Les interfaces membres à charge équilibrée distribuent plus de trafic vers "
+"celles qui ont un poids plus élevé."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Journalisation"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Niveau de journalisation"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Max TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Peut être inscrit comme un seul ou plusieurs ports (par exemple « 22 » ou "
+"« 80,443 ») ou comme un portrange (par exemple « 1024:2048 ») sans guillemets"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Membre"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+"Les interfaces membres dont les métriques sont les plus faibles sont "
+"utilisées en premier."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr "Les interfaces membres ayant la même métrique seront équilibrées."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Membre utilisé"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+"Les membres sont des profils attachant une métrique et un poids à une "
+"interface MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Les membres ne peuvent pas porter le même nom que les interfaces, les "
+"politiques ou les règles configurées."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Métrique"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Gestionnaire MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "Gestionnaire MultiWAN - Diagnostic"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Gestionnaire MultiWAN - Globals"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "Gestionnaire MultiWAN - Interfaces"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "Gestionnaire MultiWAN - Membres"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Gestionnaire MultiWAN - Notification"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "MultiWAN Manager - Présentation"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "Gestionnaire MultiWAN - Politiques"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "Gestionnaire MultiWAN - Règles"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Gestionnaire MultiWAN - Statut"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "MultiWAN Manager - Dépannage"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3 exige que toutes les interfaces aient une métrique unique configurée "
+"dans /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Nom de la règle IPset. Nécessite la règle IPset dans /etc/dnsmasq.conf (par "
+"exemple « ipset=/youteub.com/youtube »)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+"Les noms peuvent contenir les caractères A-Z, a-z, 0-9, _ et aucun espace"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+"Les noms peuvent contenir les caractères A-Z, a-z, 0-9, _ et aucun espace."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Les noms ne doivent pas comporter plus de 15 caractères."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Les noms doivent correspondre au nom de l’interface trouvé dans /etc/config/"
+"network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Non"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Aucune interface MWAN trouvée"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Pas de suivi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Pas de métrique d'interface définie !"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Notes :"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Remarque"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Notifier"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Hors ligne"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "En ligne"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Vue d'ensemble"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Comptage de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Passerelle par défaut Ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Intervalle de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Intervalle Ping pendant la détection de panne"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Intervalle de ping pendant la récupération de l’échec"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Taille du ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Délai d’expiration ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping suivi IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"Les politiques sont des profils regroupant un ou plusieurs membres qui "
+"contrôlent la façon dont Mwan3 distribue le trafic."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"Les politiques ne peuvent pas porter le même nom que les interfaces, les "
+"membres ou les règles configurés"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Politique"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Politique assignée"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protocole"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Placez ici vos actions mwan3 personnalisées, elles seront exécutées à chaque "
+"événement netifd hotplug interface sur les interfaces pour lesquelles mwan3 "
+"est activé."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Intervalle de récupération"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Latence de récupération [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Récupération Paquet perdu[%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Table de routage %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "La table de routage de recherche"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Règle"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Les règles sont basées sur l'adresse IP, le port ou le protocole."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Les règles sont comparées de haut en bas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Les règles situées sous une règle correspondante sont ignorées."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Les règles ne peuvent pas porter le même nom que les interfaces, les membres "
+"ou les politiques configurés."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"Les règles précisent quel trafic utilisera une politique MWAN particulière."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Secondes. Valeurs acceptables : 1-1000000. Par défaut à 600 si elle n’est "
+"pas définie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Adresse source"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Port source"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "État"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Sticky"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Sticky timeout"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+"Supporte la notation CIDR (par exemple \"192.168.100.0/24\") sans les "
+"guillemets"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Tâche"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "Le fichier est également préservé lors de la mise à niveau du système."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+"La première ligne du script doit être &#34;#!/bin/sh&#34 ; sans guillemets."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+"Trois variables d’environnement principales sont transmises à ce script."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Cela affiche la métrique affectée à cette interface dans /etc/config/network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Ce fichier est interprété comme un script shell."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Ce nom d'hôte ou cette adresse IP fera l'objet d'une requête ping pour "
+"déterminer si le lien est actif ou non. Laisser vide pour supposer que "
+"l'interface est toujours en ligne"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+"Cette section vous permet de modifier le contenu de \"/etc/mwan3.user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Suivi du nom d'hôte ou de l'adresse IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Méthode de suivi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Suivi de la fiabilité"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"Le trafic destiné aux réseaux connus (autres que les réseaux par défaut) est "
+"traité par la table de routage principale."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Le trafic provenant de la même adresse IP source qui correspondait "
+"précédemment à cette règle pendant la période de délai d'attente obligatoire "
+"utilisera la même interface WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"Le trafic correspondant à une règle, mais dont toutes les interfaces WAN "
+"pour cette politique sont hors service, sera bloqué."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"Le trafic qui ne correspond à aucune règle est acheminé à l'aide de la table "
+"de routage principale."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Dépannage"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Impossible d'enregistrer le contenu : %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Durée de fonctionnement"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Voir le contenu de /etc/protocols pour la description des protocoles"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Avertissement"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Lorsque tous les membres de la stratégie sont hors connexion, utilisez ce "
+"comportement pour le trafic correspondant"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Oui"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "blackhole (ignoré)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "connecté (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "par défaut (utiliser la table de routage principale)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "déconnecté (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "siéteint (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "siallumé"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "inaccessible (rejeter)"
diff --git a/package/luci/applications/luci-app-mwan3/po/he/mwan3.po b/package/luci/applications/luci-app-mwan3/po/he/mwan3.po
new file mode 100644 (file)
index 0000000..8496f31
--- /dev/null
@@ -0,0 +1,796 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-12-10 18:45+0000\n"
+"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"Language-Team: Hebrew <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/he/>\n"
+"Language: he\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
+"n % 10 == 0) ? 2 : 3));\n"
+"X-Generator: Weblate 5.3-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- נא לבחור --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "פתחת יעד"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "מנשק"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "פרוטוקול"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "פתחה מאובטחת"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "מצב"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "מוצמד"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "זמן תפוגה להצמדה"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "תומך בתבנית CIDR (למשל: „192.168.100.0/24”) ללא מירכאות"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "משימה"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "הקובץ נשמר גם במהלך sysupgrade (שדרוג מערכת)."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr "השורה הראשונה של הסקריפט חייבת להיות &#34;#!/bin/sh&#34; בלי המירכאות."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "יש שלושה משתנים סביבתיים גלובליים שמועברים לסקריפט הזה."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr "מציג את המדד שמוקצה למנשק הזה תחת ‎/etc/config/network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "קובץ זה מפוענח בתור סקריפט מעטפת."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "אזהרה"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/hi/mwan3.po b/package/luci/applications/luci-app-mwan3/po/hi/mwan3.po
new file mode 100644 (file)
index 0000000..0dc2a20
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2020-01-14 15:23+0000\n"
+"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
+"Language-Team: Hindi <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/hi/>\n"
+"Language: hi\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 3.11-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "कृपया चुने"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/hu/mwan3.po b/package/luci/applications/luci-app-mwan3/po/hu/mwan3.po
new file mode 100644 (file)
index 0000000..fbb583a
--- /dev/null
@@ -0,0 +1,823 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2022-12-14 00:53+0000\n"
+"Last-Translator: Gajdos Tamás <gajdipajti@gmail.com>\n"
+"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/hu/>\n"
+"Language: hu\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 4.15-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d óra"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d perc"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d perc"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+#, fuzzy
+msgid "%d second"
+msgstr "%d másodperc"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d másodperc"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Kérem válasszon --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Elfogadható értékek: 1-100. Ennyi követő IP-címnek kell válaszolnia, hogy a "
+"kapcsolat felkapcsoltnak legyen tekintve"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Elfogadható értékek: 1-1000. Alapértelmezetten 1, ha nincs beállítva"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Elfogadható értékek: 1-256. Alapértelmezetten 1, ha nincs beállítva"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Riasztás"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+"Vizsgálja ezt az útválasztási táblázatot is a kapcsolódott hálózatoknál"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "IP-szabályok ellenőrzése"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Kapcsolatminőség ellenőrzése"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Útválasztási táblázat ellenőrzése"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritikus"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Hibakeresés"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Célcím"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Célport"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnosztika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Letiltva"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"A lekapcsolt csatoló felkapcsoltnak lesz tekintve ennyi sikeres pingelési "
+"teszt után"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Vészhelyzet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "SSL követés engedélyezése"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Engedélyezve"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Engedélyezi a tűzfalszabály naplózását (a globális mwan3 naplózást is "
+"engedélyezni kell)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Engedélyezi a globális tűzfalnaplózást"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Engedélyezi a HTTPS követést a 443-as SSL porton"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Érték megadása hexadecimálisan, <code>0x</code>-szel kezdve"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Hiba"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Végrehajtás"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Elvárt csatolóállapot a felkapcsolás eseménynél"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Sikertelenség időköze"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Tűzfal naplószintje"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Tűzfal maszkja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Kapcsolatkövető táblázat kiürítése"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+"Globális tűzfal kapcsolatkövető táblázat kiürítése a csatolóeseményeknél"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globálisak"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Gyorsleválasztási csatolólekapcsolás"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Gyorsleválasztási csatolófelkapcsolás"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Információ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Kezdeti állapot"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Csatoló"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Csatoló lekapcsolása"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Csatoló felkapcsolása"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"A csatoló lekapcsoltnak lesz tekintve ennyi sikertelen pingelési teszt után"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Internetprotokoll"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Sikertelenség időközének megtartása"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+"Pingelés sikertelenségi időközének megtartása a sikertelen állapot közben"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Végső megoldás"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Naplózás"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Naplózási szint"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Legnagyobb élettartam"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Megadható egyedülálló vagy több portként (például „22” vagy „80,443”) vagy "
+"porttartományként (például „1024:2048”), idézőjelek nélkül"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Tag"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Használt tag"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Mérőszám"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Az IPset szabály neve. Egy IPset szabályt igényel az /etc/dnsmasq.conf "
+"fájlban (például „ipset=/youtube.com/youtube”)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Nem"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Nem találhatók MWAN csatolók"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Figyelmeztetés"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Nem érhető el"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Elérhető"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Pingelés darabszáma"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Alapértelmezett átjáró pingelése"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Pingelés időköze"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Pingelés időköze a sikertelen állapot közben"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Pingelés időköze a sikertelen visszaállítás közben"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Pingelés mérete"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Pingelés időkorlátja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Követési IP pingelése"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Házirend"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Hozzárendelt házirend"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Visszaállítás időköze"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "%d. útválasztási táblázat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Útválasztási táblázat keresése"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Szabály"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Másodpercek. Elfogadható értékek: 1-1000000. Alapértelmezetten 600, ha nincs "
+"beállítva"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Forráscím"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Forrásport"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Ragadós"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Ragadós időkorlátja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+"Támogatja a CIDR jelölést (például „192.168.100.0/24”), idézőjelek nélkül"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Feladat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Ez jeleníti meg az ehhez a csatolóhoz hozzárendelt mérőszámot az /etc/config/"
+"network helyen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Ez a gépnév vagy IP-cím lesz pingelve annak meghatározásához, hogy a "
+"kapcsolat fel vagy le van kapcsolva. Hagyja üresen annak feltételezéséhez, "
+"hogy a csatoló mindig elérhető"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Követési gépnév vagy IP-cím"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Követési módszer"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Követési megbízhatóság"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Az a forgalom, amely ugyanarról az IP-címről származik, amely korábban "
+"egyezett ezzel a szabállyal a ragadós időkorláton belül, ugyanazt a WAN "
+"csatolót fogja használni"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Hibaelhárítás"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Nem lehet elmenteni a tartalmat: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Futási idő"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Az /etc/protocols tartalmának megtekintése a protokoll-leírásnál"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Figyelmeztetés"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Ha az összes házirendtag nem érhető el, akkor használja ezt a viselkedést az "
+"egyező forgalomnál"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Igen"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "fekete lyuk (eldobás)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "kapcsolódva (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "alapértelmezett (fő útválasztási táblázat használata)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "lecsatlakozva (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "csatolólekapcsolás (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "csatolófelkapcsolás (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "elérhetetlen (visszautasítás)"
diff --git a/package/luci/applications/luci-app-mwan3/po/it/mwan3.po b/package/luci/applications/luci-app-mwan3/po/it/mwan3.po
new file mode 100644 (file)
index 0000000..b6d50e0
--- /dev/null
@@ -0,0 +1,798 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-06-13 13:11+0000\n"
+"Last-Translator: beppeilgommista <enrico.ghignatti@gmail.com>\n"
+"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/it/>\n"
+"Language: it\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.6-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d ora"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minuto"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minuti"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d secondo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d secondi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: nome del dispositivo fisico la cui interfaccia si è accesa o spenta (es. "
+"\"eth0\" o \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: nome dell'azione che ha scatenato l'evento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: nome dell'interfaccia che si è accesa o spenta (es. \"wan\" o \"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Selezione dell'interfaccia --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Scegli --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Valori accettati: 1-1000 (1 se non configurato)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Valori accettati: 1-256 (1 se non configurato)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Allarme"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "I contenuti sono stati salvati."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Critico"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Debug"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Indirizzo di destinazione"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Porta di destinazione"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostica"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Disabilitato"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Emergenza"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Abilitato"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Errore"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 e IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Solo IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Solo IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interfaccia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Registrazione (log)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrica"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "No"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Avviso"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Offline"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Online"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Riepilogo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Politica"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protocollo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regola"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Indirizzo di origine"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Porta di origine"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Stato"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Impossibile salvare i contenuti: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Tempo di attività"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Avviso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Si"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/ja/mwan3.po b/package/luci/applications/luci-app-mwan3/po/ja/mwan3.po
new file mode 100644 (file)
index 0000000..cfebeaf
--- /dev/null
@@ -0,0 +1,823 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2021-08-04 20:24+0000\n"
+"Last-Translator: Satoru Yoshida <ramat@ram.ne.jp>\n"
+"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/ja/>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.8-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d 時間"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d 分"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d 分"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+#, fuzzy
+msgid "%d second"
+msgstr "%d 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- 選択してください --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"利用可能な値: 1-100。上記のトラッキング IP の合計個数のうち、Up 状態と判定す"
+"るためにに必要な、レスポンスが返されたトラッキング IP アドレスの個数です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "利用可能な値: 1-1000。空欄の場合のデフォルトは1です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "利用可能な値: 1-256。空欄の場合のデフォルトは1です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "アラート"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+"接続されたネットワークのために、追加でスキャンするルーティングテーブルです。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "IP ルールのチェック"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "リンク品質のチェック"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "ルーティング テーブルのチェック"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "内容が保存されました。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "重大"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "デバッグ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "宛先アドレス"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "宛先ポート"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "診断"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "無効"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Down 状態のインターフェースが Up 状態と判断されるまでに要する ping テストの成"
+"功回数です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "緊急"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "SSL トラッキングを有効化"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "有効"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"ファイアウォール ルールのログ記録を有効にします。(グローバルな mwan3 ログ記"
+"録も有効にする必要があります)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "グローバルなファイアウォールのログ記録を有効にします。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "SSL ポート 443 で https トラッキングを有効化"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "<code>0x</code> で始まる16進数の値を入力してください。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "エラー"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "実行"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Up イベント時に予想されるインターフェースの状態です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "障害検出 インターバル"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "ファイアウォール ログレベル"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "ファイアウォール マスク"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "conntrack テーブルのクリア"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+"インターフェース イベント時にグローバル ファイアウォール conntrack テーブルを"
+"クリアします。"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "全般"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "luci-app-mwan3にUCIアクセスを許可"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "ホットプラグ ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "ホットプラグ ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4及びIPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "IPv4のみ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "IPv6のみ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "情報"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "初期状態"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "インターフェース"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "インターフェース Down"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "インターフェース Up"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"インターフェースが Down 状態と判断されるまでに要する ping テストの失敗回数で"
+"す。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "インターネット プロトコル"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "最終手段"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "ロギング"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "ログレベル"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "最大 TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"単一または複数のポート(例: \"22\" または \"80,443\")、あるいはポートの範囲"
+"(例: \"1024:2048\")を、クオーテーションなしで指定することができます。"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "メンバー"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "使用されるメンバー"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "メトリック"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"IPset ルールの名前です。このルールは、 /etc/dnsmasq.conf で必要です。(例: "
+"\"ipset=/youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "いいえ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "MWAN インターフェースが見つかりません"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "注意"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "オフライン"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "オンライン"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "概要"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Ping 回数"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "デフォルト ゲートウェイへのping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Ping インターバル"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "障害検出中の Ping 実行間隔です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "障害復旧中の Ping 実行間隔です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Ping サイズ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Ping タイムアウト"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "トラッキング IP へのping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "ポリシー"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "アサイン済みポリシー"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "プロトコル"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "障害復旧 インターバル"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "ルーティングテーブル %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "ルーティングテーブルの検索"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "ルール"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr "秒。利用可能な値: 1-1000000。空欄の場合のデフォルト値は600です。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "送信元アドレス"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "送信元ポート"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "ステータス"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Sticky"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Sticky タイムアウト"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "CIDR 表記のサポート(例: \"192.168.100.0/24\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "タスク"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"/etc/config/network で、このインターフェースに割り当てられたメトリックです。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"リンクの Up または Down 状態を判定するために、このホスト名または IP アドレス"
+"に対して Ping の送信が行われます。常にオンラインとする場合、空欄のままにしま"
+"す。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "トラッキング ホスト名または IP アドレス"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "トラッキング方式"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "トラッキングの信頼性"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"以前このルールにマッチした同じアクセス元 IP アドレスからのトラフィックが、再"
+"度 Sticky 制限時間内にマッチした場合には、同じ WAN インターフェースが使用され"
+"ます。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "トラブルシューティング"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "内容を保存できません: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "稼働時間"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "プロトコルの説明については、 /etc/protocols の内容を確認してください"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "警告"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"ポリシーの全メンバーがオフラインの場合、合致したトラフィックに対してこのふる"
+"まいが使用されます。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "はい"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "blackhole (drop)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "接続時 (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "デフォルト(メインのルーティング テーブルを使用)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "切断時 (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "unreachable (reject)"
diff --git a/package/luci/applications/luci-app-mwan3/po/ko/mwan3.po b/package/luci/applications/luci-app-mwan3/po/ko/mwan3.po
new file mode 100644 (file)
index 0000000..bd50066
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-10-04 07:12+0000\n"
+"Last-Translator: Wonchul Kang <teshi85@gmail.com>\n"
+"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/ko/>\n"
+"Language: ko\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.1-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- 선택하세요 --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "경고"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "디버그"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "목적지 주소"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "비활성화"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "활성화"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "에러"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4와 IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "IPv4 전용"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "IPv6 전용"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "정보"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "인터페이스"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "오프라인"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "온라인"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "개요"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "프로토콜"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "상태"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "가동시간"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "경고"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/lt/mwan3.po b/package/luci/applications/luci-app-mwan3/po/lt/mwan3.po
new file mode 100644 (file)
index 0000000..5d6aecc
--- /dev/null
@@ -0,0 +1,815 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2024-06-22 23:09+0000\n"
+"Last-Translator: \"Džiugas Jan.\" <dziugas1959@hotmail.com>\n"
+"Language-Team: Lithuanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/lt/>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
+"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
+"1 : 2);\n"
+"X-Generator: Weblate 5.6-rc\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d valanda"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minutė"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minutės"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d sekundė"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d sekundės"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Šio fizinio įrenginio pavadinimas, kurio sąsają ir/arba sietuvas pakilo "
+"arba nusileido (pvz: „eth0“ arba „wwan0“)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: Šio veiksmo pavadinimas, dėl kurio įvyko šis įvykis"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Šio/-s sąsajos ir/arba sietuvo pavadinimas, kuris pakilo arba nusileido "
+"(pvz: „wan“ arba „wwan“)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: Yra pavadintas pagal „netifd“ ir „mwan3track“"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: Yra pavadintas tik pagal „mwan3track“, jeigu sekimas nepavyko"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+"* %s: Yra pavadintas tik pagal „mwan3track“, jeigu sekimas buvo sėkmingas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Sąsają ir/arba Sietuvo pasirinkimas --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Prašome pasirinkti --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Tinkamos reikšmės: 1-100. Toks kiekis sekiamų IP adresų turi atsakyti, kad "
+"sujungimas būtų skaičiuojamas kaip aktyvus"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Tinkamos reikšmės: 1-1000. Numatomas į 1, jeigu nenustatytas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Tinkamos reikšmės: 1-256. Numatomas į 1, jeigu nenustatytas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Įspėti"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "Tai pat, skenuoti šią kelvados lentelę dėl sujungtų tinklų"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Patikrinti IP taisykles"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Patikrinti sujungimo kokybę"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Patikrinti kelvados lentelę"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Renkami duomenys..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Turinys buvo išsaugotas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritinė/-is"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Derinimas/Trukdžių šalinimas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Paskirties/Kelionės tikslo adresas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Paskirties/Kelionės tikslo prievadas"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Išjungta/Neįgalinta (-as/-i)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Kritinė situacija"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Įjungti „SSL“ sekimą"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Įjungta/Įgalinta (-as/-i)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Įjungia/Įgalina užkardos žurnalinimo taisyklę (visuotinis „mwan3“ "
+"žurnalinimas tai pat, turi būti įjungtas/įgalintas)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Įjungia/Įgalina visuotinį užkardos žurnalinimą"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Įjungia/Įgalina „HTTPS“ sekimą ant „SSL“ prievado 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Klaida"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Vykdyti/Paleisti"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Trikties/Gedimo intervalas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Trikties/Gedimo intervalas [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Trikties/Gedimo paketo praradimas [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Užkardos žurnalo lygis"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Užkardos tinklavimo „kaukė“ – adresų segregatorius"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Visuotiniai"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Suteikti „UCI“ prieigą – „luci-app-mwan3“"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "„IPset“"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4 – Interneto protokolo versija 4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 ir IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Tik IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6 – Interneto protokolo versija 6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Tik IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Informacija"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Pradinė būsena"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Sąsaja ir/arba Sietuvas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Sąsają ir/arba Sietuvas neveikia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Sąsają ir/arba Sietuvas veikia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"Sąsają ir/arba Sietuvas bus skaitomas neveikiančiu, po šių nepavykusių ryšio "
+"atsako testų kiekio"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Sąsają ir/arba Sietuvas galimai nebendrina tokį pat pavadinimą kaip "
+"konfigūruoti nariai, politikos ar taisyklės."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Interneto protokolas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Žurnalinimas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Žurnalo lygis"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Maksimalus „TTL“"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Narys"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Naudotas narys"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrinė"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Diagnostika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Visuotiniai"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Sąsajos ir/arba Sietuvai"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Nariai"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Pranešti"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Peržiūra"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Politika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Taisyklės"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Būklė/Būsena"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "„MultiWAN“ tvarkytuvas/tvarkytuvė – Trikdžių/Gedimų derinimas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Pavadinimai turi sutapti su sąsajos ir/arba sietuvo pavadinimu, kuris "
+"randasi – „/etc/config/network“."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Ne"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Nėra „MWAN“ sąsajų ir/arba sietuvų rasta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Jokio sekimo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Užrašai:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Pranešimas"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Pranešti"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Neprisijungęs/-usi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Prisijungęs/-usi"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Apžiūra"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Ryšio atsako skaičiavimas/-ius"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ryšio atsako numatyta tinklo tarpuvartė"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Ryšio atsako intervalas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Ryšio atsako intervalas per trikties gedimo aptikimą"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Ryšio atsako intervalas per trikties gedimo atsigavimą"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Ryšio atsako dydis"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Ryšio atsakas užklausos laikas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ryšio atsako sekimo IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Politika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Politika priskirta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokolas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Atsigavimo intervalas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Atsigavimo delsà [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Taisyklė"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Sekundės. Tinkamos reikšmės: 1-1000000. Numatoma į 600-ai, jeigu nenustatyta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Šaltinio adresas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Šaltinio prievadas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Būklė/Būsena"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Lipnus"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Užduotis"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Sekimo metodas/būdas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Sekimo patikimumas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Nepavyko išsaugoti turinį: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Aktyvumo laikas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Peržiūrėti „/etc/protocols“ aprašymo turiniu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Įspėjimas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Taip"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "juodoji skylė (mesti)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "prisijungta („mwan3“)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "Numatytas/-a (naudoti pagrindinį kelvados lentelę)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "atsijungta („mwan3“)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "„ifdown“ („netifd“)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "„ifup“ („netifd“)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "nepasiekiamas (atmesti)"
diff --git a/package/luci/applications/luci-app-mwan3/po/mr/mwan3.po b/package/luci/applications/luci-app-mwan3/po/mr/mwan3.po
new file mode 100644 (file)
index 0000000..0276700
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2020-02-12 11:01+0000\n"
+"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
+"Language-Team: Marathi <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/mr/>\n"
+"Language: mr\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 3.11-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "गंतव्य पोर्ट"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "अक्षम"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "सक्षम केले"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "इंटरफेस"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "नाही"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "ऑफलाइन"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "ऑनलाईन"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "प्रोटोकॉल"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "स्रोत पोर्ट"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "होय"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/ms/mwan3.po b/package/luci/applications/luci-app-mwan3/po/ms/mwan3.po
new file mode 100644 (file)
index 0000000..1a316ae
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-22 09:21+0000\n"
+"Last-Translator: Abdul Muizz Bin Abdul Jalil <abmuizz@gmail.com>\n"
+"Language-Team: Malay <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/ms/>\n"
+"Language: ms\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.4-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d Jam"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d saat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Alamat destinasi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Dibolehkan"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Antara muka"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Tidak"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Ya"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/nb_NO/mwan3.po b/package/luci/applications/luci-app-mwan3/po/nb_NO/mwan3.po
new file mode 100644 (file)
index 0000000..ad5abc0
--- /dev/null
@@ -0,0 +1,795 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-26 16:51+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/nb_NO/>\n"
+"Language: nb_NO\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.4-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d time"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minutt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minutter"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d sekund"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Advarsel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Samler data …"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Innholdet har blitt lagret."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritisk"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Avlusing"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Målport"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Avskrudd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Påskrudd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Feil"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Grensesnitt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrisk"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Oppgave"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Advarsel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/pl/mwan3.po b/package/luci/applications/luci-app-mwan3/po/pl/mwan3.po
new file mode 100644 (file)
index 0000000..5475e99
--- /dev/null
@@ -0,0 +1,856 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-11-07 22:37+0000\n"
+"Last-Translator: Matthaiks <kitynska@gmail.com>\n"
+"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/pl/>\n"
+"Language: pl\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.2-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d godzin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minut"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minut"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d sekunda"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d sekund"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Nazwa urządzenia fizycznego, którego interfejs włączył się lub wyłączył "
+"się (np. \"eth0\" lub \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: Nazwa akcji, która wywołała to zdarzenie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Nazwa interfejsu, który włączył się lub wyłączył się (np. \"wan\" lub "
+"\"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: Jest wywoływane przez netifd i mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+"* %s: Jest wywoływane przez mwan3track tylko wtedy, gdy śledzenie nie "
+"powiodło się"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+"* %s: jest wywoływane przez mwan3track tylko wtedy, gdy śledzenie się "
+"powiodło"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Wybór interfejsu --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Proszę wybrać --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Dopuszczalne wartości: 1-100. Tyle śledzących adresów IP musi odpowiedzieć, "
+"aby połączenie zostało uznane za aktywne"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Akceptowane wartości: 1-1000. Domyślnie 1, jeśli nie ustawiono"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Akceptowane wartości: 1-256. Domyślnie 1, jeśli nie ustawiono"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Alarm"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+"Przeskanuj również tę tablicę trasowania w poszukiwaniu podłączonych sieci"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Sprawdź reguły IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Sprawdź jakość łącza"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Sprawdź tablicę trasowania"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Zbieranie danych..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Zawartość została zapisana."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Krytyczny"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Debugowanie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Adres docelowy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Port docelowy"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostyka"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Wyłączone"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Opuszczony interfejs zostanie uznany za podniesiony po wielu udanych testach "
+"ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Przestój"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Ratunkowy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Włącz śledzenie SSL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Włączone"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Włącza rejestrowanie reguł zapory (globalne rejestrowanie mwan3 również musi "
+"być włączone)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Włącza globalne logowanie zapory sieciowej"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Włącza śledzenie https na porcie SSL 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Wprowadź wartość szesnastkową, zaczynając od <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Błąd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Wykonaj"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Oczekiwany stan interfejsu przy zdarzeniu poprzedzającym"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Interwał awarii"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Opóźnienie błędu [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Błąd utraty pakietów [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Poziom logowania zapory sieciowej"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Maska zapory sieciowej"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Opróżnij tabelę conntrack"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+"Opróżnij globalną tabelę conntrack zapory sieciowej na zdarzeniach interfejsu"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globalne"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Przyznaj luci-app-mwan3 dostęp do UCI"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Przełącznik, jeśli odłączono"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Przełącznik, jeśli podłączono"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 i IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Tylko IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Tylko IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Informacja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Stan początkowy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interfejs"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Interfejs padł"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Interface wstał"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "Interfejs zostanie uznany za martwy po wiele nieudanych ping testach"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Interfejsy nie mogą mieć tej samej nazwy co skonfigurowani członkowie, "
+"zasady lub reguły."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Protokół internetowy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Zachowaj interwał awarii"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Zachowanie odstępu czasu między awariami pingów podczas stanu awarii"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Ostatnia wizyta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "Wiersze zaczynające się od # są komentarzami i nie są wykonywane."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Interfejsy członkowskie o zrównoważonym obciążeniu rozprowadzają większy "
+"ruch na te o większej wadze."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Logowanie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Poziom logowania"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Maksymalny TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Może być wprowadzony jako pojedynczy lub wielokrotny port (np. \"22\" lub "
+"\"80,443\") lub jako portrange (np. \"1024:2048\") bez cudzysłowów"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Członek"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+"Interfejsy członkowskie o niższych metrykach są wykorzystywane w pierwszej "
+"kolejności."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+"Interfejsy członkowskie z tą samą metryką będą równoważone pod względem "
+"obciążenia."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Członek używa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr "Członkami są profile przypisujące metrykę i wagę do interfejsu MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Członkowie nie mogą mieć tej samej nazwy co skonfigurowane interfejsy, "
+"zasady lub reguły."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metryka"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Menedżer MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "Menedżer MultiWAN - Diagnostyka"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Menedżer MultiWAN - Globalne"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "Menedżer MultiWAN - Interfejsy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "Menedżer MultiWAN - Członkowie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Menedżer MultiWAN - Powiadomienie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "Menedżer MultiWAN - Przegląd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "Menedżer MultiWAN - Zasady"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "Menedżer MultiWAN - Reguły"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Menedżer MultiWAN - Status"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "Menedżer MultiWAN - Rozwiązywanie problemów"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3 wymaga, aby wszystkie interfejsy miały unikalną metrykę skonfigurowaną "
+"w /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Nazwa reguły IPset. Wymaga reguły IPset w /etc/dnsmasq.conf (np. \"ipset=/"
+"youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "Nazwy mogą zawierać znaki A-Z, a-z, 0-9, _ oraz brak spacji-"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "Nazwy mogą zawierać znaki A-Z, a-z, 0-9, _ oraz brak spacji."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Nazwy muszą składać się z 15 lub mniej znaków."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Nazwa musi być zgodna z nazwą interfejsu znajdującą się w /etc/config/"
+"network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Nie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Nie znaleziono interfejsu MWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Bez śledzenia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Brak ustawionej metryki interfejsu!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Uwagi:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Spostrzeżenie"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Powiadomienie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Offline"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Online"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Przegląd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Liczba pingów"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ping do bramy domyślnej"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Interwał pingu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Interwał pingu podczas wykrywania awarii"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Interwał pingu podczas odzyskiwania po awarii"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Rozmiar pingów"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Limit czasu pingowania"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Śledzenie pingów IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"Zasady to profile grupujące co najmniej jednego członka kontrolującego "
+"sposób dystrybucji ruchu przez Mwan3."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"Zasady nie mogą mieć tej samej nazwy co skonfigurowane interfejsy, "
+"członkowie lub reguły"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Polityka"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Przypisane zasady"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokół"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Umieść tutaj swoje własne akcje mwan3, będą one wykonywane przy każdym "
+"zdarzeniu interfejsu netifd hotplug na interfejsach, dla których włączono "
+"mwan3."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Interwał odzyskiwania"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Opóźnienie odzyskiwania [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Utrata pakietów odzyskiwania [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Tablica trasowania %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Przeglądanie tablicy trasowania"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Reguła"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Reguły oparte są na adresie IP, porcie lub protokole."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Reguły są dopasowywane od góry do dołu."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Reguły poniżej reguły dopasowania są ignorowane."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Reguły nie mogą mieć tej samej nazwy co skonfigurowane interfejsy, "
+"członkowie lub zasady."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"Reguły określają, który ruch będzie korzystał z określonej zasady MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Sekundy. Dopuszczalne wartości: 1-1000000. Wartość domyślna to 600, jeśli "
+"nie jest ustawiona"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Adres źródłowy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Port źródłowy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Przyklejony"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Limit czasu przyklejenia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "Obsługuje notację CIDR (np. \"192.168.100.0/24\") bez cudzysłowów"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Zadanie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "Plik ten jest również zachowany podczas sysupgrade."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+"Pierwszym wierszem skryptu musi być &#34;#!/bin/sh&#34; bez cudzysłowów."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "Do tego skryptu przekazywane są trzy główne zmienne środowiskowe."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr "Wyświetla metrykę przypisaną do tego interfejsu w /etc/config/network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Plik ten jest interpretowany jako skrypt powłoki."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Ta nazwa hosta lub adres IP będzie pingowany w celu określenia, czy "
+"połączenie jest aktywne lub nie. Pozostaw puste pole, aby założyć, że "
+"interfejs jest zawsze online"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "Ta sekcja pozwala na modyfikację zawartości pliku \"/etc/mwan3.user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Śledzenie nazwy hosta lub adresu IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Metoda śledzenia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Niezawodność śledzenia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"Ruch przeznaczony dla znanych (innych niż domyślne) sieci jest obsługiwany "
+"przez główną tablicę trasowania."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Ruch z tego samego źródłowego adresu IP, który wcześniej był zgodny z tą "
+"regułą w ramach limitu czasu, będzie wykorzystywał ten sam interfejs WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"Ruch jest zgodny z regułą, ale wszystkie interfejsy WAN tej zasady przestają "
+"działać i ruch zostanie zablokowany."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"Ruch niepasujący do żadnej reguły jest kierowany przy użyciu głównej tablicy "
+"trasowania."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Rozwiązywanie problemów"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Nie można zapisać zawartości: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Czas pracy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Zobacz zawartość/etc/protocols dla opisu protokołu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Ostrzeżenie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Gdy wszyscy członkowie zasad są offline, użyj tego zachowania dla "
+"dopasowanego ruchu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Tak"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "czarna dziura (porzuć)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "podłączone (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "domyślnie (użyj głównej tablicy trasowania)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "odłączone (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "jeśli w dół (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "jeśli w górę (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "nieosiągalny (odrzucanie)"
diff --git a/package/luci/applications/luci-app-mwan3/po/pt/mwan3.po b/package/luci/applications/luci-app-mwan3/po/pt/mwan3.po
new file mode 100644 (file)
index 0000000..1f4294a
--- /dev/null
@@ -0,0 +1,849 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-08 01:06+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
+"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/pt/>\n"
+"Language: pt\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.4-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d hora"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minuto"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minutos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d segundo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d segundos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Nome do aparelho físico cuja interface foi ativada ou desativada (por "
+"exemplo, \"eth0\" ou \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: nome da ação que desencadeou este evento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"% s: nome da interface que foi ativada ou desativada (por exemplo, \"wan\" "
+"ou \"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: é chamado por netifd e mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: só é chamado por mwan3track se o rastreamento falhar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s: só é chamado por mwan3track se o rastreamento foi bem-sucedido"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Seleção da interface --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Por favor escolha --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Valores aceitáveis: 1-100. Esta quantidade de endereços IP de rastreamento "
+"devem responder para que o link seja considerado up"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Valores aceitáveis: 1-1000. Predefinido como 1 se não estiver definido"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Valores aceitáveis: 1-256. Predefinido como 1 se não estiver definido"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Alerta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "Verificar também esta tabela de roteamento para redes conectadas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Verificar regras de IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Verificar a qualidade da ligação"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Verificar tabela de roteamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "A coletar dados..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Os conteúdos foram gravados."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Critico"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Depuração"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Endereço de destino"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Porta de destino"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnósticos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Desativado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"A interface abaixada será considerada up após esta quantidade de testes de "
+"ping com sucesso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Tempo de inatividade"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Emergência"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Ativar rastreamento de ssl"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Ativado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Ativa o registro de regras de firewall (o registro mwan3 global também deve "
+"estar ativado)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Ativa o log de firewall global"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Permite o rastreamento https na porta ssl 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Introduza o valor em hexadecimal, começando por <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Erro"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Executar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Esperar o estado da interface no evento up"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Intervalo de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Latência de falha [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Perda de pacotes de falhas [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Nível de log do firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Máscara de firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Limpar tabela de conntrack"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "Limpar tabela de firewall conntrack global em eventos de interface"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globais"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Conceder acesso UCI ao luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "ifdown de hotplug"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "ifup de hotplug"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 e IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Apenas IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Apenas IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Estado inicial"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Interface down"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Interface up"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"A interface será considerada down após esta quantidade testes de ping "
+"falhados"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"As interfaces não podem ter o mesmo nome que os membros, políticas ou regras "
+"configurados."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Protocolo Internet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Manter intervalo de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Manter o intervalo de falha de ping durante o estado de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Último recurso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "As linhas que começam com # são comentários e não são executadas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"As interfaces de membros com carga balanceada distribuem mais tráfego para "
+"aqueles com pesos maiores."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Logging"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Nível de log"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "TTL máximo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Pode ser inserido como um único ou múltiplos porto(s) (por exemplo \"22\" ou "
+"\"80,443\") ou como um portrange (por exemplo \"1024:2048\") sem as aspas"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Membro"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+"As interfaces dos membros com métricas mais baixas são as primeiras a serem "
+"usadas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+"As interfaces dos membros com a mesma métrica terão balanceamento de carga."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Membro usado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+"Os membros são perfis que anexam uma métrica e um peso a uma interface MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Os membros não podem compartilhar o mesmo nome das interfaces, políticas ou "
+"regras configuradas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Métrica"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Gestor de MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "Gestor de MultiWAN - Diagnósticos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Gestor de MultiWAN - Globais"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "Gestor de MultiWAN - Interfaces"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "Gestor de MultiWAN - Membros"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Gestor de MultiWAN - Notificar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "Gestor de MultiWAN - Visão Geral"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "Gestor de MultiWAN - Políticas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "Gestor de MultiWAN - Regras"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Gestor de MultiWAN - Esatdo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "Gestor de MultiWAN - Solução de problemas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"O Mwan3 requer que todas as interfaces tenham uma métrica única configurada "
+"em /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Nome da regra do IPset. Requer regra de IPset em /etc/dnsmasq.conf (ex. "
+"\"ipset=/youtube.pt/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "Os nomes podem conter caracteres A-Z, a-z, 0-9, _ e sem espaços-"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "Os nomes podem conter caracteres A-Z, a-z, 0-9, _ e sem espaços."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Os nomes devem ter 15 caracteres ou menos."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Os nomes devem corresponder ao nome da interface encontrado em /etc/config/"
+"network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Não"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Nenhuma interface MWAN encontrada"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Sem rastreamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Nenhuma métrica de interface definida!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Notas:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Aviso"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Notificar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Offline"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Online"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Visão Geral"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Contagem de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Gateway padrão de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Intervalo de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Intervalo de ping durante a deteção de falhas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Intervalo de ping durante a recuperação de falhas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Tamanho do ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Tempo limite de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "IP de rastreamento de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"As políticas são perfis que agrupam um ou mais membros que controlam a forma "
+"como o Mwan3 distribui o tráfego."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"As políticas não podem compartilhar o mesmo nome das interfaces, membros ou "
+"regras configuradas"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Política"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Política atribuída"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Coloque a sua ação mwan3 personalizada aqui, que serão executados com cada "
+"evento da interface hotplug netifd nas interfaces para as quais o mwan3 está "
+"ativado."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Intervalo de recuperação"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Latência de recuperação [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Perda de pacotes de recuperação [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Tabela de roteamento %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Consulta da tabela de roteamento"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regra"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "As regras são baseadas no endereço IP, na porta ou no protocolo."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "As regras são combinadas de cima para baixo."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "As regras abaixo de uma regra correspondente são ignoradas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"As regras não podem compartilhar o mesmo nome das interfaces, membros ou "
+"políticas configuradas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"As regras especificam qual tráfego irá utilizar uma específica política MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Segundos. Valores aceitáveis: 1-1000000. O padrão é 600 se não for definido"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Endereço de origem"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Porta de origem"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Estado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Pegajoso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Tempo limite pegajoso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "Suporta a notação CIDR (ex. \"192.168.100.0/24\") sem as aspas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Tarefa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "O ficheiro também é preservado durante a sysupgrade."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr "A primeira linha do script deve ser &#34;#!/bin/sh&#34; sem aspas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+"Existem três principais variáveis de ambiente que são passadas a este script."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr "Isso exibe a métrica atribuída a essa interface em /etc/config/network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Este ficheiro é interpretado como um script da shell."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Esse nome de host ou endereço IP será pingado para determinar se o link está "
+"up ou down. Deixe em branco para assumir que a interface está sempre online"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "Esta secção permite-lhe modificar o conteúdo do \"/etc/mwan3.user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Rastreamento de nome de host ou endereço IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Método de rastreamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Confiabilidade de rastreamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"O tráfego destinado a redes conhecidas (que não sejam redes padrão) é "
+"tratado pela tabela de roteamento principal."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"O tráfego do mesmo endereço IP de origem que anteriormente correspondia a "
+"esta regra dentro do período limite pegajoso usará a mesma interface WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"O tráfego que corresponde a uma regra, mas se todas as interfaces WAN para "
+"essa política que estejam inativas, serão bloqueadas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"O tráfego que não corresponde a nenhuma regra é roteado por entre a tabela "
+"de roteamento principal."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Resolução de problemas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Não foi possível gravar os conteúdos: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Tempo de atividade"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Veja o conteúdo de /etc/protocols para descrição do protocolo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Aviso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Quando todos os membros da política estiverem offline, use esse "
+"comportamento para o tráfego correspondente"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Sim"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "blackhole (drop)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "conectado (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "padrão (use a tabela de roteamento principal)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "desconectado (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "inacessível (rejeitar)"
diff --git a/package/luci/applications/luci-app-mwan3/po/pt_BR/mwan3.po b/package/luci/applications/luci-app-mwan3/po/pt_BR/mwan3.po
new file mode 100644 (file)
index 0000000..3b3ccbd
--- /dev/null
@@ -0,0 +1,853 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-06-24 23:51+0000\n"
+"Last-Translator: Janderson Vieira Santos <jandersonvs79@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsmwan3/pt_BR/>\n"
+"Language: pt_BR\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.6-rc\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d hora"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minuto"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minutos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d segundo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d segundos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Nome do dispositivo físico cuja interface subiu ou caiu (por exemplo, "
+"\"eth0\" ou \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: Nome da ação que desencadeou este evento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Nome da interface que subiu ou caiu (por exemplo, \"wan\" ou \"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: É chamado por netifd e por mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: Só é chamado por mwan3track caso a localização falhe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+"* %s: Só é chamado por mwan3track caso o rastreamento seja bem sucedido"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Seleção da interface --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Por favor, escolha --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Valores aceitos: 1-100. Todos estes endereços IP de Rastreamento devem "
+"responder para que o link seja considerado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Valores aceitáveis: 1-1000. Predefinido para 1 se não estiver definido"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Valores aceitáveis: 1-256. Predefinido para 1 se não estiver definido"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Alerta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "Varrer também esta tabela de roteamento para as redes conectadas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Verificar regras de IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Verifique a qualidade do link"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Verifique a tabela de roteamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Coletando dados ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "O conteúdo foi salvo."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Crítico"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Depuração"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Endereço de destino"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Porta de destino"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnóstico"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Desativado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"A interface desativada será considerada ativada após muitos testes de ping "
+"bem-sucedidos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Tempo de inatividade"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Emergência"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Ativar rastreamento ssl"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Ativado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Ativa o registro log das regras de firewall (o registro mwan3 global também "
+"deve estar ativado)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Ativa o registro log global de firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Ativa o rastreamento https na porta SSL 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "insira o valor em hexadecimal, começando por <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Erro"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Executar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Esperar que a interface esteja no ar durante um evento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Intervalo de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Falha da latência [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Porcentagem da perda dos pacotes [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Nível de registro do firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Máscara do firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Despejar a tabela conntrack"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "Despejar a tabela conntrack de firewall global durante os eventos"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globais"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Conceda acesso UCI ao luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 e IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Apenas IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Apenas IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Informação"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Condição inicial"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interface"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Interface inoperante"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Interface operante"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"A interface será considerada inoperante caso muitos testes de ping falhem"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"As interfaces não podem ter o mesmo nome que os membros configurados, que as "
+"políticas ou as regras."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Protocolo de Internet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Conservar o intervalo de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Conservar o intervalo de falha do ping durante uma condição de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Último recurso"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "As linhas que começam com # são comentários, elas não são executadas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"As interfaces de membros com carga balanceada distribuem mais tráfego para "
+"aqueles com pesos maiores."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Registrando os eventos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Nível do registro log"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "TTL Máximo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Pode ser inserido como uma ou múltiplas portas (por exemplo, \"22\" ou "
+"\"80,443\") ou como uma faixa de portas (por exemplo, \"1024:2048\") não use "
+"aspas"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Membro"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+"As interfaces dos membros com métricas mais baixas são as primeiras a serem "
+"usadas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+"As interfaces dos membros com a mesma métrica terão balanceamento de carga."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Membro usado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+"Os membros são perfis que associam uma métrica e um peso numa interface MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Os membros não podem compartilhar o mesmo nome das interfaces já "
+"configuradas, das políticas ou das regras."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Métrica"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Gerenciador MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "Gerenciador MultiWAN - Diagnósticos"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Gerenciador MultiWAN - Globais"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "Gerenciador MultiWAN - Interfaces"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "Gerenciador MultiWAN - Membros"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Gerenciador MultiWAN - Notifique"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "Gerenciador MultiWAN - Visão Geral"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "Gerenciador MultiWAN - Políticas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "Gerenciador MultiWAN - Regras"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Gerenciador MultiWAN - Condição geral"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "Gerenciador MultiWAN - Solução de problemas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"O Mwan3 requer que todas as interfaces tenham uma métrica exclusiva "
+"configurada em /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Nome da regra do IPset. Requer que as regras de IPset estejam em /etc/"
+"dnsmasq.conf (por exemplo, \"ipset=/youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "Os nomes podem conter caracteres A-Z, a-z, 0-9, _ e sem espaços-"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "Os nomes podem conter caracteres A-Z, a-z, 0-9, _ e sem espaços."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Os nomes devem ter 15 caracteres ou menos."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Os nomes devem corresponder ao nome da interface encontrado em /etc/config/"
+"network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Não"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Nenhuma interface MWAN foi encontrada"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Sem rastreamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Nenhuma métrica de interface definida!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Notas:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Aviso"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Notifique"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Desconectado"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Conectado"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Visão geral"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Contagem de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Realizar ping no gateway padrão"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Intervalo de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Intervalo de ping durante uma detecção de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Intervalo de ping durante uma recuperação de falha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Tamanho do ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Tempo limite do ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping rastreamento IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"As políticas são perfis que agrupam um ou mais membros controlando a forma "
+"como o Mwan3 distribui o tráfego."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"As políticas não podem compartilhar o mesmo nome das interfaces "
+"configuradas, dos membros ou das regras"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Política"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Política atribuída"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protocolo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Coloque a sua ação mwan3 personalizada aqui, eles serão executados com cada "
+"evento da interface hotplug netifd nas interfaces para as quais o mwan3 está "
+"ativado."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Intervalo de recuperação"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Latência de recuperação [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Recuperação da perda dos pacotes [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Tabela de roteamento %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Consulta da tabela de roteamento"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regra"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "As regras são baseadas no endereço IP, na porta ou no protocolo."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "As regras são combinadas de cima para baixo."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "As regras abaixo de uma regra correspondente serão ignoradas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"As regras não podem compartilhar o mesmo nome das interfaces configuradas, "
+"dos membros ou das políticas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"As regras definem que tráfego irá utilizar uma determinada política MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Segundos. Valores aceitáveis: 1-1000000. Caso não seja definido o padrão é "
+"600"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Endereço de origem"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Porta de origem"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Fixo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Tempo limite fixo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "Compatível com notação CIDR (ex. \"192.168.100.0/24\") sem aspas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Tarefa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "O arquivo também é preservado durante o sysupgrade."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr "A primeira linha do script deve ser &#34;#!/bin/sh&#34; sem aspas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+"Existem três principais variáveis de ambiente que são passadas para este "
+"script."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Isso exibe a métrica atribuída para esta interface em /etc/config/network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Este arquivo é interpretado como um script shell."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Este nome de host ou endereço IP será pingado para determinar se o link está "
+"operante ou não. Deixe em branco para assumir que a interface esteja sempre "
+"operante"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "Esta seção permite alterar o conteúdo do \"/etc/mwan3.user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Rastreamento de hostname ou endereço IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Método de rastreamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Confiabilidade de rastreamento"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"O tráfego destinado nas redes conhecidas (que não sejam as redes padrão) é "
+"tratado pela tabela de roteamento principal."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"O tráfego do mesmo endereço IP de origem que anteriormente correspondia a "
+"esta regra dentro do período de tempo limite fixo usará a mesma interface WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"O tráfego que corresponde a uma regra, porém, todas as interfaces WAN para "
+"essa política que estejam inativas, serão bloqueadas."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"O tráfego que não corresponda a nenhuma regra é roteado usando a tabela de "
+"roteamento principal."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Solucionando problemas"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Não foi possível salvar os conteúdos: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Tempo de atividade"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Exiba o conteúdo de /etc/protocols para uma descrição do protocolo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Alerta"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Quando todos os membros da política estiverem fora do ar, use este "
+"comportamento para o tráfego correspondente"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Sim"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "buraco negro (derruba)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "conectado (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "padrão (usar tabela de roteamento principal)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "desconectado (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "inacessível (rejeitar)"
diff --git a/package/luci/applications/luci-app-mwan3/po/ro/mwan3.po b/package/luci/applications/luci-app-mwan3/po/ro/mwan3.po
new file mode 100644 (file)
index 0000000..9a0ad39
--- /dev/null
@@ -0,0 +1,858 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-04-23 07:04+0000\n"
+"Last-Translator: olimpiumarius <oliver_magnum44@yahoo.com>\n"
+"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/ro/>\n"
+"Language: ro\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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 4.18-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d oră"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minut"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minute"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d secundă"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d secunde"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Numele dispozitivului fizic a cărui interfață a crescut sau a scăzut (de "
+"exemplu, \"eth0\" sau \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: Numele acțiunii care a declanșat acest eveniment"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Numele interfeței care a crescut sau a scăzut (de exemplu, \"wan\" sau "
+"\"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: Este apelat de netifd și mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: Este apelat de mwan3track doar dacă urmărirea a eșuat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s: Este apelat de mwan3track doar dacă urmărirea a avut succes"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Selectarea interfeței --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Vă rugăm să alegeți --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Valori acceptabile: 1-100. Acest număr de adrese IP de urmărire trebuie să "
+"răspundă pentru ca legătura să fie considerată activă"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+"Valori acceptabile: 1-1000. Valoarea implicită este 1 dacă nu este setată"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+"Valori acceptabile: 1-256. Valoarea implicită este 1 dacă nu este setată"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Alertă"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "De asemenea, scanați acest tabel de rutare pentru rețelele conectate"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Verificați regulile IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Verificați calitatea legăturii"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Verificați tabelul de rutare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Colectarea datelor ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Conţinutul a fost salvat."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Critic"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Depanare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Adresa de destinație"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Portul de destinație"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnosticare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Dezactivat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Interfața căzută va fi considerată activă după atâtea teste ping reușite"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Timp de nefuncționare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Urgență"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Activați urmărirea ssl"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "activat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Activează jurnalizarea regulilor de firewall (trebuie să fie activată și "
+"jurnalizarea globală mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Activează jurnalizarea globală a firewall-ului"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Activează urmărirea https pe portul ssl 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Introduceți valoarea în hexazecimal, începând cu <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Eroare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Executați"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Așteaptă starea interfeței la evenimentul up"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Intervalul de eșec"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Latența de eșec [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Pierderea pachetelor de eșec [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Nivelul jurnalului Firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Masca de firewall"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Masă de comandă la culoare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+"Spălarea tabelului global firewall conntrack la evenimente de interfață"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globale"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Acordă acces UCI pentru luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Conectare la cald dacă este căzut"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Conectare la cald dacă este în sus"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "SetIP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 și IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Doar IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Doar IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Informații"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Starea inițială"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Interfață"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Interfață oprită"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Interfață up"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "Interfața va fi considerată căzută după atâtea teste ping eșuate"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Interfețele nu pot purta același nume cu membrii, politicile sau regulile "
+"configurate."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Protocolul Internet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Păstrați intervalul de eșec"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Păstrați intervalul de eșec ping în timpul stării de eșec"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Ultima soluție"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "Liniile care încep cu # sunt comentarii și nu sunt executate."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Interfețele membre cu echilibrare a sarcinii distribuie mai mult trafic pe "
+"cele cu ponderi mai mari."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Jurnalizare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Nivel de jurnal"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "TTL maxim"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Poate fi introdus ca port(uri) unic(e) sau multiplu(e) (de exemplu, \"22\" "
+"sau \"80,443\") sau ca o serie de porturi (de exemplu, \"1024:2048\") fără "
+"ghilimele"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Membru"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr "Interfețele membre cu metrici mai mici sunt utilizate mai întâi."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+"Interfețele membre cu aceeași metrică vor fi echilibrate în funcție de "
+"sarcină."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Membru utilizat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+"Membrii sunt profiluri care atașează o metrică și o greutate unei interfețe "
+"MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Membrii nu pot purta același nume ca interfețele, politicile sau regulile "
+"configurate."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrică"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Managerul MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "MultiWAN Manager - Diagnosticare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Manager MultiWAN - Globale"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "MultiWAN Manager - Interfețe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "MultiWAN Manager - Membri"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Manager MultiWAN - Notificare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "MultiWAN Manager - Prezentare generală"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "MultiWAN Manager - Politici"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "MultiWAN Manager - Reguli"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Manager MultiWAN - Stare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "MultiWAN Manager - Rezolvarea problemelor"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3 necesită ca toate interfețele să aibă o metrică unică configurată în /"
+"etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Numele regulii IPset. Necesită o regulă IPset în /etc/dnsmasq.conf (de "
+"exemplu, \"ipset=/youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "Numele pot conține caracterele A-Z, a-z, 0-9, _ și fără spații-"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "Numele pot conține caracterele A-Z, a-z, 0-9, _ și fără spații."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Numele trebuie să aibă cel mult 15 caractere."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Numele trebuie să se potrivească cu numele interfeței găsite în /etc/config/"
+"network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Nu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Nu s-au găsit interfețe MWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Fără urmărire"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Nu este setată nicio metrică de interfață!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Note:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Aviz"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Notificare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Dezactivat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Online"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Prezentare generală"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Numărătoarea ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ping gateway implicit"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Intervalul de ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Intervalul ping în timpul detectării defecțiunilor"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Intervalul ping în timpul recuperării defecțiunilor"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Dimensiunea ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Timpul de așteptare Ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping de urmărire IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"Politicile sunt profiluri care grupează unul sau mai mulți membri care "
+"controlează modul în care Mwan3 distribuie traficul."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"Politicile nu pot purta același nume cu interfețele, membrii sau regulile "
+"configurate"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Politica"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Politica atribuită"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protocol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Puneți aici acțiunea mwan3 personalizată, care va fi executată la fiecare "
+"eveniment de interfață netifd hotplug pe interfețele pentru care mwan3 este "
+"activat."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Interval de recuperare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Latența de recuperare [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Pierderea pachetelor de recuperare [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Tabelul de rutare %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Căutarea tabelei de rutare"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Regula"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Regulile se bazează pe adresa IP, port sau protocol."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Regulile sunt comparate de sus în jos."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Regulile aflate sub o regulă de potrivire sunt ignorate."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Regulile nu pot purta același nume ca interfețele, membrii sau politicile "
+"configurate."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr "Regulile specifică ce trafic va utiliza o anumită politică MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Secunde. Valori acceptabile: 1-1000000. Valoarea implicită este 600 dacă nu "
+"este setată"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Adresă sursă"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Port sursă"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Stare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Lipicios"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Timp de așteptare persistent"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "Suportă notația CIDR (de exemplu \"192.168.100.0/24\") fără ghilimele"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Sarcină"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "Fișierul este păstrat și în timpul actualizării sistemului."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+"Prima linie a scriptului trebuie să fie &#34;#!/bin/sh&#34; fără ghilimele."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+"Există trei variabile de mediu principale care sunt transmise acestui script."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Aceasta afișează metrica atribuită acestei interfețe în /etc/config/network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Acest fișier este interpretat ca un script shell."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Acest nume de gazdă sau această adresă IP va fi apelată pentru a determina "
+"dacă legătura este activă sau inactivă. Lăsați gol pentru a presupune că "
+"interfața este întotdeauna online"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+"Această secțiune vă permite să modificați conținutul fișierului \"/etc/mwan3."
+"user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Numele de gazdă de urmărire sau adresa IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Metoda de urmărire"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Fiabilitatea urmăririi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"Traficul destinat rețelelor cunoscute (altele decât cele implicite) este "
+"gestionat de tabelul principal de rutare."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Traficul provenit de la aceeași adresă IP sursă care a corespuns anterior "
+"acestei reguli în perioada de timeout sticky va utiliza aceeași interfață WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"Traficul care se potrivește unei reguli, dar toate interfețele WAN pentru "
+"politica respectivă sunt oprite, va fi blocat."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"Traficul care nu se potrivește cu nicio regulă este direcționat cu ajutorul "
+"tabelului principal de rutare."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Depanare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Nu se poate salva conținutul: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Timp de funcționare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+"Vizualizați conținutul fișierului /etc/protocoale pentru descrierea "
+"protocolului"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Avertisment"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Atunci când toți membrii politicii sunt offline, utilizați acest "
+"comportament pentru traficul potrivit"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Da"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "gaură neagră (picătură)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "conectat (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "implicit (utilizează tabelul principal de rutare)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "deconectat (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "în cazul în care nu funcționează (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "dacă este activ (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "inaccesibil (respingere)"
diff --git a/package/luci/applications/luci-app-mwan3/po/ru/mwan3.po b/package/luci/applications/luci-app-mwan3/po/ru/mwan3.po
new file mode 100644 (file)
index 0000000..9eef5a3
--- /dev/null
@@ -0,0 +1,859 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: mwan3\n"
+"POT-Creation-Date: 2017-09-14 16:00+0300\n"
+"PO-Revision-Date: 2024-01-23 10:05+0000\n"
+"Last-Translator: st7105 <st7105@gmail.com>\n"
+"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.4-dev\n"
+"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
+"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d час"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d минута"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d минут"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d секунда"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d секунд"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Название физического устройства, интерфейс которого поднялся или упал "
+"(прим. \"eth0\" или \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: Название действия вызвавшего это событие"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Название интерфейса который поднялся или упал (прим. \"wan\" или "
+"\"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: Вызывается netifd и mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+"* %s: Вызывается mwan3track только в том случае, если отслеживание не удалось"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s: Вызывается mwan3track только в случае успешного отслеживания"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Выбор интерфейса --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Выберите --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Допустимые значения: 1–100. Количество IP-адресов, которое должно ответить "
+"чтобы соединение было признано активным"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Допустимые значения: 1–1000. По умолчанию 1, если значение не задано"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Допустимые значения: 1–256 По умолчанию 1, если значение не задано"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Тревога"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+"Также сканировать эту таблицу маршрутизации на предмет подключённых сетей"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Проверить правила IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Проверка качества подключения"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Проверить таблицу маршрутизации"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Сбор данных ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Содержимое сохранено."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Критическая ситуация"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Отладка"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Адрес назначения"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Порт назначения"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Диагностика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Отключено"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Отключенный интерфейс будет считаться активным после указанного количество "
+"успешных ping проверок"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Время простоя"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Чрезвычайная ситуация"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Включить отслеживание SSL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Включено"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Включает журналирование правил брандмауэра (также должно быть включено "
+"глобальное журналирование mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Включает глобальное журналирование правил брандмауэера"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Включает отслеживание HTTPS на SSL порту 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Введите значение в шестнадцатеричной форме, начиная с <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Ошибка"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Выполнить"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Ожидать состояние интерфейса при событии подключения интерейса"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Интервал отказа"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Задержка при отказе [мс]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Потери пакетов при отказе [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Уровень журналирования брандмауэра"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Маска межсетевого экрана"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Сбрасывать conntrack таблицу"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+"Сбрасывать глобальную таблицу conntrack межсетевого экрана при событиях "
+"интерфейса"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Общие"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Предоставить UCI доступ для luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 и IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Только IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Только IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Информация"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Исходное состояние"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Интерфейс"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Отключение интерфейса"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Включение интерфейса"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"Интерфейс будет считаться неработающим после заданного количество неудачных "
+"пинг-запросов"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Интерфейсы не могут иметь то же имя, что и настроенные элементы, политики "
+"или правила."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Протокол интернета (IP)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Сохранять интервал отказа"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Сохранять интервал отказа пинг-запроса во время состояния отказа"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Крайнее средство"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "Строки, начинающиеся с #, являются комментариями и не выполняются."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Интерфейсы с балансировкой нагрузки распределяют больше трафика между "
+"интерфейсами с большим весом."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Журналирование"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Уровень журналирования"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Максимальное TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Может быть введено как один или несколько портов (например, «22» или "
+"«80,443») или как диапазон портов (например, «1024:2048») без кавычек"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Узел"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr "Интерфейсы с более низкими метриками используются в первую очередь."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr "Интерфейсы с одинаковой метрикой будут сбалансированы по нагрузке."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Используемый узел"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr "Элементы - это профили, прикрепляющие метрику и вес к интерфейсу MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Элементы не могут иметь одинаковые имена с настроенными интерфейсами, "
+"политиками или правилами."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Метрика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Менеджер MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "Менеджер MultiWAN - Диагностика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Менеджер MultiWAN - Глобальные"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "Менеджер MultiWAN - Интерфейсы"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "Менеджер MultiWAN - Элементы"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Менеджер MultiWAN - Уведомления"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "Менеджер MultiWAN - Обзор"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "Менеджер MultiWAN - Политики"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "Менеджер MultiWAN - Правила"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Менеджер MultiWAN - Статус"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "Менеджер MultiWAN - Устранение неполадок"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3 требует, чтобы все интерфейсы имели уникальную метрику, настроенную в /"
+"etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Имя IPset правила. Требуется правило IPset в /etc/dnsmasq.conf (например "
+"«ipset=/youtube.com/youtube»)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "Имена могут содержать символы A-Z, a-z, 0-9, _ и без пробелов и -"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "Имена могут содержать символы A-Z, a-z, 0-9, _ и без пробелов."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Имена должны состоять из 15 символов или менее."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Имена должны совпадать с именами интерфейсов, найденными в /etc/config/"
+"network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Нет"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Интерфейсы MWAN не найдены"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Нет отслеживания"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Не задана метрика интерфейса!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Примечания:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Уведомление"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Уведомить"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Отключен"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Онлайн"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Обзор"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Количество пинг-запросов"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Пинг-запрос шлюза по умолчанию"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Интервал пинг-запроса"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Интервал пинг-запросов во время обнаруженного отказа"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Интервал пинг-запросов при восстановлении отказа"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Размер пакета пинг-запроса"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Время ожидания ответа пинг-запроса"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Пинг-запрос отслеживаемого IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"Политики - это профили, объединяющие один или несколько элементов, "
+"управляющих распределением трафика в Mwan3."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"Политики не могут иметь одинаковые имена с настроенными интерфейсами, "
+"элементами или правилами"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Политика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Назначенная политика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Протокол"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Поместите сюда ваши пользовательские действия mwan3, они будут выполняться "
+"при каждом событии интерфейса netifd hotplug на интерфейсах, для которых "
+"включен mwan3."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Интервал восстановления"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Задержка восстановления [мс]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Потери пакетов для восстановления [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Таблица маршрутизации %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Поиск таблицы маршрутизации"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Правило"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Правила основаны на IP-адресе, порте или протоколе."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Правила сопоставляются сверху вниз."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Правила, находящиеся ниже соответствующего правила, игнорируются."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Правила не могут иметь одинаковые имена с настроенными интерфейсами, "
+"элементами или политиками."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"Правила определяют, какой трафик будет использовать определенную политику "
+"MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Секунды. Допустимые значения: 1–1000000. По умолчанию 600, если значение не "
+"установлено"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Адрес источника"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Порт источника"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Статус"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Режим Sticky"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Время ожидания режима Sticky"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "Поддерживает CIDR нотацию (например «192.168.100.0/24») без кавычек"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Задача"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "Этот файл также сохраняется при обновлении системы."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr "Первая строка скрипта должна быть &#34;#!/bin/sh&#34; без кавычек."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "В этот сценарий передаются три основные переменные среды окружения."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Здесь отображается метрика, назначенная этому интерфейсу в файле /etc/config/"
+"network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Этот файл интерпретируется как shell-скрипт."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Имя хоста или IP-адрес для пинг-запроса, чтобы определить активно соединение "
+"или нет. Оставьте пустым, чтобы указать, что интерфейс всегда в сети"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "Этот раздел позволяет изменять содержимое файла \"/etc/mwan3.user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Отслеживамое имя хоста или IP-адрес"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Метод отслеживания"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Надежность отслеживания"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"Трафик, предназначенный для известных (кроме стандартных) сетей, "
+"обрабатывается основной таблицей маршрутизации."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Трафик с того же IP-адреса источника, который ранее соответствовал этому "
+"правилу в период времени ожидания режима Sticky, будет использовать тот же "
+"интерфейс WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"Трафик, соответствующий правилу, но все интерфейсы WAN для этой политики не "
+"работают, будет заблокирован."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"Трафик, не соответствующий какому-либо правилу, направляется по основной "
+"таблице маршрутизации."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Устранение неполадок"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Невозможно сохранить содержимое: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Время работы"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Просмотр содержимого файла /etc/protocols для описания протокола"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Внимание"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Когда все члены политики находятся в автономном режиме, используйте это "
+"поведение для сопоставляемого трафика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Да"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "blackhole (отбросить)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "подключено (connected, mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "default (использовать основную таблицу маршрутизации)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "отключено (disconnected, mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "отключено (ifdown, netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "подключено (ifup, netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "unreachable (отклонить)"
diff --git a/package/luci/applications/luci-app-mwan3/po/sk/mwan3.po b/package/luci/applications/luci-app-mwan3/po/sk/mwan3.po
new file mode 100644 (file)
index 0000000..a0968d4
--- /dev/null
@@ -0,0 +1,798 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-07-12 15:48+0000\n"
+"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
+"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/sk/>\n"
+"Language: sk\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.0-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d hodín"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minút"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+#, fuzzy
+msgid "%d minutes"
+msgstr "%d minút"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+#, fuzzy
+msgid "%d second"
+msgstr "%d sekúnd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+#, fuzzy
+msgid "%d seconds"
+msgstr "%d sekúnd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Prosím, vyberte --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Výstraha"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Ladenie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Cieľová adresa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Zakázané"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Zapnuté"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Chyba"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Informácia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Rozhranie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Zaznamenávanie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Nie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Oznámenie"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Prehľad"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Pravidlo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Nie je možné uložiť obsah: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Doba spustenia"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Upozornenie"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Áno"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/sv/mwan3.po b/package/luci/applications/luci-app-mwan3/po/sv/mwan3.po
new file mode 100644 (file)
index 0000000..d6a996b
--- /dev/null
@@ -0,0 +1,801 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-05-12 16:49+0000\n"
+"Last-Translator: Daniel Nilsson <daniel.nilsson94@outlook.com>\n"
+"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/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.5.4\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d timme"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d minut"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d minuter"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d sekund"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d sekunder"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Namnet på den fysiska enheten vars gränssnitt gick upp eller ner (t.ex "
+"\"eth0\" eller \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Namnet på gränssnittet som gick upp eller ner (t.ex \"wan\" eller "
+"\"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: Kallas av netifd och mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: Kallas endast av mwan3track om spårningen har misslyckats"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s: Kallas endast av mwan3track om spårningen lyckades"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Val av gränssnitt --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Vänligen välj --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Accepterbara värden: 1-100. Så här många IP-adresser för spårning måste "
+"svara för att länken ska bedömas vara uppe"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Varning"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Kontrollera IP-regler"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Kontrollera länkens kvalité"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Samlar in data ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Innehållet har sparats."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritisk"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Felsökning"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Destinationens adress"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Destinationsport"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Diagnostik"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Avstängd"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Driftsstopp"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Nödsituation"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Aktivera ssl-spårning"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Aktiverad"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Aktiverar https-spårning på ssl-porten 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Fyll i värdet i hex, som börjar på <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Fel"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Loggnivå för brandvägg"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Mask för brandvägg"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Globalt"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Godkänn UCI-åtkomst till luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 och IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Endast IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Endast IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Info"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Gränssnitt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Loggning"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrisk"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Nej"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Avisering"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Urkopplad"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Uppkopplad"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Överblick"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Villkor"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokoll"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Adress för källkod"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Käll-port"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Status"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Uppgift"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Varning"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Ja"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/templates/mwan3.pot b/package/luci/applications/luci-app-mwan3/po/templates/mwan3.pot
new file mode 100644 (file)
index 0000000..b7f7ae7
--- /dev/null
@@ -0,0 +1,786 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/tr/mwan3.po b/package/luci/applications/luci-app-mwan3/po/tr/mwan3.po
new file mode 100644 (file)
index 0000000..3c1245f
--- /dev/null
@@ -0,0 +1,844 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-04-01 08:36+0000\n"
+"Last-Translator: Oğuz Han <h4n.3545@gmail.com>\n"
+"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/tr/>\n"
+"Language: tr\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.5-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d saat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d dakika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d dakika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d saniye"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d saniye"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Arayüzün yükseldiği veya düştüğü (ör. \"eth0\" veya \"wwan0\") fiziksel "
+"cihazın adı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "Bu olayı tetikleyen eylemin adı %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr "Yukarı veya aşağı giden arayüzün adı %s (ör. \"wan\" veya \"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: netifd ve mwan3track tarafından çağrılır"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: Yalnızca izleme başarısız olursa mwan3track tarafından çağrılır"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+"* %s: Yalnızca izleme başarılı olduğunda mwan3track tarafından çağrılır"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Arayüz Seçimi --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Lütfen seçin --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Kabul edilebilir değerler: 1-100. Bu çok sayıda İzleme IP adresi, "
+"bağlantının kabul edilmesi için yanıt vermelidir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Kabul edilebilir değerler: 1-1000. Ayarlanmamışsa varsayılan 1'dir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Kabul edilebilir değerler: 1-256. Ayarlanmamışsa varsayılan 1'dir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Uyarı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "Bağlı ağlar için bu Yönlendirme tablosunu da tarayın"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "IP kurallarını kontrol edin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Bağlantı kalitesini kontrol edin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Yönlendirme tablosunu kontrol edin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Veri toplama ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "İçindekiler kaydedildi."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Kritik"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Hata Ayıklama"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Hedef adres"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Hedef port"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Tanılama"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Devre dışı bırakıldı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Düşürülmüş arayüz, bu birçok başarılı ping testinden sonra kabul edilecektir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Arıza süresi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Acil Durum"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "SSL izlemeyi etkinleştir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Etkin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Güvenlik duvarı kuralı günlüğünü etkinleştirir (genel mwan3 günlük kaydı da "
+"etkinleştirilmelidir)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Global güvenlik duvarı günlük kaydını etkinleştirir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "443 SSL bağlantı noktasında https izlemeyi etkinleştirir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "<code>0x</code> ile başlayarak değeri onaltılık olarak girin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Hata"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Yürüt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Yukarı olayında arayüz durumunu bekleyin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Başarısızlık aralığı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Hata gecikmesi [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Başarısızlık paket kaybı [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Güvenlik duvarı günlük düzeyi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Güvenlik duvarı maskesi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "conntrack tablosunu temizle"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "Arayüz olaylarında güvenlik duvarı conntrack tablosunu temizle"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Küresel"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "luci-app-mwan3 için UCI erişimi verin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Çalışır durumda takılabilir ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Çalışır durumda takılabilir ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 ve IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Yalnızca IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Yalnızca IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Bilgi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Başlangıç hali"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Arayüz"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Arayüz devre dışı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Arayüz etkin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+"Bu çok sayıda başarısız ping testinden sonra arayüz geçersiz sayılacaktır"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Arayüzler, yapılandırılmış üyeler, ilkeler veya kurallar aynı adı "
+"paylaşamayabilir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "İnternet protokolü"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Arıza aralığını koruyun"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Arıza durumunda ping arızası aralığını koruyun"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Son çare"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "# ile başlayan satırlar yorumdur ve çalıştırılmaz."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Yük dengelenmiş üye arayüzleri, daha büyük yüklere sahip olanları daha fazla "
+"trafik dağıtır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Günlükleme"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Günlük seviyesi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Maks TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Tekli veya çoklu port (lar) olarak (ör. \"22\" veya \"80.443\") veya tırnak "
+"işaretleri olmadan portrange (ör. \"1024: 2048\") olarak girilebilir"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Üye"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr "Önce daha düşük metriklere sahip üye arayüzleri kullanılır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr "Aynı metriğe sahip üye arayüzleri yük dengeli olacaktır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Üye kullanıldı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr "Üyeler, bir MWAN arayüzüne bir metrik ve ağırlık ekleyen profillerdir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Üyeler, yapılandırılmış arayüzler, politikalar veya kurallarla aynı adı "
+"paylaşamazlar."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metrik"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "MultiWAN Yöneticisi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "MultiWAN Yöneticisi - Sistem Kontrolü"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "MultiWAN Yöneticisi - Globaller"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "MultiWAN Yöneticisi - Arayüzler"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "MultiWAN Yöneticisi - Üyeler"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "MultiWAN Yöneticisi - Bildir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "MultiWAN Yöneticisi - Genel Bakış"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "MultiWAN Yöneticisi - İlkeler"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "MultiWAN Yöneticisi - Kurallar"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "MultiWAN Yöneticisi - Durum"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "MultiWAN Yöneticisi - Sorun Giderme"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3, tüm arayüzlerin /etc/config/network içinde yapılandırılmış eşi "
+"olmayan bir metriğe sahip olmasını gerektirir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"IPset kuralının adı. /Etc/dnsmasq.conf içinde IPset kuralı gerektirir (ör. "
+"\"ipset=/youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "Adlar A-Z, a-z, 0-9, _ karakterlerini içerebilir ve boşluk içeremez-"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "Adlar A-Z, a-z, 0-9, _ karakterlerini içerebilir ve boşluk içeremez."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Adlar 15 harf veya daha az olmalıdır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr "Adlar /etc/config/network içinde bulunan arayüz adıyla eşleşmelidir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Hayır"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "MWAN arayüzü bulunamadı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "İzleme yok"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Ayarlanan arayüz metrik seti yok!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Notlar:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Duyuru"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Bildir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Çevrimdışı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Çevrimiçi"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Genel bakış"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Ping sayısı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Varsayılan ağ geçidine ping atma"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Ping aralığı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Arıza tespiti sırasında ping aralığı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Arıza giderme sırasında ping aralığı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Ping boyutu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Ping zaman aşımı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping izleme IP'si"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"İlkeler, Mwan3'ün trafiği nasıl dağıttığını kontrol eden bir veya daha fazla "
+"üyeyi gruplandıran profillerdir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"İlkeler yapılandırılmış arayüzler, üyeler veya kurallarla aynı adı "
+"paylaşamayabilir"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Politika"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Politika atandı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Protokol"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Özel mwan3 eyleminizi buraya koyun, bunlar mwan3'ün etkinleştirildiği "
+"arayüzlerde her netifd hotplug arayüz olayıyla birlikte çalıştırılacaktır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Kurtarma aralığı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Kurtarma gecikmesi [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Kurtarma paketi kaybı [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Yönlendirme tablosu %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Yönlendirme tablosu araması"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Kural"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Kurallar IP adresine, porta veya protokole dayalıdır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Kurallar yukarıdan aşağıya doğru eşleştirilir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Eşleşen bir kuralın altındaki kurallar yoksayılır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Kurallar; yapılandırılmış arayüzler, üyeler veya politikalarla aynı adı "
+"paylaşamaz."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"Kurallar, hangi trafiğin belirli bir MWAN politikasını kullanacağını "
+"belirtir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Saniye. Kabul edilebilir değerler: 1-1000000. Ayarlanmazsa varsayılan 600 "
+"olur"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Kaynak adresi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Kaynak portu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Durum"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Yapışkan"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Sabit zaman aşımı"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+"Tırnak işaretleri olmadan CIDR gösterimini (ör. \"192.168.100.0/24\") "
+"destekler"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Görev"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "Dosya, sistem yükseltmesi sırasında da korunur."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+"Betiğin ilk satırı &#34;#!/bin/sh&#34; olmalıdır (tırnak işaretleri olmadan)."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "Bu betiğe iletilen üç ana ortam değişkeni var."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr "Bu, /etc/config/network içinde bu arayüze atanan metriği gösterir"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Bu dosya bir kabuk betiği olarak yorumlanır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Bu ana bilgisayar adı veya IP adresi, bağlantının yukarı veya aşağı olduğunu "
+"belirlemek için pinglenecektir. Arayüzün her zaman çevrimiçi olduğunu "
+"varsaymak için boş bırakın"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "Bu bölüm, \"/etc/mwan3.user\" içeriğini değiştirmenize izin verir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Ana bilgisayar adını veya IP adresini izleme"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "İzleme yöntemi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "İzleme güvenilirliği"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"Bilinen (öntanımlı olan dışında) ağlara yönelik trafik, ana yönlendirme "
+"tablosu tarafından işlenir."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Yapışkan zaman aşımı süresi içinde bu kuralla daha önce eşleşen aynı kaynak "
+"IP adresinden gelen trafik, aynı WAN arayüzünü kullanacaktır"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"Bir kuralla eşleşen trafik, ancak bu ilke için tüm WAN arayüzlerini "
+"kapatacaktır."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"Herhangi bir kuralla eşleşmeyen trafik, ana yönlendirme tablosu kullanılarak "
+"yönlendirilir."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Sorun giderme"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "İçerik kaydedilemiyor: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Çalışma süresi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Protokol açıklaması için /etc/protocols içeriğini görüntüleyin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Dikkat"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Tüm politika üyeleri çevrimdışı olduğunda, eşleşen trafik için bu davranışı "
+"kullanın"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Evet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "kara delik (düşür)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "bağlı (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "varsayılan (ana yönlendirme tablosunu kullanın)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "bağlantı kesildi (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "ulaşılamaz (reddet)"
diff --git a/package/luci/applications/luci-app-mwan3/po/uk/mwan3.po b/package/luci/applications/luci-app-mwan3/po/uk/mwan3.po
new file mode 100644 (file)
index 0000000..dc1506f
--- /dev/null
@@ -0,0 +1,796 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-02-25 06:41+0000\n"
+"Last-Translator: Костянтин Серьогін <seryoginki@gmail.com>\n"
+"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/uk/>\n"
+"Language: uk\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d година"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d хвилина"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Оберіть --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Тривога"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Критична ситуація"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Зневаджування"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Адреса призначення"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Порт призначення"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Діагностика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Вимкнено"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Надзвичайна ситуація"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Увімкнено"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Помилка"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 та IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Лише IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Лише IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Інформація"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Інтерфейс"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Журналювання"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Метрика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Немає"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Зауваження"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Зовні"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Зсередини"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Огляд"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Політика"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Протокол"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Правило"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Адреса джерела"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Порт джерела"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Стан"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Не вдалося зберегти вміст: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Час безвідмовної роботи"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Застереження"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Так"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr ""
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr ""
diff --git a/package/luci/applications/luci-app-mwan3/po/vi/mwan3.po b/package/luci/applications/luci-app-mwan3/po/vi/mwan3.po
new file mode 100644 (file)
index 0000000..55cf98b
--- /dev/null
@@ -0,0 +1,846 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-04-21 13:24+0000\n"
+"Last-Translator: Tai Nguyen <tainguyenminh1179@gmail.com>\n"
+"Language-Team: Vietnamese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationsmwan3/vi/>\n"
+"Language: vi\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d giờ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d phút"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d phút"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d giây"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d giây"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr ""
+"%s: Tên thiết bị vật lý mà giao diện bị mất kết nối hoặc kết nối lại (ví dụ: "
+"\"eth0\" hoặc \"wwan0\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s: Tên hành động đã kích hoạt sự kiện này"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr ""
+"%s: Tên giao diện đã bị mất kết nối hoặc kết nối lại (ví dụ: \"wan\" hoặc "
+"\"wwan\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s: Được gọi bởi netifd và mwan3track"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s: Chỉ được gọi bởi mwan3track nếu việc theo dõi thất bại"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s: Chỉ được gọi bởi mwan3track nếu việc theo dõi thành công"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- Lựa chọn Giao diện --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- Hãy chọn --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"Giá trị chấp nhận được: 1-100. Cần có ít nhất số địa chỉ IP được theo dõi "
+"phản hồi để xem như giao diện đã kết nối"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "Giá trị chấp nhận được: 1-1000. Mặc định là 1 nếu không được đặt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "Giá trị chấp nhận được: 1-256. Mặc định là 1 nếu không được đặt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "Báo động"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "Cũng quét bảng định tuyến này để tìm các mạng đã kết nối"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "Kiểm tra quy tắc IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "Kiểm tra chất lượng kết nối"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "Kiểm tra bảng định tuyến"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "Đang thu thập dữ liệu ..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "Nội dung đã được lưu."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "Quan trọng"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "Debug"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "Địa chỉ đích"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "Cổng đích"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "Chẩn đoán"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "Vô hiệu hoá"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr ""
+"Giao diện bị mất kết nối sẽ được xem như đã kết nối lại sau nhiều lần kiểm "
+"tra ping thành công"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "Thời gian tạm ngừng hoạt động"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "Khẩn cấp"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "Bật theo dõi ssl"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "Kích Hoạt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr ""
+"Bật ghi nhật ký quy tắc tường lửa (cũng phải bật ghi nhật ký mwan3 toàn cầu)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "Bật ghi nhật ký tường lửa toàn cầu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "Bật theo dõi https trên cổng ssl 443"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "Nhập giá trị dưới dạng hệ số hex, bắt đầu bằng <code>0x</code>"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "Lỗi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "Thực thi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "Kỳ vọng trạng thái giao diện khi sự kiện kết nối xảy ra"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "Khoảng thời gian thất bại"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "Độ trễ thất bại [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "Mất gói dữ liệu do thất bại [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "Mức độ ghi nhật ký tường lửa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "Mặt nạ tường lửa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "Xóa bảng conntrack"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "Xóa bảng conntrack tường lửa toàn cầu khi có sự kiện giao diện"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "Toàn cầu"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "Cấp quyền truy cập UCI cho luci-app-mwan3"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "Hotplug ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "Hotplug ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IPset"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 và IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "Chỉ IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "Chỉ IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "Thông tin"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "Trạng thái ban đầu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "Giao diện"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "Giao diện đã tắt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "Giao diện đã mở"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "Giao diện sẽ được xem như đã tắt sau nhiều lần kiểm tra ping thất bại"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr ""
+"Các giao diện không được trùng tên với các thành viên, chính sách hoặc quy "
+"tắc đã cấu hình."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "Giao thức Internet"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "Giữ khoảng thời gian thất bại"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "Giữ khoảng thời gian thất bại ping trong trạng thái thất bại"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "Phương án cuối cùng"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "Các dòng bắt đầu bằng # là ghi chú và không được thực thi."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr ""
+"Các giao diện thành viên cân bằng tải phân phối nhiều lưu lượng hơn cho các "
+"giao diện có trọng số cao hơn."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "Ghi nhật ký"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "Mức độ ghi nhật ký"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "Giá trị TTL tối đa"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"Có thể nhập dưới dạng cổng đơn hoặc nhiều cổng (ví dụ \"22\" hoặc "
+"\"80,443\") hoặc dưới dạng dải cổng (ví dụ \"1024:2048\") mà không có dấu "
+"ngoặc kép"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "Thành viên"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr "Giao diện thành viên có độ đo thấp hơn được sử dụng trước."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr "Các giao diện thành viên có cùng độ đo sẽ được cân bằng tải."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "Thành viên đã sử dụng"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr ""
+"Các thành viên là các hồ sơ gắn kết một độ đo và trọng số cho một giao diện "
+"MWAN."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr ""
+"Các thành viên không được trùng tên với các giao diện, chính sách hoặc quy "
+"tắc đã cấu hình."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "Metric"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "Quản lý MultiWAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "Quản lý MultiWAN - Chẩn đoán"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "Quản lý MultiWAN - Toàn cầu"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "Quản lý MultiWAN - Giao diện"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "Quản lý MultiWAN - Thành viên"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "Quản lý MultiWAN - Thông báo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "Quản lý MultiWAN - Tổng quan"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "Quản lý MultiWAN - Chính sách"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "Quản lý MultiWAN - Quy tắc"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "Quản lý MultiWAN - Trạng thái"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "Quản lý MultiWAN - Sửa lỗi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr ""
+"Mwan3 yêu cầu tất cả các giao diện có một độ đo duy nhất được cấu hình "
+"trong /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"Tên quy tắc IPset. Yêu cầu quy tắc IPset trong /etc/dnsmasq.conf (ví dụ: "
+"\"ipset=/youtube.com/youtube\")"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "Tên có thể chứa các ký tự A-Z, a-z, 0-9, _ và không có khoảng trắng."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "Tên có thể chứa các ký tự A-Z, a-z, 0-9, _ và không có khoảng trắng."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "Tên phải có độ dài tối đa là 15 ký tự."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr ""
+"Tên phải khớp với tên giao diện được tìm thấy trong /etc/config/network."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "Không"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "Không tìm thấy giao diện MWAN nào"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "Không theo dõi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "Không đặt độ đo giao diện!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "Ghi chú:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "Lưu ý"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "Thông báo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "Ngoại tuyến"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "Trực tuyến"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "Tổng quan"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Số lần ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ping cổng mặc định"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Khoảng thời gian giữa các lần ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "Khoảng thời gian giữa các lần ping trong quá trình phát hiện lỗi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "Khoảng thời gian giữa các lần ping trong quá trình khôi phục sau lỗi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Kích thước ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Thời gian chờ ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "IP theo dõi ping"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"Chính sách là các hồ sơ nhóm một hoặc nhiều thành viên điều khiển cách Mwan3 "
+"phân phối lưu lượng."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr ""
+"Các chính sách không được trùng tên với các giao diện, thành viên hoặc quy "
+"tắc đã cấu hình"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "Chính sách"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "Chính sách được gán"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "Giao thức"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"Đặt hành động mwan3 tùy chỉnh của bạn ở đây, chúng sẽ được thực thi với mỗi "
+"sự kiện gắn nóng netifd trên các giao diện mà mwan3 được kích hoạt."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "Khoảng thời gian phục hồi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "Độ trễ phục hồi [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "Mất gói phục hồi [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "Bảng định tuyến %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "Tra cứu bảng định tuyến"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "Quy tắc"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "Các quy tắc dựa trên địa chỉ IP, cổng hoặc giao thức."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "Các quy tắc được so khớp từ trên xuống dưới."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "Các quy tắc dưới quy tắc phù hợp được bỏ qua."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr ""
+"Các quy tắc không được trùng tên với các giao diện, thành viên hoặc chính "
+"sách đã cấu hình."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr ""
+"Các quy tắc xác định lưu lượng nào sẽ sử dụng một chính sách MWAN cụ thể."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr ""
+"Giây. Giá trị chấp nhận được: 1-1000000. Mặc định là 600 nếu không được đặt"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "Đỉa chỉ nguồn"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "Source port"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "Trạng thái"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "Bám dính"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "Thời gian chờ bám dính"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "Hỗ trợ ghi chú CIDR (ví dụ \"192.168.100.0/24\") không có dấu nháy"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "Nhiệm vụ"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "Tệp cũng được bảo tồn trong quá trình nâng cấp hệ thống."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr ""
+"Dòng đầu tiên của tập lệnh phải là &#34;#!/bin/sh&#34; không có dấu ngoặc "
+"kép."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "Có ba biến môi trường chính được truyền vào kịch bản này."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr ""
+"Điều này hiển thị chỉ số được gán cho giao diện này trong tệp /etc/config/"
+"network"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "Tệp này được hiểu là một kịch bản shell."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr ""
+"Tên máy chủ hoặc địa chỉ IP này sẽ được ping để xác định liên kết có đang "
+"hoạt động hay không. Để trống để cho rằng giao diện luôn trực tuyến"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "Phần này cho phép bạn sửa đổi nội dung của \"/etc/mwan3.user\"."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "Tên máy chủ hoặc địa chỉ IP được theo dõi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "Phương pháp theo dõi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "Độ tin cậy của việc theo dõi"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr ""
+"Lưu lượng được định tuyến đến các mạng đã biết (không phải mạng mặc định) "
+"được xử lý bởi bảng định tuyến chính."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"Lưu lượng từ cùng một địa chỉ IP nguồn đã khớp với quy tắc này trước đó "
+"trong khoảng thời gian chờ bám dính sẽ sử dụng cùng một giao diện WAN"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"Lưu lượng khớp với một quy tắc, nhưng tất cả các giao diện WAN cho chính "
+"sách đó đều bị tắt sẽ bị bỏ qua."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr ""
+"Lưu lượng không khớp với bất kỳ quy tắc nào được định tuyến bằng cách sử "
+"dụng bảng định tuyến chính."
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "Khắc phục sự cố"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "Không thể lưu nội dung: %s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "Thời gian hoạt động"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "Xem nội dung của /etc/protocols để có mô tả giao thức"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "Cảnh báo"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr ""
+"Khi tất cả các thành viên của chính sách đều ngoại tuyến, sử dụng hành vi "
+"này cho lưu lượng"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "Có"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "blackhole (hủy bỏ)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "connected (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "default (sử dụng bảng định tuyến chính)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "disconnected (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (netifd)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "unreachable (reject)"
diff --git a/package/luci/applications/luci-app-mwan3/po/zh_Hans/mwan3.po b/package/luci/applications/luci-app-mwan3/po/zh_Hans/mwan3.po
new file mode 100644 (file)
index 0000000..3c37b56
--- /dev/null
@@ -0,0 +1,810 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017-2019.
+#
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-04 22:04+0000\n"
+"Last-Translator: Eric <zxmegaxqug@hldrive.com>\n"
+"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsmwan3/zh_Hans/>\n"
+"Language: zh_Hans\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.4-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d 小时"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d 分钟"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d 分钟"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr "%s:接口启动或停止时物理设备的名称(如:“eth0”或“wwan0”)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s:触发此事件的操作的名称"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr "%s:启动或停止的接口名称(如:“wan”或“wwan”)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s:被 netifd 和 mwan3track 调用"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s:仅在跟踪失败时由 mwan3track 调用"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s:仅在跟踪成功时由 mwan3track 调用"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- 接口选择 --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- 请选择 --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"取值范围:1-100。这个设置项指定了当多少个 IP 地址能够连通时接口会被认为在线"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "取值范围:1-1000。如果不填写,默认值为 1"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "取值范围:1-256。如果不填写,默认值为 1"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "警报"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "同时扫描此路由表以查找已连接的网络"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "检查 IP 规则"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "检查连接质量"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "检查路由表"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "正在收集数据…"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "内容已保存。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "严重"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "调试"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "目标地址"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "目标端口"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "网络诊断"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "已禁用"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr "当 Ping 成功次数达到这个数值后,已经被认为离线的接口将会重新上线"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "故障时间"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "紧急"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "启用 SSL 跟踪"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "已启用"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr "启用防火墙规则日志(必须启用全局 mwan3 日志)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "启用全局防火墙日志"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "启用在 SSL 端口 443 上的 https 跟踪"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "输入十六进制值,以 <code>0x</code> 开头"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "错误"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "执行"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "在 up 事件发生时的预期接口状态"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "故障检测间隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "错误延迟 [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "错误丢包 [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "防火墙日志级别"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "防火墙掩码"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "刷新连接跟踪表"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "在接口事件触发时刷新全局防火墙连接跟踪表"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "全局"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "给 luci-app-mwan3 授权 UCI 访问"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "热插拔 ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "热插拔 ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IP配置"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 和 IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "仅 IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "仅 IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "信息"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "初始状态"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "接口"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "接口离线"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "接口在线"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "当 Ping 失败次数达到这个数值后,接口会被认为离线"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr "接口名称不能与已配置的成员、策略或规则相同。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "互联网协议"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "保持故障检测间隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "在故障状态期间保持的 Ping 故障检测间隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "备用成员"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "以 # 开头的行是注释,不会被执行。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr "权重较高的负载均衡成员接口将分配到更多的流量。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "日志"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "日志级别"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "最大 TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"可以输入一个或多个端口(例如“22”或“80,443”),亦或是一个端口范围(例"
+"如“1024:2048”),不含引号"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "成员"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr "优先使用跃点数较低的成员接口。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr "系统对跃点数相同的成员接口执行负载均衡。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "使用的成员"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr "成员用于配置某个 MWAN 接口的跃点数和权重。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr "成员名称不能与配置的接口、策略或规则相同。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "跃点数"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "MultiWAN 管理器"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "MultiWAN 管理器 - 诊断"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "MultiWAN 管理器 - 全局"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "MultiWAN 管理器 - 接口"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "MultiWAN 管理器 - 成员"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "MultiWAN 管理器 - 通知"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "MultiWAN 管理器 - 概览"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "MultiWAN 管理器 - 策略"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "MultiWAN 管理器 - 规则"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "MultiWAN 管理器 - 状态"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "MultiWAN 管理器 - 故障排除"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr "Mwan3 要求所有接口都有一个在 /etc/config/network 中配置的唯一跃点数。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"匹配 IPset 规则列表名称。需要先配置 /etc/dnsmasq.conf 中的 IPset 规则(例"
+"如:“ipset=/youtube.com/youtube”)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "名称可以包含字符 A-Z、a-z、0-9、_ 并且不能包含空格 -"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "名称可以包含 A-Z,a-z, 0-9,_,不能有空格。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "名称最多15个字符。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr "名称必须与 /etc/config/network 中找到的接口名称匹配。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "否"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "没有找到 MWAN 接口"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "无跟踪"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "未设置接口跃点数!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "附注:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "注意"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "通知"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "离线"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "在线"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "概览"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Ping 计数"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ping 默认网关"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Ping 间隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "故障检测期间的 Ping 间隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "故障恢复期间的 Ping 间隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Ping 大小"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Ping 超时"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping 跟踪 IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"策略是将一个或多个成员分组的配置文件,这些成员控制 Mwan3 如何分配流量。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr "策略名称不能与配置的接口、成员或规则相同"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "策略"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "分配的策略"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "协议"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"您可以在此自定义 mwan3 事件响应脚本,该脚本将在启用了 mwan3 的接口触发 "
+"netifd 热插拔接口事件时执行。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "故障恢复间隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "恢复延迟 [ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "恢复丢包 [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "路由表 %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "路由表查找"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "规则"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "规则基于 IP 地址、端口或协议。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "规则从上到下进行匹配。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "匹配规则下面的规则将被忽略。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr "规则名称不能与配置的接口、成员或策略的名称一样。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr "规则指定哪些流量将使用特定的 MWAN 策略。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr "单位为秒。接受的值:1-1000000。留空则使用默认值 600 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "源地址"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "源端口"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "状态"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "粘滞模式"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "粘滞超时"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "支持 CIDR 写法(例如:\"192.168.100.0/24\")不含引号"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "任务"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "在系统升级期间,该文件也被保留。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr "脚本的第一行必须是不带引号的 &#34;#!/bin/sh&#34;。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "传递到这个脚本的主要环境变量有三个。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr "这里显示了这个接口在 /etc/config/network 中配置的跃点数"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "这个文件被解释为一个 shell 脚本。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr "通过 ping 此主机或 IP 地址来确定链路是否在线。留空则认为接口始终在线"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "这个部分允许您修改“/etc/mwan3.user”的内容。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "跟踪的主机或 IP 地址"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "跟踪方式"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "跟踪可靠性"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr "发送到已知(非默认)网络的流量由主路由表处理。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"来自相同源 IP 的流量,如果已经匹配过此规则并且在粘滞超时时间内,将会使用相同"
+"的 WAN 接口"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr ""
+"如果流量符合某条规则,但该规则所使用策略中的所有 WAN 接口都离线,则该流量会被"
+"丢弃。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr "不匹配任何规则的流量使用主路由表进行路由。"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "故障排除"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "无法保存内容:%s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "运行时间"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "查看协议描述的 /etc/protocols 的内容"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "警告"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr "当所有策略成员都无法使用的时候,对使用该策略的流量使用这个操作"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "是"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "黑洞(丢弃)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "已连接(mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "默认(使用主路由表)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "未连接(mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (网络)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (网络)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "不可达(拒绝)"
diff --git a/package/luci/applications/luci-app-mwan3/po/zh_Hant/mwan3.po b/package/luci/applications/luci-app-mwan3/po/zh_Hant/mwan3.po
new file mode 100644 (file)
index 0000000..db473ba
--- /dev/null
@@ -0,0 +1,808 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017-2019.
+#
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-05 04:02+0000\n"
+"Last-Translator: Yuan Law <traverslombard@outlook.com>\n"
+"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationsmwan3/zh_Hant/>\n"
+"Language: zh_Hant\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.4-dev\n"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:187
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:203
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:225
+msgid "%d hour"
+msgstr "%d 小時"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:182
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:198
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:220
+msgid "%d minute"
+msgstr "%d 分鐘"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:183
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:184
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:185
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:186
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:199
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:200
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:201
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:202
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:221
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:222
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:223
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:224
+msgid "%d minutes"
+msgstr "%d 分鐘"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:169
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:176
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:192
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:214
+msgid "%d second"
+msgstr "%d 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:171
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:177
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:178
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:179
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:180
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:181
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:193
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:194
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:195
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:196
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:197
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:215
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:216
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:217
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:218
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:219
+msgid "%d seconds"
+msgstr "%d 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:45
+msgid ""
+"%s: Name of Physical device which interface went up or down (e.g. \"eth0\" "
+"or \"wwan0\")"
+msgstr "%s:介面啟動或停止時物理裝置的名稱 (如:「eth0」或「wwan0」)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:39
+msgid "%s: Name of the action that triggered this event"
+msgstr "%s:觸發此事件的操作的名稱"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:44
+msgid ""
+"%s: Name of the interface which went up or down (e.g. \"wan\" or \"wwan\")"
+msgstr "%s:啟動或停止的介面名稱 (如:「wan」或「wwan」)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:41
+msgid "* %s: Is called by netifd and mwan3track"
+msgstr "* %s:被 netifd 和 mwan3track 呼叫"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:43
+msgid "* %s: Is only called by mwan3track if tracking has failed"
+msgstr "* %s:僅在跟蹤失敗時由 mwan3track 呼叫"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:42
+msgid "* %s: Is only called by mwan3track if tracking was successful"
+msgstr "* %s:僅在跟蹤成功時由 mwan3track 呼叫"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:71
+msgid "-- Interface Selection --"
+msgstr "-- 介面選擇 --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:85
+msgid "-- Please choose --"
+msgstr "-- 請選擇 --"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:75
+msgid ""
+"Acceptable values: 1-100. This many Tracking IP addresses must respond for "
+"the link to be deemed up"
+msgstr ""
+"取值範圍:1-100。這個設定項指定了當多少個 IP 位址能夠連通時介面會被認為在線"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:38
+msgid "Acceptable values: 1-1000. Defaults to 1 if not set"
+msgstr "取值範圍:1-1000。如果不填寫,預設值為 1"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:34
+msgid "Acceptable values: 1-256. Defaults to 1 if not set"
+msgstr "取值範圍:1-256。如果不填寫,預設值為 1"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:26
+msgid "Alert"
+msgstr "警示"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:37
+msgid "Also scan this Routing table for connected networks"
+msgstr "同時掃描此路由表,以檢視已連接的網路"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:65
+msgid "Check IP rules"
+msgstr "檢查 IP 規則"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:116
+msgid "Check link quality"
+msgstr "檢查連線數量"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:66
+msgid "Check routing table"
+msgstr "檢查路由表"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:95
+msgid "Collecting data ..."
+msgstr "資料採集中..."
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:18
+msgid "Contents have been saved."
+msgstr "內容已儲存。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:27
+msgid "Critical"
+msgstr "致命錯誤"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:32
+msgid "Debug"
+msgstr "除錯"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:61
+msgid "Destination address"
+msgstr "目標位址"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:65
+msgid "Destination port"
+msgstr "目的通訊埠"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:29
+msgid "Diagnostics"
+msgstr "診斷"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:56
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:65
+msgid "Disabled"
+msgstr "已停用"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:243
+msgid ""
+"Downed interface will be deemed up after this many successful ping tests"
+msgstr "當 Ping 成功次數達到這個數值後,已經被認為離線的介面將會重新上線"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:48
+msgid "Downtime"
+msgstr "故障時間"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:25
+msgid "Emergency"
+msgstr "緊急"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:68
+msgid "Enable ssl tracking"
+msgstr "啟用 SSL 跟蹤"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:31
+msgid "Enabled"
+msgstr "啟用"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:94
+msgid ""
+"Enables firewall rule logging (global mwan3 logging must also be enabled)"
+msgstr "啟用防火牆規則日誌 (必須啟用全域 mwan3 日誌)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:20
+msgid "Enables global firewall logging"
+msgstr "啟用全域防火牆日誌"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:69
+msgid "Enables https tracking on ssl port 443"
+msgstr "啟用在 SSL 連接埠 443 上的 https 跟蹤"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:15
+msgid "Enter value in hex, starting with <code>0x</code>"
+msgstr "輸入十六進位制值,以 <code>0x</code> 開頭"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:28
+msgid "Error"
+msgstr "錯誤"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:108
+msgid "Execute"
+msgstr "執行"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:35
+msgid "Expect interface state on up event"
+msgstr "在 up 事件發生時的預期介面狀態"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:189
+msgid "Failure interval"
+msgstr "故障檢測間隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:121
+msgid "Failure latency [ms]"
+msgstr "故障等待時間[ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:134
+msgid "Failure packet loss [%]"
+msgstr "失敗封包遺失 [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:23
+msgid "Firewall loglevel"
+msgstr "防火牆日誌級別"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:14
+msgid "Firewall mask"
+msgstr "防火牆掩碼"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:256
+msgid "Flush conntrack table"
+msgstr "重新整理連線跟蹤表"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:257
+msgid "Flush global firewall conntrack table on interface events"
+msgstr "在介面事件觸發時重新整理全局防火牆連線跟蹤表"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:56
+msgid "Globals"
+msgstr "全局"
+
+#: applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json:3
+msgid "Grant UCI access for luci-app-mwan3"
+msgstr "授予 luci-app-mwan3 擁有 UCI 存取的權限"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:68
+msgid "Hotplug ifdown"
+msgstr "熱插拔ifdown"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:67
+msgid "Hotplug ifup"
+msgstr "熱插拔 ifup"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:83
+msgid "IPset"
+msgstr "IP設定"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:43
+msgid "IPv4"
+msgstr "IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:37
+msgid "IPv4 and IPv6"
+msgstr "IPv4 和 IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:38
+msgid "IPv4 only"
+msgstr "僅 IPv4"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:44
+msgid "IPv6"
+msgstr "IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:39
+msgid "IPv6 only"
+msgstr "僅 IPv6"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:31
+msgid "Info"
+msgstr "資訊"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:34
+msgid "Initial state"
+msgstr "初始狀態"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:26
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:83
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:64
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:76
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:100
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:64
+msgid "Interface"
+msgstr "介面"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:228
+msgid "Interface down"
+msgstr "介面離線"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:242
+msgid "Interface up"
+msgstr "介面在線"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:229
+msgid "Interface will be deemed down after this many failed ping tests"
+msgstr "當 Ping 失敗次數達到這個數值後,介面會被認為離線"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:24
+msgid ""
+"Interfaces may not share the same name as configured members, policies or "
+"rules."
+msgstr "介面名稱不能與已設定的成員、策略或規則相同。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:35
+msgid "Internet Protocol"
+msgstr "網際網路協議"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:206
+msgid "Keep failure interval"
+msgstr "保持故障檢測間隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:207
+msgid "Keep ping failure interval during failure state"
+msgstr "在故障狀態期間保持的 Ping 故障檢測間隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:37
+msgid "Last resort"
+msgstr "備用成員"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:34
+msgid "Lines beginning with # are comments and are not executed."
+msgstr "以 # 開頭的行是註解,不會被執行。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:20
+msgid ""
+"Load-balanced member interfaces distribute more traffic out those with "
+"higher weights."
+msgstr "權重較高的負載均衡成員介面將分配到更多的流量。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:19
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:93
+msgid "Logging"
+msgstr "日誌"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:22
+msgid "Loglevel"
+msgstr "日誌級別"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:103
+msgid "Max TTL"
+msgstr "最大 TTL"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:57
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:66
+msgid ""
+"May be entered as a single or multiple port(s) (eg \"22\" or \"80,443\") or "
+"as a portrange (eg \"1024:2048\") without quotes"
+msgstr ""
+"可以輸入一個或多個埠(例如“22”或者“80,443”),或者是一個埠範圍(例"
+"如“1024:2048”),不含引號"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:72
+msgid "Member"
+msgstr "成員"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:18
+msgid "Member interfaces with lower metrics are used first."
+msgstr "優先使用躍點數較低的成員介面。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:19
+msgid "Member interfaces with the same metric will be load-balanced."
+msgstr "系統對躍點數相同的成員介面執行負載均衡。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:30
+msgid "Member used"
+msgstr "使用的成員"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:17
+msgid ""
+"Members are profiles attaching a metric and weight to an MWAN interface."
+msgstr "成員用於設定某個 MWAN 介面的躍點數和權重。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:19
+msgid ""
+"Members may not share the same name as configured interfaces, policies or "
+"rules."
+msgstr "成員名稱不能與設定的介面、策略或規則相同。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:264
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:33
+msgid "Metric"
+msgstr "公測數"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:18
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:3
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:46
+msgid "MultiWAN Manager"
+msgstr "MultiWAN 管理器"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:79
+msgid "MultiWAN Manager - Diagnostics"
+msgstr "MultiWAN 管理器 - 診斷"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:10
+msgid "MultiWAN Manager - Globals"
+msgstr "MultiWAN 管理器 - 全域"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:20
+msgid "MultiWAN Manager - Interfaces"
+msgstr "MultiWAN 管理器 - 介面"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:16
+msgid "MultiWAN Manager - Members"
+msgstr "MultiWAN 管理器 - 成員"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:26
+msgid "MultiWAN Manager - Notify"
+msgstr "MultiWAN 管理器 - 通知"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:92
+msgid "MultiWAN Manager - Overview"
+msgstr "MultiWAN 管理器 - 概覽"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:16
+msgid "MultiWAN Manager - Policies"
+msgstr "MultiWAN 管理器 - 策略"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:18
+msgid "MultiWAN Manager - Rules"
+msgstr "MultiWAN 管理器 - 規則"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/detail.js:12
+msgid "MultiWAN Manager - Status"
+msgstr "MultiWAN 管理器 - 狀態"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/troubleshooting.js:12
+msgid "MultiWAN Manager - Troubleshooting"
+msgstr "MultiWAN 管理器 - 故障排除"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:21
+msgid ""
+"Mwan3 requires that all interfaces have a unique metric configured in /etc/"
+"config/network."
+msgstr "Mwan3 要求所有介面都有一個在 /etc/config/network 中設定的唯一躍點數。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:84
+msgid ""
+"Name of IPset rule. Requires IPset rule in /etc/dnsmasq.conf (eg \"ipset=/"
+"youtube.com/youtube\")"
+msgstr ""
+"匹配 IPset 規則列表名稱。需要先配置 /etc/dnsmasq.conf 中的 IPset 規則(例"
+"如:“ipset=/youtube.com/youtube”)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:23
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces-"
+msgstr "名稱可包含字元 A-Z、a-z、0-9 和 _,但不能有空格"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/member.js:18
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:21
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:26
+msgid "Names may contain characters A-Z, a-z, 0-9, _ and no spaces."
+msgstr "名稱可以包含字元A-Z、a-z、0-9,但不包含空格。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:22
+msgid "Names must be 15 characters or less."
+msgstr "名稱最多 15 個字元。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:22
+msgid "Names must match the interface name found in /etc/config/network."
+msgstr "名稱必須與 /etc/config/network 中找到的介面名稱相符。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:74
+msgid "No"
+msgstr "否"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:20
+msgid "No MWAN interfaces found"
+msgstr "沒有找到 MWAN 介面"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:43
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:51
+msgid "No Tracking"
+msgstr "無跟蹤"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:272
+msgid "No interface metric set!"
+msgstr "未設定介面躍點數!"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:31
+msgid "Notes:"
+msgstr "附註:"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:30
+msgid "Notice"
+msgstr "注意"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:96
+msgid "Notify"
+msgstr "通知"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:38
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:45
+msgid "Offline"
+msgstr "離線"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:37
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:30
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:39
+msgid "Online"
+msgstr "在線"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:13
+msgid "Overview"
+msgstr "概覽"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:79
+msgid "Ping count"
+msgstr "Ping 計數"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:63
+msgid "Ping default gateway"
+msgstr "Ping 預設閘道器"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:174
+msgid "Ping interval"
+msgstr "Ping 間隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:190
+msgid "Ping interval during failure detection"
+msgstr "故障檢測期間的 Ping 間隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:212
+msgid "Ping interval during failure recovering"
+msgstr "故障恢復期間的 Ping 間隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:88
+msgid "Ping size"
+msgstr "Ping 大小"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:167
+msgid "Ping timeout"
+msgstr "Ping 超時"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:64
+msgid "Ping tracking IP"
+msgstr "Ping 跟蹤 IP"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:17
+msgid ""
+"Policies are profiles grouping one or more members controlling how Mwan3 "
+"distributes traffic."
+msgstr ""
+"策略是將一個或多個成員分組的設定檔案,這些成員控制 Mwan3 如何分配流量。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:23
+msgid ""
+"Policies may not share the same name as configured interfaces, members or "
+"rules"
+msgstr "策略名稱不能與設定的介面、成員或規則相同"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:80
+msgid "Policy"
+msgstr "政策"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:97
+msgid "Policy assigned"
+msgstr "分配的策略"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:42
+msgid "Protocol"
+msgstr "協定"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:35
+msgid ""
+"Put your custom mwan3 action here, they will be executed with each netifd "
+"hotplug interface event on interfaces for which mwan3 is enabled."
+msgstr ""
+"您可以在此自訂 mwan3 事件回應指令碼,該指令碼將在啟用了 mwan3 的介面觸發 "
+"netifd 熱插拔介面事件時執行。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:211
+msgid "Recovery interval"
+msgstr "故障恢復間隔"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:144
+msgid "Recovery latency [ms]"
+msgstr "恢復延遲[ms]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:157
+msgid "Recovery packet loss [%]"
+msgstr "恢復封包遺失 [%]"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:39
+msgid "Routing table %d"
+msgstr "路由表 %d"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:36
+msgid "Routing table lookup"
+msgstr "路由表查詢"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:88
+msgid "Rule"
+msgstr "規則"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:20
+msgid "Rules are based on IP address, port or protocol."
+msgstr "規則基於 IP 位址、連接埠或協定。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:21
+msgid "Rules are matched from top to bottom."
+msgstr "規則從上到下進行相符。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:22
+msgid "Rules below a matching rule are ignored."
+msgstr "相符規則下面的規則將被忽略。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:27
+msgid ""
+"Rules may not share the same name as configured interfaces, members or "
+"policies."
+msgstr "規則名稱不能與設定的介面、成員或策略的名稱一樣。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:19
+msgid "Rules specify which traffic will use a particular MWAN policy."
+msgstr "規則指定哪些流量將使用特定的 MWAN 策略。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:78
+msgid "Seconds. Acceptable values: 1-1000000. Defaults to 600 if not set"
+msgstr "單位為秒。接受的值:1-1000000。留空則使用預設值 600 秒"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:52
+msgid "Source address"
+msgstr "來源位址"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:56
+msgid "Source port"
+msgstr "來源埠"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:65
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:82
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:106
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:21
+msgid "Status"
+msgstr "狀態"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:70
+msgid "Sticky"
+msgstr "粘滯模式"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:77
+msgid "Sticky timeout"
+msgstr "粘滯超時"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:53
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:62
+msgid "Supports CIDR notation (eg \"192.168.100.0/24\") without quotes"
+msgstr "支援 CIDR 記法(例如:\"192.168.100.0/24\")不含引號"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/diagnostics.js:91
+msgid "Task"
+msgstr "任務"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:29
+msgid "The file is also preserved during sysupgrade."
+msgstr "在系統升級期間,該檔案也被保留。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:33
+msgid ""
+"The first line of the script must be &#34;#!/bin/sh&#34; without quotes."
+msgstr "指令碼的第一行必須是不帶引號的 &#34;#!/bin/sh&#34;。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:37
+msgid ""
+"There are three main environment variables that are passed to this script."
+msgstr "傳遞到這個指令碼的主要環境變數有三個。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:265
+msgid ""
+"This displays the metric assigned to this interface in /etc/config/network"
+msgstr "這裡顯示了這個介面在 /etc/config/network 中配置的躍點數"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:32
+msgid "This file is interpreted as a shell script."
+msgstr "這個檔案被解釋為一個 shell 指令碼。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:48
+msgid ""
+"This hostname or IP address will be pinged to determine if the link is up or "
+"down. Leave blank to assume interface is always online"
+msgstr "通過 ping 此主機或 IP 位址來確定鏈路是否在線。留空則認為介面始終在線"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:28
+msgid "This section allows you to modify the content of \"/etc/mwan3.user\"."
+msgstr "這個部分允許您修改「/etc/mwan3.user」的內容。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:47
+msgid "Tracking hostname or IP address"
+msgstr "跟蹤的主機或 IP 位址"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:52
+msgid "Tracking method"
+msgstr "跟蹤方式"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:74
+msgid "Tracking reliability"
+msgstr "跟蹤可靠性"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:24
+msgid ""
+"Traffic destined for known (other than default) networks is handled by the "
+"main routing table."
+msgstr "傳送到已知 (非預設) 網路的流量由主路由表處理。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:71
+msgid ""
+"Traffic from the same source IP address that previously matched this rule "
+"within the sticky timeout period will use the same WAN interface"
+msgstr ""
+"來自相同源 IP 的流量,如果已經匹配過此規則並且在粘滯超時時間內,將會使用相同"
+"的 WAN 介面"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:25
+msgid ""
+"Traffic matching a rule, but all WAN interfaces for that policy are down "
+"will be blackholed."
+msgstr "流量相符了一條規則,但該策略的所有WAN介面都停止運作,流量將被黑洞。"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:23
+msgid "Traffic not matching any rule is routed using the main routing table."
+msgstr "不相符任何規則的流量使用主路由表進行路由。"
+
+#: applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json:37
+msgid "Troubleshooting"
+msgstr "故障排除"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/notify.js:20
+msgid "Unable to save contents: %s"
+msgstr "無法儲存內容:%s"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:33
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/status/overview.js:47
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/status/include/90_mwan3.js:55
+msgid "Uptime"
+msgstr "上線時間"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:43
+msgid "View the content of /etc/protocols for protocol description"
+msgstr "檢視協議描述的 /etc/protocols 的內容"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/globals.js:29
+msgid "Warning"
+msgstr "警告"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:38
+msgid ""
+"When all policy members are offline use this behavior for matched traffic"
+msgstr "當所有策略成員都無法使用的時候,對使用該策略的流量使用這個操作"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:73
+msgid "Yes"
+msgstr "是"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:41
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:104
+msgid "blackhole (drop)"
+msgstr "黑洞(丟棄)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:260
+msgid "connected (mwan3)"
+msgstr "已連線 (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:42
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:105
+msgid "default (use main routing table)"
+msgstr "預設(使用主路由表)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:261
+msgid "disconnected (mwan3)"
+msgstr "未連線 (mwan3)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:259
+msgid "ifdown (netifd)"
+msgstr "ifdown (網路)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/interface.js:258
+msgid "ifup (netifd)"
+msgstr "ifup (網路)"
+
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/policy.js:40
+#: applications/luci-app-mwan3/htdocs/luci-static/resources/view/mwan3/network/rule.js:103
+msgid "unreachable (reject)"
+msgstr "不可達(拒絕)"
diff --git a/package/luci/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3 b/package/luci/applications/luci-app-mwan3/root/etc/uci-defaults/60_luci-mwan3
new file mode 100755 (executable)
index 0000000..d79f648
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh
+
+# remove existing mwan ucitrack entry is now done with procd
+uci -q batch <<-EOF >/dev/null
+       del ucitrack.@mwan3[-1]
+       commit ucitrack
+EOF
+
+uci -q get mwan3.globals >/dev/null || {
+       uci -q add mwan3 globals >/dev/null
+       uci -q rename mwan3.@globals[-1]="globals" >/dev/null
+       uci -q set mwan3.globals.local_source="none" >/dev/null
+       uci commit mwan3
+}
+
+exit 0
diff --git a/package/luci/applications/luci-app-mwan3/root/usr/libexec/luci-mwan3 b/package/luci/applications/luci-app-mwan3/root/usr/libexec/luci-mwan3
new file mode 100755 (executable)
index 0000000..8db3e47
--- /dev/null
@@ -0,0 +1,199 @@
+#!/bin/sh
+#
+# Copyright (C) 2021 TDT AG <development@tdt.de>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See https://www.gnu.org/licenses/gpl-2.0.txt for more information.
+#
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /usr/share/libubox/jshn.sh
+
+IIF=1000
+FWMARK=2000
+ID=0
+
+usage() {
+       local status="$1"
+       local msg="$2"
+       if [ -n "$msg" ]; then
+               echo "$msg"
+               echo ""
+       fi
+       echo "Usage: $(basename "$0") <command>"
+       echo "command:"
+       echo "  diag:   diagnostic commands"
+       echo "  ipset:  ipset commands"
+       echo ""
+       echo "diag <command> <iface>"
+       echo "command:"
+       echo "  gateway <iface>:   ping interface gateway"
+       echo "  tracking <iface>:  ping interface tracking targets"
+       echo "  rules <iface>:     check interface routing rules"
+       echo "  routes <iface>:    check interface routing tables"
+       echo ""
+       echo "ipset <command>"
+       echo "command:"
+       echo "  dump:     show all configured ipset names"
+
+       exit "$status"
+}
+
+diag_gateway() {
+       local iface="$1"
+
+       local gw
+
+       network_get_gateway gw "${iface}"
+       [ -z "$gw" ] && network_get_gateway gw "${iface}_4"
+
+       [ -z "$gw" ] && {
+               echo "No gateway for interface ${iface} found."
+               exit 2
+       }
+
+       mwan3 use "$iface" "ping" "-c" "5" "-W" "1" "$gw"
+}
+
+diag_tracking() {
+       local iface="$1"
+
+       checkips() {
+               local ip="$1"
+               local iface="$2"
+
+               mwan3 use "$iface" "ping" "-c" "5" "-W" "1" "$ip"
+       }
+
+       config_load mwan3
+       config_list_foreach "$iface" "track_ip" checkips "$iface"
+}
+
+iface_number() {
+       local cfg="$1"
+       local iface="$2"
+
+       let number++
+
+       [ "$cfg" = "$iface" ] && {
+               ID="$number"
+       }
+}
+
+diag_rules() {
+       local iface="$1"
+
+       local number=0
+       local iif=0
+       local fwmark=0
+
+       local iif_rule iif_result
+       local fwmark_rule fwmark_result
+
+       config_load mwan3
+       config_foreach iface_number 'interface' "$iface"
+
+       [ "$ID" = "0" ] && {
+               echo "Unable to get mwan3 interface number for \"$iface\"."
+               exit 2
+       }
+
+       let "iif=$IIF+$ID"
+       let "fwmark=$FWMARK+$ID"
+
+       iif_rule="$(ip rule | grep ${iif})"
+       iif_result="$?"
+
+       fwmark_rule="$(ip rule | grep ${fwmark})"
+       fwmark_result="$?"
+
+       if [ "$fwmark_result" = 0 ] && [ "$iif_result" = 0 ]; then
+               echo "All required IP rules for interface \"$iface\" found"
+               echo "$fwmark_rule"
+               echo "$iif_rule"
+       elif [ "$fwmark_result" = 1 ] && [ "$iif_result" = 0 ]; then
+               echo "Only iif IP rule for interface \"$iface\" found"
+               echo "$iif_rule"
+       elif [ "$fwmark_result" = 0 ] && [ "$iif_result" = 1 ]; then
+               echo "Only fwmark IP rule for interface \"$iface\" found"
+               echo "$fwmark_rule"
+       else
+               echo "Missing fwmark and iif IP rule for interface \"$iface\""
+       fi
+}
+
+diag_routes() {
+       local iface="$1"
+
+       local table table_result
+
+       config_load mwan3
+       config_foreach iface_number 'interface' "$iface"
+
+       [ "$ID" = "0" ] && {
+               echo "Unable to get mwan3 interface number for \"$iface\"."
+               exit 2
+       }
+
+       table="$(ip route list table $ID)"
+       table_result="$?"
+
+       if [ "$table_result" = 0 ]; then
+               echo "Routing table \"$ID\" for interface \"$iface\" found"
+               echo "$table"
+       else
+               echo "Routing table \"$ID\" for interface \"$iface\" not found"
+       fi
+}
+
+diag_cmd() {
+       case "$1" in
+               gateway)
+                       diag_gateway "$2"
+                       ;;
+               tracking)
+                       diag_tracking "$2"
+                       ;;
+               rules)
+                       diag_rules "$2"
+                       ;;
+               routes)
+                       diag_routes "$2"
+                       ;;
+               *)
+                       usage "1" "Command not supported"
+                       ;;
+       esac
+}
+
+ipset_dump() {
+       ipset -n -L 2>/dev/null | grep -v mwan3_ | sort -u
+}
+
+ipset_cmd() {
+       case "$1" in
+               dump)
+                       ipset_dump
+                       ;;
+               *)
+                       usage "1" "Command not supported"
+                       ;;
+       esac
+}
+
+main () {
+       case "$1" in
+               diag)
+                       diag_cmd "$2" "$3"
+                       ;;
+               ipset)
+                       ipset_cmd "$2"
+                       ;;
+               *)
+                       usage "1" "Command not supported"
+                       ;;
+       esac
+}
+
+main "$@"
diff --git a/package/luci/applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json b/package/luci/applications/luci-app-mwan3/root/usr/share/luci/menu.d/luci-app-mwan3.json
new file mode 100644 (file)
index 0000000..e646155
--- /dev/null
@@ -0,0 +1,103 @@
+{
+       "admin/status/mwan3": {
+               "title": "MultiWAN Manager",
+               "order": "600",
+               "action": {
+                       "type": "firstchild"
+               },
+               "depends": {
+                       "acl": [ "luci-app-mwan3" ]
+               }
+       },
+       "admin/status/mwan3/overview": {
+               "title": "Overview",
+               "order": 10,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/status/overview"
+               }
+       },
+       "admin/status/mwan3/detail": {
+               "title": "Status",
+               "order": 20,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/status/detail"
+               }
+       },
+       "admin/status/mwan3/diagnostics": {
+               "title": "Diagnostics",
+               "order": 30,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/status/diagnostics"
+               }
+       },
+       "admin/status/mwan3/troubleshooting": {
+               "title": "Troubleshooting",
+               "order": 40,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/status/troubleshooting"
+               }
+       },
+
+       "admin/network/mwan3": {
+               "title": "MultiWAN Manager",
+               "order": "600",
+               "action": {
+                       "type": "firstchild"
+               },
+               "depends": {
+                       "acl": [ "luci-app-mwan3" ]
+               }
+       },
+       "admin/network/mwan3/globals": {
+               "title": "Globals",
+               "order": 10,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/network/globals"
+               }
+       },
+       "admin/network/mwan3/interface": {
+               "title": "Interface",
+               "order": 20,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/network/interface"
+               }
+       },
+       "admin/network/mwan3/member": {
+               "title": "Member",
+               "order": 30,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/network/member"
+               }
+       },
+       "admin/network/mwan3/policy": {
+               "title": "Policy",
+               "order": 40,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/network/policy"
+               }
+       },
+       "admin/network/mwan3/rule": {
+               "title": "Rule",
+               "order": 50,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/network/rule"
+               }
+       },
+       "admin/network/mwan3/notify": {
+               "title": "Notify",
+               "order": 60,
+               "action": {
+                       "type": "view",
+                       "path": "mwan3/network/notify"
+               }
+       }
+}
diff --git a/package/luci/applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json b/package/luci/applications/luci-app-mwan3/root/usr/share/rpcd/acl.d/luci-app-mwan3.json
new file mode 100644 (file)
index 0000000..91dd225
--- /dev/null
@@ -0,0 +1,32 @@
+{
+       "luci-app-mwan3": {
+               "description": "Grant UCI access for luci-app-mwan3",
+               "read": {
+                       "file": {
+                               "/etc/mwan3.user": [ "read" ],
+                               "/usr/bin/httping": [ "list" ],
+                               "/usr/bin/nping": [ "list" ],
+                               "/usr/bin/arping": [ "list" ],
+                               "/usr/sbin/mwan3 status": [ "exec" ],
+                               "/usr/sbin/mwan3 ifup *": [ "exec" ],
+                               "/usr/sbin/mwan3 ifdown *": [ "exec" ],
+                               "/usr/sbin/mwan3 internal ipv4": [ "exec" ],
+                               "/usr/sbin/mwan3 internal ipv6": [ "exec" ],
+                               "/usr/libexec/luci-mwan3 diag * *": [ "exec" ],
+                               "/usr/libexec/luci-mwan3 ipset *": [ "exec" ]
+                       },
+                       "ubus": {
+                               "mwan3": [ "status" ]
+                       },
+                       "uci": [ "mwan3", "network" ]
+               },
+               "write": {
+                       "file": {
+                               "/etc/mwan3.user": ["write"],
+                               "/usr/sbin/mwan3 ifup *": [ "exec" ],
+                               "/usr/sbin/mwan3 ifdown *": [ "exec" ]
+                       },
+                       "uci": [ "mwan3" ]
+               }
+       }
+}
diff --git a/package/luci/applications/luci-app-wifischedule/Makefile b/package/luci/applications/luci-app-wifischedule/Makefile
new file mode 100644 (file)
index 0000000..891b41b
--- /dev/null
@@ -0,0 +1,22 @@
+# Copyright (c) 2016, prpl Foundation
+#
+# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+# fee is hereby granted, provided that the above copyright notice and this permission notice appear
+# in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+# FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+# Author: Nils Koenig <openwrt@newk.it>
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=Turns WiFi on and off according to a schedule
+LUCI_DEPENDS:=+luci-compat +wifischedule
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/package/luci/applications/luci-app-wifischedule/README.md b/package/luci/applications/luci-app-wifischedule/README.md
new file mode 100644 (file)
index 0000000..4a57b3f
--- /dev/null
@@ -0,0 +1,86 @@
+# wifischedule
+Turns WiFi on and off according to a schedule on an openwrt router
+
+## Components
+* wifischedule: Shell script that creates cron jobs based on configuration provided in UCI and does all the other logic of enabling and disabling wifi with the use of `/sbin/wifi` and `/usr/bin/iwinfo`. Can be used standalone.
+* luci-app-wifischedule: LUCI frontend for creating the UCI configuration and triggering the actions. Depends on wifischedule.
+
+
+## Use cases
+You can create user-defined events when to enable or disable WiFi.
+There are various use cases why you would like to do so:
+
+1. Reduce power consumption and therefore reduce CO2 emissions.
+2. Reduce emitted electromagnatic radiation.
+3. Force busincess hours when WiFi is available.
+
+Regarding 1: Please note, that you need to unload the wireless driver modules in order to get the most effect of saving power.
+In my test scenario only disabling WiFi saves about ~0.4 Watt, unloading the modules removes another ~0.4 Watt.
+
+Regarding 2: Think of a wireless accesspoint e.g. in your bedrom, kids room where you want to remove the amount of radiation emitted.
+
+Regarding 3: E.g. in a company, why would wireless need to be enabled weekends if no one is there working?
+Or think of an accesspoint in your kids room when you want the youngsters to sleep after 10 pm instead of facebooking...
+
+## Configuration
+You can create an arbitrary number of schedule events. Please note that there is on sanity check done whether the start / stop times overlap or make sense.
+If start and stop time are equal, this leads to disabling the WiFi at the given time.
+
+Logging if enabled is done to the file `/var/log/wifi_schedule.log` and can be reviewed through the "View Logfile" tab.
+The cron jobs created can be reviewed through the "View Cron Jobs" tab.
+
+Please note that the "Unload Modules" function is currently considered as experimental. You can manually add / remove modules in the text field.
+The button "Determine Modules Automatically" tries to make a best guess determining regarding the driver module and its dependencies.
+When un-/loading the modules, there is a certain number of retries (`module_load`) performed.
+
+The option "Force disabling wifi even if stations associated" does what it says - when activated it simply shuts down WiFi.
+When unchecked, its checked every `recheck_interval` minutes if there are still stations associated. Once the stations disconnect, WiFi is disabled.
+
+Please note, that the parameters `module_load` and `recheck_interval` are only accessible through uci.
+
+## UCI Configuration `wifi_schedule`
+UCI configuration file: `/etc/config/wifi_schedule`:
+
+```
+config global
+        option logging '0'
+        option enabled '0'
+        option recheck_interval '10'
+        option modules_retries '10'
+
+config entry 'Businesshours'
+        option enabled '0'
+        option daysofweek 'Monday Tuesday Wednesday Thursday Friday'
+        option starttime '06:00'
+        option stoptime '22:00'
+        option forcewifidown '0'
+
+config entry 'Weekend'
+        option enabled '0'
+        option daysofweek 'Saturday Sunday'
+        option starttime '00:00'
+        option stoptime '00:00'
+        option forcewifidown '1'
+```
+
+## Script: `wifi_schedule.sh`
+This is the script that does the work. Make your changes to the UCI config file: `/etc/config/wifi_schedule`
+
+Then call the script as follows in order to get the necessary cron jobs created:
+
+`wifi_schedule.sh cron`
+
+All commands:
+
+```
+wifi_schedule.sh cron|start|stop|forcestop|recheck|getmodules|savemodules|help
+
+    cron: Create cronjob entries.
+    start: Start wifi.
+    stop: Stop wifi gracefully, i.e. check if there are stations associated and if so keep retrying.
+    forcestop: Stop wifi immediately.
+    recheck: Recheck if wifi can be disabled now.
+    getmodules: Returns a list of modules used by the wireless driver(s)
+    savemodules: Saves a list of automatic determined modules to UCI
+    help: This description.
+```
diff --git a/package/luci/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua b/package/luci/applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua
new file mode 100644 (file)
index 0000000..b61244a
--- /dev/null
@@ -0,0 +1,46 @@
+-- Copyright (c) 2016, prpl Foundation
+--
+-- Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+-- fee is hereby granted, provided that the above copyright notice and this permission notice appear
+-- in all copies.
+--
+-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+-- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+-- FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+-- ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+--
+-- Author: Nils Koenig <openwrt@newk.it>
+
+module("luci.controller.wifischedule.wifi_schedule", package.seeall)
+
+local fs = require "nixio.fs"
+local sys = require "luci.sys"
+local template = require "luci.template"
+local i18n = require "luci.i18n"
+
+function index()
+    if not nixio.fs.access("/etc/config/wifi_schedule") then
+        return
+    end
+
+    local e = entry({"admin", "services", "wifi_schedule"}, firstchild(), _("Wifi Schedule"), 60)
+    e.acl_depends = { "luci-app-wifischedule" }
+    e.dependent = false
+
+    entry({"admin", "services", "wifi_schedule", "tab_from_cbi"}, cbi("wifischedule/wifi_schedule"), _("Schedule"), 1)
+    entry({"admin", "services", "wifi_schedule", "wifi_schedule"}, call("wifi_schedule_log"), _("View Logfile"), 2)
+    entry({"admin", "services", "wifi_schedule", "cronjob"}, call("view_crontab"), _("View Cron Jobs"), 3)
+end
+
+function wifi_schedule_log()
+    local logfile = fs.readfile("/tmp/log/wifi_schedule.log") or ""
+    template.render("wifischedule/file_viewer",
+        {title = i18n.translate("Wifi Schedule Logfile"), content = logfile})
+end
+
+function view_crontab()
+    local crontab = fs.readfile("/etc/crontabs/root") or ""
+    template.render("wifischedule/file_viewer",
+        {title = i18n.translate("Cron Jobs"), content = crontab})
+end
diff --git a/package/luci/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua b/package/luci/applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua
new file mode 100644 (file)
index 0000000..1644514
--- /dev/null
@@ -0,0 +1,252 @@
+-- Copyright (c) 2016, prpl Foundation
+--
+-- Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+-- fee is hereby granted, provided that the above copyright notice and this permission notice appear
+-- in all copies.
+--
+-- THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+-- INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+-- FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+-- LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+-- ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+--
+-- Author: Nils Koenig <openwrt@newk.it>
+
+local fs  = require "nixio.fs"
+local sys = require "luci.sys"
+local uci = require("luci.model.uci").cursor()
+
+function time_validator(self, value, desc)
+    if value ~= nil then
+        h_str, m_str = string.match(value, "^(%d%d?):(%d%d?)$")
+        h = tonumber(h_str)
+        m = tonumber(m_str)
+        if ( h ~= nil and
+             h >= 0   and
+             h <= 23  and
+             m ~= nil and
+             m >= 0   and
+             m <= 59) then
+            return value
+        end
+    end
+    return nil, translatef("The value %s is invalid", desc)
+end
+
+-- -------------------------------------------------------------------------------------------------
+
+-- BEGIN Map
+m = Map("wifi_schedule", translate("Wifi Schedule"), translate("Defines a schedule when to turn on and off wifi."))
+m.apply_on_parse = true
+
+function m.on_apply(self)
+    sys.exec("/usr/bin/wifi_schedule.sh cron")
+end
+-- END Map
+
+-- BEGIN Global Section
+global_section = m:section(TypedSection, "global", translate("Global Settings"))
+global_section.optional = false
+global_section.rmempty = false
+global_section.anonymous = true
+-- END Section
+
+-- BEGIN Global Enable Checkbox
+global_enable = global_section:option(Flag, "enabled", translate("Enable Wifi Schedule"))
+global_enable.optional = false
+global_enable.rmempty = false
+
+function global_enable.validate(self, value, global_section)
+    if value == "1" then
+        if ( fs.access("/sbin/wifi") and
+             fs.access("/usr/bin/wifi_schedule.sh") )then
+            return value
+        else
+            return nil, translate("Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi")
+        end
+    else
+        return "0"
+    end
+end
+-- END Global Enable Checkbox
+
+-- BEGIN Global Logging Checkbox
+global_logging = global_section:option(Flag, "logging", translate("Enable logging"))
+global_logging.optional = false
+global_logging.rmempty = false
+global_logging.default = 0
+-- END Global Enable Checkbox
+
+-- BEGIN Global Activate WiFi Button
+enable_wifi = global_section:option(Button, "enable_wifi", translate("Activate wifi"))
+function enable_wifi.write()
+    sys.exec("/usr/bin/wifi_schedule.sh start manual")
+end
+-- END Global Activate Wifi Button
+
+-- BEGIN Global Disable WiFi Gracefully Button
+disable_wifi_gracefully = global_section:option(Button, "disable_wifi_gracefully", translate("Disable wifi gracefully"))
+function disable_wifi_gracefully.write()
+    sys.exec("/usr/bin/wifi_schedule.sh stop manual")
+end
+-- END Global Disable Wifi Gracefully Button
+
+-- BEGIN Disable WiFi Forced Button
+disable_wifi_forced = global_section:option(Button, "disable_wifi_forced", translate("Disabled wifi forced"))
+function disable_wifi_forced.write()
+    sys.exec("/usr/bin/wifi_schedule.sh forcestop manual")
+end
+-- END Global Disable WiFi Forced Button
+
+-- BEGIN Global Unload Modules Checkbox
+global_unload_modules = global_section:option(Flag, "unload_modules", translate("Unload Modules (experimental; saves more power)"))
+global_unload_modules.optional = false
+global_unload_modules.rmempty = false
+global_unload_modules.default = 0
+-- END Global Unload Modules Checkbox
+
+
+-- BEGIN Modules
+modules = global_section:option(TextValue, "modules", "")
+modules:depends("unload_modules", global_unload_modules.enabled);
+modules.wrap = "off"
+modules.rows = 10
+
+function modules.cfgvalue(self, section)
+    mod = uci:get("wifi_schedule", section, "modules")
+    if mod == nil then
+        mod = ""
+    end
+    return mod:gsub(" ", "\r\n")
+end
+
+function modules.write(self, section, value)
+    if value then
+        value_list = value:gsub("\r\n", " ")
+        ListValue.write(self, section, value_list)
+        uci:set("wifi_schedule", section, "modules", value_list)
+    end
+end
+-- END Modules
+
+-- BEGIN Determine Modules
+determine_modules = global_section:option(Button, "determine_modules", translate("Determine Modules Automatically"))
+determine_modules:depends("unload_modules", global_unload_modules.enabled);
+function determine_modules.write(self, section)
+    output = sys.exec("/usr/bin/wifi_schedule.sh getmodules")
+    modules:write(section, output)
+end
+-- END Determine Modules
+
+-- BEGIN Section
+d = m:section(TypedSection, "entry", translate("Schedule events"))
+d.addremove = true
+--d.anonymous = true
+-- END Section
+
+-- BEGIN Enable Checkbox
+c = d:option(Flag, "enabled", translate("Enable"))
+c.optional = false
+c.rmempty = false
+-- END Enable Checkbox
+
+-- BEGIN Day(s) of Week
+dow = d:option(MultiValue, "daysofweek", translate("Day(s) of Week"))
+dow.optional = false
+dow.rmempty = false
+dow:value("Monday", translate("Monday"))
+dow:value("Tuesday", translate("Tuesday"))
+dow:value("Wednesday", translate("Wednesday"))
+dow:value("Thursday", translate("Thursday"))
+dow:value("Friday", translate("Friday"))
+dow:value("Saturday", translate("Saturday"))
+dow:value("Sunday", translate("Sunday"))
+-- END Day(s) of Weel
+
+-- BEGIN Start Wifi Dropdown
+starttime =  d:option(Value, "starttime", translate("Start WiFi"))
+starttime.optional = false
+starttime.rmempty = false
+starttime:value("00:00")
+starttime:value("01:00")
+starttime:value("02:00")
+starttime:value("03:00")
+starttime:value("04:00")
+starttime:value("05:00")
+starttime:value("06:00")
+starttime:value("07:00")
+starttime:value("08:00")
+starttime:value("09:00")
+starttime:value("10:00")
+starttime:value("11:00")
+starttime:value("12:00")
+starttime:value("13:00")
+starttime:value("14:00")
+starttime:value("15:00")
+starttime:value("16:00")
+starttime:value("17:00")
+starttime:value("18:00")
+starttime:value("19:00")
+starttime:value("20:00")
+starttime:value("21:00")
+starttime:value("22:00")
+starttime:value("23:00")
+
+function starttime.validate(self, value, d)
+    return time_validator(self, value, translate("Start Time"))
+end
+-- END Start Wifi Dropdown
+
+-- BEGIN Stop Wifi Dropdown
+stoptime = d:option(Value, "stoptime", translate("Stop WiFi"))
+stoptime.optional = false
+stoptime.rmempty = false
+stoptime:value("00:00")
+stoptime:value("01:00")
+stoptime:value("02:00")
+stoptime:value("03:00")
+stoptime:value("04:00")
+stoptime:value("05:00")
+stoptime:value("06:00")
+stoptime:value("07:00")
+stoptime:value("08:00")
+stoptime:value("09:00")
+stoptime:value("10:00")
+stoptime:value("11:00")
+stoptime:value("12:00")
+stoptime:value("13:00")
+stoptime:value("14:00")
+stoptime:value("15:00")
+stoptime:value("16:00")
+stoptime:value("17:00")
+stoptime:value("18:00")
+stoptime:value("19:00")
+stoptime:value("20:00")
+stoptime:value("21:00")
+stoptime:value("22:00")
+stoptime:value("23:00")
+
+function stoptime.validate(self, value, d)
+    return time_validator(self, value, translate("Stop Time"))
+end
+-- END Stop Wifi Dropdown
+
+-- BEGIN Force Wifi Stop Checkbox
+force_wifi = d:option(Flag, "forcewifidown", translate("Force disabling wifi even if stations associated"))
+force_wifi.default = false
+force_wifi.rmempty = false
+
+function force_wifi.validate(self, value, d)
+    if value == "0" then
+        if fs.access("/usr/bin/iwinfo") then
+            return value
+        else
+            return nil, translate("Could not find required program /usr/bin/iwinfo")
+        end
+    else
+        return "1"
+    end
+end
+-- END Force Wifi Checkbox
+
+return m
diff --git a/package/luci/applications/luci-app-wifischedule/luasrc/view/wifischedule/file_viewer.htm b/package/luci/applications/luci-app-wifischedule/luasrc/view/wifischedule/file_viewer.htm
new file mode 100644 (file)
index 0000000..f67a2be
--- /dev/null
@@ -0,0 +1,22 @@
+<%#
+Copyright (c) 2016, prpl Foundation
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+fee is hereby granted, provided that the above copyright notice and this permission notice appear
+in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+Author: Nils Koenig <openwrt@newk.it>
+-%>
+
+<%+header%>
+<h2 name="title"><%=title%></h2>
+<div id="content_fileviewer">
+<textarea style="width: 100%" readonly="readonly" wrap="off" rows="<%=content:cmatch("\n")+1%>" id="content_id"><%=content:pcdata()%></textarea>
+</div>
+<%+footer%>
diff --git a/package/luci/applications/luci-app-wifischedule/po/ar/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/ar/wifischedule.po
new file mode 100644 (file)
index 0000000..5787b9f
--- /dev/null
@@ -0,0 +1,149 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2021-03-03 01:51+0000\n"
+"Last-Translator: Said Zakaria <said.zakaria@gmail.com>\n"
+"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/ar/>\n"
+"Language: ar\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Weblate 4.5\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "تنشيط واي فاي"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "تعذر العثور على /usr/bin/wifi_schedule.sh أو / sbin / wifi المطلوبة"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "تعذر العثور على البرنامج المطلوب / usr / bin / iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "كرون الوظائف"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "ايام الاسبوع"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "يحدد الجدول الزمني عند تشغيل واي فاي وإيقافه."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "تحديد الوحدات تلقائيًا"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "تعطيل wifi بأمان"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "اضطر واي فاي معطل"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "شغل"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "ممكن جدولة واي فاي"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "تمكين سجل التسجيل"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "فرض تعطيل wifi حتى إذا كانت المحطات مرتبطة"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "الجمعة"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "الاعدادات العامة"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "امنح UCI حق الوصول إلى luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "الإثنين"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "السبت"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "جدولة"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "جدولة الأحداث"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "وقت البدء"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "ابدأ WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "وقت التوقف"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "إيقاف WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "الأحد"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "القيمة٪ s غير صالحة"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "الخميس"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "الثلاثاء"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "وحدات التفريغ (تجريبية ؛ توفر المزيد من الطاقة)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "عرض وظائف كرون"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "عرض ملف السجل"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "الأربعاء"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "جدولة واي فاي"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "ملف سجل جدولة Wifi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/bg/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/bg/wifischedule.po
new file mode 100644 (file)
index 0000000..fa75f58
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-14 10:54+0000\n"
+"Last-Translator: Boyan Alexiev <nneauu@gmail.com>\n"
+"Language-Team: Bulgarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/bg/>\n"
+"Language: bg\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.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Активиране на Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Не мога да намеря необходимия /usr/bin/wifi_schedule.sh или /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Не можах да намеря необходимата програма/usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Крон Джобс"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Ден(и) от седмицата"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Определя график за включване и изключване на Wi-Fi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Автоматично определяне на модулите"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Деактивиране на Wifi търпеливо"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+#, fuzzy
+msgid "Disabled wifi forced"
+msgstr "Деактивиран WiFi принудително"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Включване"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+#, fuzzy
+msgid "Enable Wifi Schedule"
+msgstr "Активиране на графика за Wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Включване на логване"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Принудително деактивиране на Wi-Fi, дори ако има свързани станции"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Петък"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Глобални настройки"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Предоставяне на достъп до UCI за luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Понеделник"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Събота"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "График"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Планиране на събития"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Начален час"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Стартиране на WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Време за спиране"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Спиране на WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Неделя"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Стойността %s е невалидна"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Четвъртък"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Вторник"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Изключване на модулите (експериментално; спестява повече енергия)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Виж Cron Задачите"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Виж журнал"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Сряда"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "WiFi график"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "журнал на Wifi график"
diff --git a/package/luci/applications/luci-app-wifischedule/po/bn_BD/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/bn_BD/wifischedule.po
new file mode 100644 (file)
index 0000000..0fff702
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2021-10-08 17:53+0000\n"
+"Last-Translator: Rayhan Nabi <rayhanjanam@gmail.com>\n"
+"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswifischedule/bn_BD/>\n"
+"Language: bn_BD\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+"X-Generator: Weblate 4.9-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "সক্রিয় করুন"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/ca/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/ca/wifischedule.po
new file mode 100644 (file)
index 0000000..ea12ad6
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2019-10-25 18:02+0000\n"
+"Last-Translator: Adolfo Jayme Barrientos <fitojb@ubuntu.com>\n"
+"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/ca/>\n"
+"Language: ca\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 3.9.1-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Activa"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Divendres"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Configuració global"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Dilluns"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Dissabte"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Diumenge"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "El valor %s no és vàlid"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Dijous"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Dimarts"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Descarrega els mòduls (experimental; estalvia més energia)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Mostra el fitxer de registre"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Dimecres"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/cs/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/cs/wifischedule.po
new file mode 100644 (file)
index 0000000..d81625e
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-08-31 08:31+0000\n"
+"Last-Translator: David Rapaň <david@rapan.cz>\n"
+"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/cs/>\n"
+"Language: cs\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.0.1-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktivovat WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Nepodařilo se najít požadované soubory /usr/bin/wifi_schedule.sh nebo /sbin/"
+"wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Nepodařilo se najít požadovaný program /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Naplánované (cron) úlohy"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Den/dny v týdnu"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definuje plán pro zapnutí a vypnutí WiFi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Určit moduly automaticky"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Vypnout WiFi kultivovaně"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Vypnout WiFi vynuceně"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Povolit"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Povolit plán WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Zaznamenávat události"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Vynutit vypnutí WiFi, i když jsou přidruženi klienti"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "pátek"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Obecná nastavení"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Udělit přístup k UCI pro luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "pondělí"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "sobota"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Plán"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Plánované události"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Čas spuštění"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Spuštění WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Čas vypnutí"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Vypnutí WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "neděle"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Hodnota %s není platná"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "čtvrtek"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "úterý"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Vypnout ovladače hardware (experimentální; šetří více energie)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Zobrazit naplánované (cron) úlohy"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Zobrazit obsah souboru se záznamem událostí"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "středa"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "WiFi plán"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Protokol WiFi plánu"
diff --git a/package/luci/applications/luci-app-wifischedule/po/da/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/da/wifischedule.po
new file mode 100644 (file)
index 0000000..744ea15
--- /dev/null
@@ -0,0 +1,149 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-12 18:09+0000\n"
+"Last-Translator: Hannu Nyman <hannu.nyman@iki.fi>\n"
+"Language-Team: Danish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/da/>\n"
+"Language: da\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.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktiver wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Kunne ikke finde den nødvendige /usr/bin/wifi_schedule.sh eller /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Kunne ikke finde det nødvendige program /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron job"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Ugedag(e) i ugen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definerer en tidsplan for, hvornår wifi skal tændes og slukkes."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Bestem moduler automatisk"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Deaktiver wifi gracefully"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Deaktiveret wifi tvunget"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Aktiver"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Aktiver Wifi-tidsplan"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Aktiver logning"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Tving deaktivering af wifi, selvom stationer er tilknyttet"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Fredag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Globale indstillinger"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Giv UCI adgang til luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Mandag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Lørdag"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Tidsplan"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Planlæg begivenheder"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Starttidspunkt"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Start WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Stop Tid"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Stop WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Søndag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Værdien %s er ugyldig"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Torsdag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Tirsdag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "unload af moduler (eksperimentelt; sparer mere strøm)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Se Cron Jobs"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Se logfil"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Onsdag"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Wifi tidsplan"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Wifi tidsplan logfil"
diff --git a/package/luci/applications/luci-app-wifischedule/po/de/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/de/wifischedule.po
new file mode 100644 (file)
index 0000000..49759a0
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-06 10:09+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
+"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/de/>\n"
+"Language: de\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.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "WLAN aktivieren"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Konnte /usr/bin/wifi_schedule.sh oder /sbin/wifi nicht finden"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+"Das erforderliche Programm konnte nicht gefunden werden /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Zeitgesteuerte Aufgaben"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Wochentag(e)"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+"Definiert einen Zeitplan, wann das WLAN ein- und ausgeschaltet werden soll."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Module automatisch ermitteln"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Wifi ordnungsgemäß deaktivieren"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Wifi abrupt deaktivieren"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Aktivieren"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Wifi-Zeitschaltung aktivieren"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Protokollierung aktivieren"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Deaktivieren des WLANs auch bei verbundenen Stationen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Freitag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Globale Einstellungen"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Gewähre UCI Zugriff auf luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Montag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Samstag"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Zeitschaltung"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Ereignisse planen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Startzeit"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "WiFi starten"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Stoppzeit"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "WiFi stoppen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Sonntag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Der Wert %s ist ungültig"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Donnerstag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Dienstag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Module entladen (experimentell - spart mehr Energie)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Cron-Jobs anzeigen"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Protokolldatei anzeigen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Mittwoch"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Wifi-Zeitschaltung"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Protokolldatei für Wifi-Zeitschaltung"
diff --git a/package/luci/applications/luci-app-wifischedule/po/el/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/el/wifischedule.po
new file mode 100644 (file)
index 0000000..bce2538
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2022-11-02 08:08+0000\n"
+"Last-Translator: TakissX <pxatzidakis@gmail.com>\n"
+"Language-Team: Greek <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/el/>\n"
+"Language: el\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 4.14.2-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Ενεργοποίηση"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Ενεργοποίηση καταγραφής"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Κυριακή"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Πέμπτη"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Τρίτη"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/en/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/en/wifischedule.po
new file mode 100644 (file)
index 0000000..e4d0b69
--- /dev/null
@@ -0,0 +1,142 @@
+msgid ""
+msgstr ""
+"Language: en\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/es/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/es/wifischedule.po
new file mode 100644 (file)
index 0000000..c03e773
--- /dev/null
@@ -0,0 +1,151 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2024-02-05 02:27+0000\n"
+"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\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.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Activar Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "No se pudo encontrar /usr/bin/wifi_schedule.sh o /sbin/wifi requerido"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "No se pudo encontrar el programa requerido /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Trabajos Cron"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Día(s) de la semana"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Define un horario de cuándo encender y apagar Wi-Fi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Determinar módulos automáticamente"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Desactivar Wi-Fi con gracia"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Desactivar Wi-Fi forzosamente"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Activar"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Activar programación Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Habilitar el registro"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Forzar desactivación de Wi-Fi incluso con clientes conectados"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Viernes"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Configuración global"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Conceder acceso a UCI para luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Lunes"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Sábado"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Programar"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Programar eventos"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Hora de inicio"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Iniciar Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Hora de detención"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Detener Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Domingo"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "El valor %s es inválido"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Jueves"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Martes"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Módulos de descarga (experimental; ahorra más energía)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Ver los trabajos de Cron"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Ver archivo de registro"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Miércoles"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Horario de Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Archivo de registro de programación Wi-Fi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/fi/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/fi/wifischedule.po
new file mode 100644 (file)
index 0000000..04a993b
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2022-03-25 14:09+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"Language-Team: Finnish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/fi/>\n"
+"Language: fi\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 4.12-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktivoi wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Vaadittua tiedostoa /usr/bin/wifi_schedule.sh tai /sbin/wifi ei löydy"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Vaadittua ohjelmaa /usr/bin/iwinfo ei löydy"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron-työt"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Viikonpäivät"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Määrittää aikataulun, milloin wifi käynnistetään ja sammutetaan."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Määritä moduulit automaattisesti"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Sammuta wifi nätisti"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Sammuta wifi pakottaen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Ota käyttöön"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Käytä wifi-aikataulutusta"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Käytä lokitusta"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Perjantai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Yleiset asetukset"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Maanantai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Lauantai"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Aikataulu"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Ajastetut tapahtumat"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Käynnistysaika"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Käynnistä wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Lopetusaika"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Pysäytä wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Sunnuntai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Arvo %s on virheellinen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Torstai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Tiistai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Näytä cron-työt"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Näytä lokitiedosto"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Keskiviikko"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Wifi-aikataulu"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Wifi-aikataulun lokitiedosto"
diff --git a/package/luci/applications/luci-app-wifischedule/po/fr/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/fr/wifischedule.po
new file mode 100644 (file)
index 0000000..5d58af4
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-27 18:20+0000\n"
+"Last-Translator: ButterflyOfFire <boffire@users.noreply.hosted.weblate.org>\n"
+"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/fr/>\n"
+"Language: fr\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.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Activer le wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Impossible de trouver le fichier requis /usr/bin/wifi_schedule.sh ou /sbin/"
+"wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Impossible de trouver le programme requis /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Tâches régulières (cron)"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Jour(s) de la semaine"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Définit un calendrier pour l'activation et la désactivation du wifi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Déterminer les modules automatiquement"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Désactiver le wifi proprement"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Désactiver le wifi (mode forcé)"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Activer"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Activer la programmation du wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Activer la journalisation"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Forcer la désactivation du wifi, même si des stations sont associées"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Vendredi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Paramètres généraux"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Accorder tous les accès UCI à luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Lundi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Samedi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Programmer"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Calendrier des événements"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Heure de début"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Démarrer le wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Heure de fin"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Arrêter le wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Dimanche"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "La valeur %s est invalide"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Jeudi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Mardi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Ne pas charger les modules (expérimental, mode économie d'énergie)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Voir les tâches régulières (cron)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Afficher le fichier de journal"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Mercredi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Programmation du wifi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Fichier de log de la programmation du wifi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/he/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/he/wifischedule.po
new file mode 100644 (file)
index 0000000..e1dfaf6
--- /dev/null
@@ -0,0 +1,149 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-02-25 06:41+0000\n"
+"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"Language-Team: Hebrew <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/he/>\n"
+"Language: he\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=4; plural=(n == 1) ? 0 : ((n == 2) ? 1 : ((n > 10 && "
+"n % 10 == 0) ? 2 : 3));\n"
+"X-Generator: Weblate 5.5-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "הפעלה"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "הגדרות גלובליות"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/hi/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/hi/wifischedule.po
new file mode 100644 (file)
index 0000000..1af92fa
--- /dev/null
@@ -0,0 +1,142 @@
+msgid ""
+msgstr ""
+"Language: hi\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/hu/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/hu/wifischedule.po
new file mode 100644 (file)
index 0000000..f3fa071
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-10-01 19:02+0000\n"
+"Last-Translator: Balaskó Kristóf <kristof@balaskokristof.hu>\n"
+"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/hu/>\n"
+"Language: hu\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.1-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Wifi aktiválása"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Engedélyezés"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Naplózás engedélyezése"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Péntek"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Globális beállítások"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Hétfő"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Szombat"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Vasárnap"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Csütörtök"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Kedd"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Naplófájl megtekintése"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Szerda"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/it/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/it/wifischedule.po
new file mode 100644 (file)
index 0000000..91fe78c
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-03-06 09:48+0000\n"
+"Last-Translator: Nico Carlino <ziconick@gmail.com>\n"
+"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/it/>\n"
+"Language: it\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.5-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Attiva wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Impossibile trovare /usr/bin/wifi_schedule.sh o /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Impossibile trovare il programma /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Operazioni Programmate"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Giorno(i) della Settimana"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definisce un piano di accensione o spegnimento del WiFi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Determina i Moduli Automaticamente"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Disabilita wifi con grazia"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Disabilita wifi con forza"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Abilitare"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Abilita il Piano Wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Abilita la registrazione"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Forza disattivazione wifi anche con stazioni associate"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Venerdì"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Impostazioni globali"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Concedi accesso UCI per luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Lunedì"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Sabato"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Piano"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Piano eventi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Orario inizio"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Avvia WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Orario di Stop"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Disattiva WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Domenica"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Il valore %s è invalido"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Giovedì"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Martedì"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Scarica Moduli (sperimentale; risparmia più energia)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Vedi Operazioni Programmate"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Visualizza registro"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Mercoledì"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Piano Wifi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Registro Piano Wifi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/ja/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/ja/wifischedule.po
new file mode 100644 (file)
index 0000000..0b43897
--- /dev/null
@@ -0,0 +1,152 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2020-12-10 19:29+0000\n"
+"Last-Translator: Ryota <21ryotagamer@gmail.com>\n"
+"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/ja/>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "WiFiのアクティブ化"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"必須の /usr/bin/wifi_schedule.sh または /sbin/wifi が見つかりませんでした"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "必須のプログラム /usr/bin/iwinfo が見つかりませんでした"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cronジョブ"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "曜日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "WiFiのオンとオフを切り替えるスケジュールを設定します。"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "モジュールを自動的に決定する"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "WiFiの通常終了"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "WiFiの強制終了"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "有効化"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "WiFi スケジュールの有効化"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "ログの有効化"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "ステーションが関連付けられていてもWiFiを強制終了する"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "金曜日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "全体設定"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "luci-app-wifischeduleにUCIアクセスを許可"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "月曜日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "土曜日"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "スケジュール"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "実行スケジュール"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "開始時刻"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "WiFiの開始"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "停止時刻"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "WiFiの停止"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "日曜日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "%s の値が無効です"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "木曜日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "火曜日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "モジュールのアンロード(実験的、より省電力)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Cronジョブの確認"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "ログファイルの確認"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "水曜日"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "WiFi スケジュール"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "WiFiスケジュール ログファイル"
diff --git a/package/luci/applications/luci-app-wifischedule/po/ko/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/ko/wifischedule.po
new file mode 100644 (file)
index 0000000..5d14242
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-10-04 03:38+0000\n"
+"Last-Translator: Wonchul Kang <teshi85@gmail.com>\n"
+"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/ko/>\n"
+"Language: ko\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.1-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "활성화"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "금요일"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "공통 설정"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/lt/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/lt/wifischedule.po
new file mode 100644 (file)
index 0000000..f2dc190
--- /dev/null
@@ -0,0 +1,154 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2024-01-08 01:06+0000\n"
+"Last-Translator: Džiugas J <dziugas1959@hotmail.com>\n"
+"Language-Team: Lithuanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/lt/>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
+"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
+"1 : 2);\n"
+"X-Generator: Weblate 5.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktyvuoti „Wi-Fi“"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Negalima surasti reikalingo „/usr/bin/wifi_schedule.sh“ ar „/sbin/wifi“"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Negali surasti reikalingos programos „/usr/bin/iwinfo“"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "„Cron“ darbai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Savaitės diena/-os"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+"Nustato tvarkaraštį, kada įjungti ir išjungti belaidžio – „Wi-Fi“ tinklą."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Nustatyti modulius automatiškai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Išjungti „Wi-Fi“ grakščiai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Išjungtas „Wi-Fi“ priverstai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Įjungti/Įgalinti"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Įjungti „Wi-FI“ tvarkaraštį"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Įjungti žurnalinimą"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Priversti „Wi-Fi“ išjungimo, net jeigu yra prisijungusių"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Penktadienis"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Pagrindiniai/Vieši nustatymai"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Suteikti „UCI“ prieigą – „luci-app-wifischedule“"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Pirmadienis"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Šeštadienis"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Planuotojas/Tvarkaraštis"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Tvarkaraščio/Planuotojo įvykiai"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Pradėti laiką"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Paleisti „Wi-Fi“"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Sustabdyti laiką"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Sustabdyti „Wi-Fi“"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Sekmadienis"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Reikšmė %s yra negalima"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Ketvirtadienis"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Antradienis"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Iškrauti modulius (eksperimentinis; sutaupo daugiau energijos)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Rodyti „Cron“ darbus"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Peržiūrėti žurnalo failą"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Trečiadienis"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "„Wi-Fi“ tvarkaraštis"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "„Wi-Fi“ tvarkaraščio žurnalo failas"
diff --git a/package/luci/applications/luci-app-wifischedule/po/mr/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/mr/wifischedule.po
new file mode 100644 (file)
index 0000000..bdc7f76
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2020-10-16 10:26+0000\n"
+"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
+"Language-Team: Marathi <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/mr/>\n"
+"Language: mr\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 4.3.1-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "वायफाय सक्रीय करा"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "सक्षम करा"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/ms/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/ms/wifischedule.po
new file mode 100644 (file)
index 0000000..0c972d1
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-01-21 20:36+0000\n"
+"Last-Translator: Abdul Muizz Bin Abdul Jalil <abmuizz@gmail.com>\n"
+"Language-Team: Malay <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/ms/>\n"
+"Language: ms\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.4-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktifkan wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Pemboleh"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/nb_NO/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/nb_NO/wifischedule.po
new file mode 100644 (file)
index 0000000..7cd9852
--- /dev/null
@@ -0,0 +1,149 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-08-02 12:53+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/nb_NO/>\n"
+"Language: nb_NO\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.0-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+#, fuzzy
+msgid "Activate wifi"
+msgstr "Aktiver Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Skru på"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Starttid"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/nl/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/nl/wifischedule.po
new file mode 100644 (file)
index 0000000..f13d726
--- /dev/null
@@ -0,0 +1,149 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-04-18 14:03+0000\n"
+"Last-Translator: Stephan <stephanrutten@users.noreply.hosted.weblate.org>\n"
+"Language-Team: Dutch <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/nl/>\n"
+"Language: nl\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.5-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Activeer wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Kon /usr/bin/wifi_schedule.sh of /sbin/wifi niet vinden, die vereist zijn"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Kon het vereiste programma /usr/bin/iwinfo niet vinden"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron Jobs"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Dag(en) van de week"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definieert een schema wanneer wifi moet worden in- en uitgeschakeld."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Modules automatisch bepalen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Wifi gracieus uitschakelen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Uitgeschakelde wifi geforceerd"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Inschakelen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Wifi-schema inschakelen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Logging inschakelen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Forceer het uitschakelen van wifi, zelfs als stations zijn gekoppeld"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Vrijdag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Algemene instellingen"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Verleen UCI toegang voor luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Maandag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Zaterdag"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Schema"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Evenementen plannen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Starttijd"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Start WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Stop tijd"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Stop WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Zondag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "De waarde %s is ongeldig"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Donderdag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Dinsdag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Modules ontladen (experimenteel; bespaart meer energie)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Bekijk Cron Jobs"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Logbestand bekijken"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Woensdag"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Wifi-schema"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Logbestand wifi-schema"
diff --git a/package/luci/applications/luci-app-wifischedule/po/pl/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/pl/wifischedule.po
new file mode 100644 (file)
index 0000000..d243bb5
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-06-17 20:43+0000\n"
+"Last-Translator: Matthaiks <kitynska@gmail.com>\n"
+"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/pl/>\n"
+"Language: pl\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.6-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktywuj Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Nie można znaleźć wymaganych plików /usr/bin/wifi_schedule. sh lub /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Nie można znaleźć wymaganego programu /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Zadania cron"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Dzień/Dni tygodnia"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Określa harmonogram włączania i wyłączania Wi-Fi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Automatyczne określanie modułów"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Płynne wyłączenie Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Wymuszone wyłączenie Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Włącz"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Włącz harmonogram Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Włącz rejestrowanie"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Wymuś wyłączenie Wi-Fi, nawet jeśli stacje są podłączone"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Piątek"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Ustawienia globalne"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Przyznaj luci-app-wifischedule dostęp do UCI"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Poniedziałek"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Sobota"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Harmonogram"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Harmonogram wydarzeń"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Czas rozpoczęcia"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Uruchom Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Czas zatrzymania"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Zatrzymaj Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Niedziela"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Wartość %s jest nieprawidłowa"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Czwartek"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Wtorek"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Zwalnianie modułów (oszczędność energii)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Widok zadań cron"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Wyświetl plik dziennika"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Środa"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Harmonogram Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Plik dziennika harmonogramu Wi-Fi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/pt/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/pt/wifischedule.po
new file mode 100644 (file)
index 0000000..b148109
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2020-07-20 11:41+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
+"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/pt/>\n"
+"Language: pt\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 4.2-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Ativar a WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Não foi possível localizar os programas necessários '/usr/bin/wifi_schedule."
+"sh' ou '/sbin/wifi'"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Não foi possível localizar o programa necessário '/usr/bin/iwinfo'"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Tarefas da Cron"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Dia(s) da semana"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Define um agendamento para quando ligar ou desligar a WiFi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Determinar os Módulos Automaticamente"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Desativar a WiFi amistosamente"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "WiFi foi desativada de forma forçada"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Ativar"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Ativar o agendamento da WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Ativar registo de dados"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Force a desativação da WiFi mesmo se existirem estações associadas"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Sexta-feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Configurações Globais"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Conceder acesso UCI ao luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Segunda-feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Sábado"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Agendamento"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Eventos do agendamento"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Hora do Início"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Iniciar WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Hora Final"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Parar WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Domingo"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "O valor %s é inválido"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Quinta-feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Terça-feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Descarregar Módulos (experimental, poupa mais energia)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Visualizar Tarefas da Cron"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Ver Ficheiro de Registo"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Quarta-feira"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Agendamento da Wifi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Ficheiro de Registros (log) do Agendamento da Wifi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/pt_BR/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/pt_BR/wifischedule.po
new file mode 100644 (file)
index 0000000..78478c6
--- /dev/null
@@ -0,0 +1,153 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"POT-Creation-Date: \n"
+"PO-Revision-Date: 2024-06-24 23:51+0000\n"
+"Last-Translator: Janderson Vieira Santos <jandersonvs79@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswifischedule/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\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.6-rc\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Ativar a WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Não foi possível localizar os programas necessários '/usr/bin/wifi_schedule."
+"sh' ou '/sbin/wifi'"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Não foi possível localizar o programa necessário '/usr/bin/iwinfo'"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Tarefas da Cron"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Dia(s) da semana"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Define um agendamento para quando ligar ou desligar a WiFi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Determinar os Módulos Automaticamente"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Desabilitar a WiFi amistosamente"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "O WiFi foi desativado de forma forçada"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Habilitar"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Habilitar o agendamento da WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Habilitar registro"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Sempre desativar o WiFi ainda que existam estações associadas"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Sexta-feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Configurações Globais"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Conceda acesso UCI ao luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Segunda-Feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Sábado"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Agendamento"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Eventos do agendamento"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Hora do Início"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Iniciar WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Hora Final"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Parar WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Domingo"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "O valor %s é inválido"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Quita-feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Terça-feira"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Descarregar Módulos (experimental, poupa mais energia)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Visualizar Tarefas da Cron"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Visualizar o Arquivo de Registros (log)"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Quarta-feira"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Agendamento da Wifi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Arquivo de Registros (log) do Agendamento da Wifi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/ro/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/ro/wifischedule.po
new file mode 100644 (file)
index 0000000..4326462
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-04-23 07:04+0000\n"
+"Last-Translator: olimpiumarius <oliver_magnum44@yahoo.com>\n"
+"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/ro/>\n"
+"Language: ro\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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 4.18-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Activează wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Nu s-a putut găsi fișierul necesar /usr/bin/wifi_schedule.sh sau /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Nu a putut găsi programul necesar /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Locuri de muncă Cron"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Ziua (zilele) din săptămână"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definește un program de activare și dezactivare a rețelei Wi-Fi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Determinarea Automată a Modulelor"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Oprește wifi-ul doar dacă nu există clienti conectați"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Oprește wifi-ul forțat - deconectând clienții conectați"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Activează"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Activează temporizarea WiFi-ului"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Activează fișierul log"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Forțează oprirea wifi-ului chiar dacă sunt clienți conectați"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Vineri"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Setări generale"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Acordă acces la UCI pentru luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Luni"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Sâmbătă"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Temporizare/program"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Programează evenimentele"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Ora de începere"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Pornește WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Ora opririi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Oprește WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Duminică"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Valoarea %s este invalidă"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Joi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Marţi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Descărcarea modulelor (experimental; economisește mai multă energie)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Vezi locuri de muncă Cron"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Vezi fișierul log"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Miercuri"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Temporizarea WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Fișierul log al temporizării Wifi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/ru/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/ru/wifischedule.po
new file mode 100644 (file)
index 0000000..afa400b
--- /dev/null
@@ -0,0 +1,155 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: wifischedule\n"
+"POT-Creation-Date: 2017-11-30 15:30+0300\n"
+"PO-Revision-Date: 2023-04-03 07:17+0000\n"
+"Last-Translator: AHOHNMYC <lqwh2h2cwa@protonmail.com>\n"
+"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.17-dev\n"
+"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
+"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Включить Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Не удалось найти файл /usr/bin/wifi_schedule.sh или /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Не удалось найти требуемую программу /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron задания"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "День (дни) недели"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Определяет расписание включения и выключения Wi-Fi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Автоматическое определение модулей"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Отключить Wi-Fi корректно"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Отключить Wi-Fi принудительно"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Включить"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Включить Wi-Fi планировщик"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Включить ведение системного журнала"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Принудительно отключить Wi-Fi даже если имеются подключенные клиенты"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Пятница"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Общие настройки"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Предоставить UCI доступ для luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Понедельник"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Суббота"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Планировщик"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Планировщик событий"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Время начала"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Время включения Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Время окончания"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Время отключения Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Воскресенье"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Значение %s является недействительным"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Четверг"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Вторник"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+"Модули не загружаются (экспериментальная опция; экономит больше энергии)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Показать сron задания"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Журнал работы"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Среда"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Wi-Fi планировщик"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Системный журнал Wi-Fi планировщика"
diff --git a/package/luci/applications/luci-app-wifischedule/po/sk/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/sk/wifischedule.po
new file mode 100644 (file)
index 0000000..56e2b49
--- /dev/null
@@ -0,0 +1,154 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-07-12 15:48+0000\n"
+"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
+"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/sk/>\n"
+"Language: sk\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.0-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktivovať wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Nepodarilo sa nájsť požadované súbory /usr/bin/wifi_schedule.sh alebo /sbin/"
+"wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Nepodarilo sa nájsť požadovaný program /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron úlohy"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Deň (dni) v týždni"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Definuje plán kedy zapnúť a vypnúť wifi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Automaticky určiť moduly"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+#, fuzzy
+msgid "Disable wifi gracefully"
+msgstr "Kultivované vypnutie WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+#, fuzzy
+msgid "Disabled wifi forced"
+msgstr "Vynútené vypnutie WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Povoliť"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Povoliť Wi-Fi plánovanie"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Povoliť protokolovanie"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Vynútiť vypnutie WiFi aj keď sú pridružení klienti"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Piatok"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Globálne nastavenia"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Udeliť prístup UCI pre luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Pondelok"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Sobota"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Plán"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Plán udalostí"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+#, fuzzy
+msgid "Start Time"
+msgstr "Čas začiatku"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Zapnúť WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+#, fuzzy
+msgid "Stop Time"
+msgstr "Čas konca"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Vypnúť WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Nedeľa"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Hodnota %s je neplatná"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Štvrtok"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Utorok"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Uvoľniť moduly (experimentálne; šetrí viac energie)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Zobraziť Cron úlohy"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Zobraziť súbor denníka"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Streda"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "WiFi plánovanie"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Súbor denníka WiFi plánu"
diff --git a/package/luci/applications/luci-app-wifischedule/po/sv/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/sv/wifischedule.po
new file mode 100644 (file)
index 0000000..06be93a
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-05-12 20:34+0000\n"
+"Last-Translator: Daniel Nilsson <daniel.nilsson94@outlook.com>\n"
+"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/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.5.4\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Aktivera wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Kunde inte hitta nödvändig /usr/bin/wifi_schedule.sh eller /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Kunde inte hitta nödvändigt program /usr/bin/ iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron-jobb"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Dag(ar) i veckan"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Anger ett schema när wifi ska startas och stängas ner."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Avgör moduler automatiskt"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Inaktivera wifi elegant"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Inaktivering av wifi påtvingat"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Aktivera"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Aktivera Wifi-schema"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Aktivera loggning"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Tvinga avaktivering av wifi, även om stationer är anslutna"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Fredag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Globala inställningar"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Ge UCI-åtkomst till luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Måndag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Lördag"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Schema"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Schemalägg händelser"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Starttid"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Starta WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Stopptid"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Stoppa WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Söndag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Värdet %s är ogiltigt"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Torsdag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Tisdag"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Befria moduler (experimentiell; sparar mer ström)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Se Cron-jobb"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Se loggfilen"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Onsdag"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Wifi-schema"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Loggfil för Wifi-schema"
diff --git a/package/luci/applications/luci-app-wifischedule/po/templates/wifischedule.pot b/package/luci/applications/luci-app-wifischedule/po/templates/wifischedule.pot
new file mode 100644 (file)
index 0000000..e6c085e
--- /dev/null
@@ -0,0 +1,139 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/tr/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/tr/wifischedule.po
new file mode 100644 (file)
index 0000000..1540866
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2021-04-09 08:05+0000\n"
+"Last-Translator: Oğuz Ersen <oguzersen@protonmail.com>\n"
+"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/tr/>\n"
+"Language: tr\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 4.6-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Kablosuz ağı etkinleştir"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Gerekli olan /usr/bin/wifi_schedule.sh ve /sbin/wifi dosyaları bulunamadı"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Gerekli uygulama bulunamadı /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron İşleri"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "Haftanın Gün(leri)"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Kablosuz bağlantının ne zaman açılıp kapatılacağını belirler."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Modülleri Otomatik Olarak Belirle"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Kablosuz bağlantıyı kapat"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Kablosuz bağlantıyı zorla kapat"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Etkinleştir"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Kablosuz Ağ Zamanlamasını Etkinleştir"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Günlük kaydını etkinleştir"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+"İstasyonlar ilişkilendirilmiş olsa bile wifi'y devre dışı bırakmaya zorla"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Cuma"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Genel Ayarlar"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "luci-app-wifischedule için UCI erişimi verin"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Pazartesi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Cumartesi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Planla"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Etkinlik planla"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Başlangıç Saati"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Kablosuz Ağı Başlat"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Durma Saati"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Kablosuz Ağı Kapat"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Pazar"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "%s değeri geçersiz"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Perşembe"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Salı"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Modülleri Kaldır (deneysel; daha fazla güç tasarrufu sağlar)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Cron İşlerini Görüntüle"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Günlük Dosyasını Görüntüle"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Çarşamba"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Kablosuz Ağ Programı"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Kablosuz Ağ Programı Günlük Dosyası"
diff --git a/package/luci/applications/luci-app-wifischedule/po/uk/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/uk/wifischedule.po
new file mode 100644 (file)
index 0000000..6fcbfab
--- /dev/null
@@ -0,0 +1,150 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2022-12-18 15:49+0000\n"
+"Last-Translator: Dan <denqwerta@gmail.com>\n"
+"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/uk/>\n"
+"Language: uk\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.15.1-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Вмикати WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+"Не вдалося знайти необхідний файл /usr/bin/wifi_schedule.sh або /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Не вдалося знайти необхідну програму /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Завдання Cron"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "День (дні) тижня"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Визначає розклад увімкнення WiFi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Автоматичне визначення модулів"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Коректно вимкнути WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Примусово вимкнути WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Увімкнути"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Увімкнути планувальник WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Увімкнути ведення звіту"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Примусово вимикати WiFi, незважаючі на підключені станції"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "П'ятниця"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Загальні параметри"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Надати доступ UCI для luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Понеділок"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Субота"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Планувальник"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Планувальник подій"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Час початку"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Запуск WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Час закінчення"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Зупинка WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Неділя"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Значення «%s» є недопустимим"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Четвер"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Вівторок"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Не вивантажувати модулі (експериментально; зберігає більше енергії)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Переглянути завдання Cron"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Переглянути файл звіту"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Середа"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "WiFi планувальник"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Файл звіту планувальника WiFi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/vi/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/vi/wifischedule.po
new file mode 100644 (file)
index 0000000..cf1e60d
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-06-20 06:36+0000\n"
+"Last-Translator: Quy <haonguyen93056@gmail.com>\n"
+"Language-Team: Vietnamese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswifischedule/vi/>\n"
+"Language: vi\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.18.1\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "Kích hoạt Wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "Không thể tìm thấy yêu cầu /usr/bin/wifi_schedule.sh hoặc /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "Không thể tìm thấy chương trình cần thiết /usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "Cron Jobs"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "ngày trong tuần"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "Xác định lịch trình bật và tắt wifi."
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "Xác định modules tự động"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "Vô hiệu hóa wifi gracefully"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "Vô hiệu hóa wifi forced"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "Bật lên"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "Kích hoạt lịch trình Wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "Bật logging"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "Buộc tắt wifi ngay cả khi được liên kết"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "Thứ 6"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "Cài đặt chung"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "Cấp quyền truy cập UCI cho luci-app-wifischedule"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "Thứ 2"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "Thứ 7"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "Lên lịch"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "Lên lịch sự kiện"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "Thời gian bắt đầu"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "Bật WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "Thời gian dừng"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "Dừng WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "Chủ Nhật"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "Giá trị %s không hợp lệ"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "Thứ 5"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "Thứ 3"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "Unload Modules (thử nghiệm; tiết kiệm điện hơn)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "Xem Cron Jobs"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "Xem Logfile"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "Thứ 4"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Lên lịch WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Nhật ký lịch trình Wifi"
diff --git a/package/luci/applications/luci-app-wifischedule/po/yue/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/yue/wifischedule.po
new file mode 100644 (file)
index 0000000..325b4b5
--- /dev/null
@@ -0,0 +1,142 @@
+msgid ""
+msgstr ""
+"Language: yue\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr ""
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr ""
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wifischedule/po/zh_Hans/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/zh_Hans/wifischedule.po
new file mode 100644 (file)
index 0000000..bdffd1a
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2022-06-19 12:59+0000\n"
+"Last-Translator: MkQtS <onewordwrong@aliyun.com>\n"
+"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswifischedule/zh_Hans/>\n"
+"Language: zh_Hans\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.13.1-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "启动 WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "无法找到必需的 /usr/bin/wifi_schedule.sh 或 /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "无法找到必需程序:/usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "计划任务"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "星期"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "定义自动打开和关闭 WiFi 的计划表。"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "自动确定模块"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "正常关闭 WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "强制关闭 WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "启用"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "启用 WiFi 计划"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "启用日志"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "即使有设备连接也强制关闭 WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "星期五"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "全局设置"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "授予UCI访问luci-app-wifischedule的权限"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "星期一"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "星期六"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "计划表"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "计划事件"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "开始时间"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "启动 WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "关闭时间"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "关闭 WiFi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "星期日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "%s 的值无效"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "星期四"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "星期二"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "卸载模块(实验性的,更省电)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "查看计划任务"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "查看日志文件"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "星期三"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "WiFi 计划"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "WiFi 计划日志文件"
diff --git a/package/luci/applications/luci-app-wifischedule/po/zh_Hant/wifischedule.po b/package/luci/applications/luci-app-wifischedule/po/zh_Hant/wifischedule.po
new file mode 100644 (file)
index 0000000..51eadc2
--- /dev/null
@@ -0,0 +1,148 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2024-05-25 19:30+0000\n"
+"Last-Translator: Hulen <shift0106@gmail.com>\n"
+"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswifischedule/zh_Hant/>\n"
+"Language: zh_Hant\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.6-dev\n"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:81
+msgid "Activate wifi"
+msgstr "啟用 Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:65
+msgid "Could not find required /usr/bin/wifi_schedule.sh or /sbin/wifi"
+msgstr "無法找到必需的 /usr/bin/wifi_schedule.sh 或 /sbin/wifi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:244
+msgid "Could not find required program /usr/bin/iwinfo"
+msgstr "無法找到必需程式:/usr/bin/iwinfo"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:45
+msgid "Cron Jobs"
+msgstr "排程任務"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:154
+msgid "Day(s) of Week"
+msgstr "星期"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Defines a schedule when to turn on and off wifi."
+msgstr "定義 Wi-Fi 開關時間的排程表。"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:133
+msgid "Determine Modules Automatically"
+msgstr "自動判斷模組"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:88
+msgid "Disable wifi gracefully"
+msgstr "正常停用 Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:95
+msgid "Disabled wifi forced"
+msgstr "強制停用 Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:148
+msgid "Enable"
+msgstr "啟用"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:55
+msgid "Enable Wifi Schedule"
+msgstr "啟用 Wi-Fi 排程"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:74
+msgid "Enable logging"
+msgstr "啟用日誌"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:235
+msgid "Force disabling wifi even if stations associated"
+msgstr "即使有裝置連線也強制關閉 Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:161
+msgid "Friday"
+msgstr "星期五"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:48
+msgid "Global Settings"
+msgstr "全域設定"
+
+#: applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json:3
+msgid "Grant UCI access for luci-app-wifischedule"
+msgstr "授予 luci-app-wifischedule 擁有 UCI 存取的權限"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:157
+msgid "Monday"
+msgstr "星期一"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:162
+msgid "Saturday"
+msgstr "星期六"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:31
+msgid "Schedule"
+msgstr "排程表"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:142
+msgid "Schedule events"
+msgstr "排程事件"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:196
+msgid "Start Time"
+msgstr "開始時間"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:167
+msgid "Start WiFi"
+msgstr "啟動 Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:230
+msgid "Stop Time"
+msgstr "關閉時間"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:201
+msgid "Stop WiFi"
+msgstr "關閉 Wi-Fi"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:163
+msgid "Sunday"
+msgstr "星期日"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:33
+msgid "The value %s is invalid"
+msgstr "%s 的值無效"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:160
+msgid "Thursday"
+msgstr "星期四"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:158
+msgid "Tuesday"
+msgstr "星期二"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:102
+msgid "Unload Modules (experimental; saves more power)"
+msgstr "解除安裝模組(實驗性;節省更多電量)"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:33
+msgid "View Cron Jobs"
+msgstr "檢視排程任務"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:32
+msgid "View Logfile"
+msgstr "查看記錄檔"
+
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:159
+msgid "Wednesday"
+msgstr "星期三"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:27
+#: applications/luci-app-wifischedule/luasrc/model/cbi/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule"
+msgstr "Wi-Fi 排程"
+
+#: applications/luci-app-wifischedule/luasrc/controller/wifischedule/wifi_schedule.lua:39
+msgid "Wifi Schedule Logfile"
+msgstr "Wi-Fi 排程日誌檔案"
diff --git a/package/luci/applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json b/package/luci/applications/luci-app-wifischedule/root/usr/share/rpcd/acl.d/luci-app-wifischedule.json
new file mode 100644 (file)
index 0000000..df44e7c
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "luci-app-wifischedule": {
+               "description": "Grant UCI access for luci-app-wifischedule",
+               "read": {
+                       "uci": [ "wifi_schedule" ]
+               },
+               "write": {
+                       "uci": [ "wifi_schedule" ]
+               }
+       }
+}
diff --git a/package/luci/applications/luci-app-wol/Makefile b/package/luci/applications/luci-app-wol/Makefile
new file mode 100644 (file)
index 0000000..d935ee9
--- /dev/null
@@ -0,0 +1,14 @@
+#
+# Copyright (C) 2008-2014 The LuCI Team <luci@lists.subsignal.org>
+#
+# This is free software, licensed under the Apache License, Version 2.0 .
+#
+
+include $(TOPDIR)/rules.mk
+
+LUCI_TITLE:=LuCI Support for Wake-on-LAN
+LUCI_DEPENDS:=+etherwake
+
+include ../../luci.mk
+
+# call BuildPackage - OpenWrt buildroot signature
diff --git a/package/luci/applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js b/package/luci/applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js
new file mode 100644 (file)
index 0000000..b7e251a
--- /dev/null
@@ -0,0 +1,143 @@
+'use strict';
+'require view';
+'require dom';
+'require uci';
+'require fs';
+'require ui';
+'require rpc';
+'require form';
+'require tools.widgets as widgets';
+
+return view.extend({
+       formdata: { wol: {} },
+
+       callHostHints: rpc.declare({
+               object: 'luci-rpc',
+               method: 'getHostHints',
+               expect: { '': {} }
+       }),
+
+       load: function() {
+               return Promise.all([
+                       L.resolveDefault(fs.stat('/usr/bin/etherwake')),
+                       L.resolveDefault(fs.stat('/usr/bin/wol')),
+                       this.callHostHints(),
+                       uci.load('etherwake')
+               ]);
+       },
+
+       render: function(data) {
+               var has_ewk = data[0],
+                   has_wol = data[1],
+                   hosts = data[2],
+                   m, s, o;
+
+               this.formdata.has_ewk = has_ewk;
+               this.formdata.has_wol = has_wol;
+
+               m = new form.JSONMap(this.formdata, _('Wake on LAN'),
+                       _('Wake on LAN is a mechanism to remotely boot computers in the local network.'));
+
+               s = m.section(form.NamedSection, 'wol');
+
+               if (has_ewk && has_wol) {
+                       o = s.option(form.ListValue, 'executable', _('WoL program'),
+                               _('Sometimes only one of the two tools works. If one fails, try the other one'));
+
+                       o.value('/usr/bin/etherwake', 'Etherwake');
+                       o.value('/usr/bin/wol', 'WoL');
+               }
+
+               if (has_ewk) {
+                       o = s.option(widgets.DeviceSelect, 'iface', _('Network interface to use'),
+                               _('Specifies the interface the WoL packet is sent on'));
+
+                       o.default = uci.get('etherwake', 'setup', 'interface');
+                       o.rmempty = false;
+                       o.noaliases = true;
+                       o.noinactive = true;
+
+                       if (has_wol)
+                               o.depends('executable', '/usr/bin/etherwake');
+               }
+
+               o = s.option(form.Value, 'mac', _('Host to wake up'),
+                       _('Choose the host to wake up or enter a custom MAC address to use'));
+
+               o.rmempty = false;
+
+               L.sortedKeys(hosts).forEach(function(mac) {
+                       o.value(mac, E([], [ mac, ' (', E('strong', [
+                               hosts[mac].name ||
+                               L.toArray(hosts[mac].ipaddrs || hosts[mac].ipv4)[0] ||
+                               L.toArray(hosts[mac].ip6addrs || hosts[mac].ipv6)[0] ||
+                               '?'
+                       ]), ')' ]));
+               });
+
+               if (has_ewk) {
+                       o = s.option(form.Flag, 'broadcast', _('Send to broadcast address'));
+
+                       if (has_wol)
+                               o.depends('executable', '/usr/bin/etherwake');
+               }
+
+               return m.render();
+       },
+
+       handleWakeup: function(ev) {
+               var map = document.querySelector('#maincontent .cbi-map'),
+                   data = this.formdata;
+
+               return dom.callClassMethod(map, 'save').then(function() {
+                       if (!data.wol.mac)
+                               return alert(_('No target host specified!'));
+
+                       var bin = data.executable || (data.has_ewk ? '/usr/bin/etherwake' : '/usr/bin/wol'),
+                           args = [];
+
+                       if (bin == '/usr/bin/etherwake') {
+                               args.push('-D', '-i', data.wol.iface);
+
+                               if (data.wol.broadcast == '1')
+                                       args.push('-b');
+
+                               args.push(data.wol.mac);
+                       }
+                       else {
+                               args.push('-v', data.wol.mac);
+                       }
+
+                       ui.showModal(_('Waking host'), [
+                               E('p', { 'class': 'spinning' }, [ _('Starting WoL utility…') ])
+                       ]);
+
+                       return fs.exec(bin, args).then(function(res) {
+                               ui.showModal(_('Waking host'), [
+                                       res.stderr ? E('p', [ res.stdout ]) : '',
+                                       res.stderr ? E('pre', [ res.stderr ]) : '',
+                                       E('div', { 'class': 'right' }, [
+                                               E('button', {
+                                                       'class': 'cbi-button cbi-button-primary',
+                                                       'click': ui.hideModal
+                                               }, [ _('Dismiss') ])
+                                       ])
+                               ]);
+                       }).catch(function(err) {
+                               ui.hideModal();
+                               ui.addNotification(null, [
+                                       E('p', [ _('Waking host failed: '), err ])
+                               ]);
+                       });
+               });
+       },
+
+       addFooter: function() {
+               return E('div', { 'class': 'cbi-page-actions' }, [
+                       E('button', {
+                               'class': 'cbi-button cbi-button-save',
+                               'click': L.ui.createHandlerFn(this, 'handleWakeup')
+                       }, [ _('Wake up host') ])
+               ]);
+       }
+});
diff --git a/package/luci/applications/luci-app-wol/po/ar/wol.po b/package/luci/applications/luci-app-wol/po/ar/wol.po
new file mode 100644 (file)
index 0000000..59672dc
--- /dev/null
@@ -0,0 +1,84 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-03-03 01:50+0000\n"
+"Last-Translator: Said Zakaria <said.zakaria@gmail.com>\n"
+"Language-Team: Arabic <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/ar/>\n"
+"Language: ar\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
+"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n"
+"X-Generator: Weblate 4.5\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "إلغاء"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wol/po/bg/wol.po b/package/luci/applications/luci-app-wol/po/bg/wol.po
new file mode 100644 (file)
index 0000000..dc1e61b
--- /dev/null
@@ -0,0 +1,84 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-08-31 01:32+0000\n"
+"Last-Translator: Iskren Mihaylov <iskren.mihaylov91@gmail.com>\n"
+"Language-Team: Bulgarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/bg/>\n"
+"Language: bg\n"
+"MIME-Version: 1.0\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 4.8.1-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Изберете хост, който да бъде събуден или въведете MAC адрес"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Затвори"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Разрешете достъп до изпълнимите файлове на wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Хост за събуждане"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Мрежови интерфейс"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Не сте избрали хост!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Изпрати до броудкаст адрес"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr "Понякога само едното от двете работи. Сменете при нужда"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Изберете интерфейса, по който WoL пакета да се изпрати"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Стартиране на WoL …"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Събуждане по LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN е механизъм за отдалечено включване на хостове в локалната мрежа."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Събуди хост"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Събуждане на хост"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Събуждането се провали:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL програма"
diff --git a/package/luci/applications/luci-app-wol/po/bn_BD/wol.po b/package/luci/applications/luci-app-wol/po/bn_BD/wol.po
new file mode 100644 (file)
index 0000000..c74a163
--- /dev/null
@@ -0,0 +1,85 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-10-08 17:53+0000\n"
+"Last-Translator: Rayhan Nabi <rayhanjanam@gmail.com>\n"
+"Language-Team: Bengali (Bangladesh) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswol/bn_BD/>\n"
+"Language: bn_BD\n"
+"MIME-Version: 1.0\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 4.9-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "জেগে তোলার জন্য হোস্ট বেছে নিন অথবা একটি কাস্টম MAC ঠিকানা দিন"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "বাতিল"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "ওয়েক-অন-ল্যান এক্সিকিউটেবলদের অ্যাক্সেস মঞ্জুর করুন"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "জেগে তোলার জন্য হোস্ট"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "যে নেটওয়ার্ক ইন্টারফেস ব্যবহার করতে হবে"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "কোন টার্গেট হোস্ট বলা নেই!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "সম্প্রচারের ঠিকানায় পাঠান"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"কখনও দুটি টুলের মধ্যে একটি মাত্র কাজ করে। যদি একটি ব্যর্থ হয়, তবে অপরটি চেষ্টা করুন"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "WoL প্যাকেট পাঠানো ইন্টারফেসটি নির্দিষ্ট করে"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "WoL ইউটিলিটি চালু হচ্ছে…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "ল্যানে জেগে তুলুন"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"স্থানীয় নেটওয়ার্কে দূরে থেকে কম্পিউটার বুট করার একটি প্রক্রিয়া হল ওয়েক অন ল্যান।"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "হোস্ট জেগে তুলুন"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "জেগে ওঠা হোস্ট"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "হোস্ট জাগাতে ব্যর্থ:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WOL প্রোগ্রাম"
diff --git a/package/luci/applications/luci-app-wol/po/ca/wol.po b/package/luci/applications/luci-app-wol/po/ca/wol.po
new file mode 100644 (file)
index 0000000..204f0d5
--- /dev/null
@@ -0,0 +1,92 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-09-17 06:52+0000\n"
+"Last-Translator: Roger Pueyo Centelles <weblate@rogerpueyo.com>\n"
+"Language-Team: Catalan <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/ca/>\n"
+"Language: ca\n"
+"MIME-Version: 1.0\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 4.9-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Trieu el host per a despertar o introduïu una adreça MAC personalitzada per "
+"a utilitzar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Oblida-ho"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host per a despertar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Interfície de xarxa per a utilitzar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+#, fuzzy
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"A vegades, només una de les dues eines funciona. Si un dels falla, prova la "
+"altra."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Especifica la interfície en que s'envia el paquet WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Despert en LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Despert en LAN és un mecanisme per a iniciar remotament ordinadors en la "
+"xarxa local."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Desperta al host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Programa WoL"
diff --git a/package/luci/applications/luci-app-wol/po/cs/wol.po b/package/luci/applications/luci-app-wol/po/cs/wol.po
new file mode 100644 (file)
index 0000000..40e9cbe
--- /dev/null
@@ -0,0 +1,88 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2023-09-16 13:28+0000\n"
+"Last-Translator: David Rapaň <david@rapan.cz>\n"
+"Language-Team: Czech <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/cs/>\n"
+"Language: cs\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.0.2\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Vyberte zařízení, které má být probuzeno, nebo zadejte jeho MAC adresu"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Zahodit"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Udělit přístup ke spustitelným souborům wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Adresa zařízení, které má být probuzeno"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Které síťové rozhraní použít"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nezadáno žádné cílové zařízení!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Odeslat na adresu všesměrového vysílání"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Někdy pro dané cílové zařízení funguje pouze jeden z nástrojů. Pokud první "
+"selže, vyzkoušejte ten druhý"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Zde se nastaví síťové rozhraní, přes které budou zasílány WoL packety"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Startování WoL nástroje…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Funkce \"Wake on LAN\" umožňuje vzdáleně spouštět počítače v místní síti."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Probudit zařízení"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Probouzení hostitele"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Probouzení hostitele selhalo:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Program provádějící WoL"
diff --git a/package/luci/applications/luci-app-wol/po/da/wol.po b/package/luci/applications/luci-app-wol/po/da/wol.po
new file mode 100644 (file)
index 0000000..696fb55
--- /dev/null
@@ -0,0 +1,88 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-11-12 18:41+0000\n"
+"Last-Translator: drax red <drax@outlook.dk>\n"
+"Language-Team: Danish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/da/>\n"
+"Language: da\n"
+"MIME-Version: 1.0\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 4.9.1-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Vælg værten til at vågne op, eller indtast en brugerdefineret MAC-adresse, "
+"der skal bruges"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Afvis"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Giv adgang til eksekverbare wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Vært der skal vågne op"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Netværks interface til brug"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Ingen målvært angivet!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Send til udsendelsesadresse"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Nogle gange virker kun et af de to værktøjer. Hvis den ene fejler, så prøv "
+"den anden"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Specificerer interface WoL-pakken sendes på"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Starter WoL-værktøjet…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN er en mekanisme til fjernstart af computere i det lokale netværk."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Vågn op vært"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Vågnende vært"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Vækning af vært mislykkedes:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL program"
diff --git a/package/luci/applications/luci-app-wol/po/de/wol.po b/package/luci/applications/luci-app-wol/po/de/wol.po
new file mode 100644 (file)
index 0000000..a889cd5
--- /dev/null
@@ -0,0 +1,91 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2023-02-13 12:12+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
+"Language-Team: German <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/de/>\n"
+"Language: de\n"
+"MIME-Version: 1.0\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 4.16-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Zu startenden Rechner selektieren oder benutzerdefinierte MAC-Adresse angeben"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Verwerfen"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Zugriff auf ausführbare Programme des Wake-on-lan gewähren"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Anzuschaltender Rechner"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Verwendete Schnittstelle"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Es wurde kein Zielhost angegeben!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "An die Broadcast-Adresse senden"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Manchmal funktioniert nur eines der beiden Programme. Wenn eines "
+"fehlschlägt, probiere das andere"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+"Selektiert die Netzwerkschnittstelle, auf der das WoL-Paket versendet wird"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "WoL-Dienstprogramm starten…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake-on-LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake-on-LAN ist ein Mechanismus um Geräte im lokalen Netzwerk ferngesteuert "
+"anzuschalten."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Rechner anschalten"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Rechner wird angeschaltet"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Anschalten des Rechners fehlgeschlagen:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL-Programm"
diff --git a/package/luci/applications/luci-app-wol/po/el/wol.po b/package/luci/applications/luci-app-wol/po/el/wol.po
new file mode 100644 (file)
index 0000000..cdd2eaa
--- /dev/null
@@ -0,0 +1,83 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2010-04-19 00:29+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wol/po/en/wol.po b/package/luci/applications/luci-app-wol/po/en/wol.po
new file mode 100644 (file)
index 0000000..e3a5dfa
--- /dev/null
@@ -0,0 +1,84 @@
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Choose the host to wake up or enter a custom MAC address to use"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host to wake up"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Network interface to use"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+#, fuzzy
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Sometimes only one of both tools work. If one of fails, try the other one"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Specifies the interface the WoL packet is sent on"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Wake up host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL program"
diff --git a/package/luci/applications/luci-app-wol/po/es/wol.po b/package/luci/applications/luci-app-wol/po/es/wol.po
new file mode 100644 (file)
index 0000000..62a0c6e
--- /dev/null
@@ -0,0 +1,90 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2020-12-20 06:12+0000\n"
+"Last-Translator: Franco Castillo <castillofrancodamian@gmail.com>\n"
+"Language-Team: Spanish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/es/>\n"
+"Language: es\n"
+"MIME-Version: 1.0\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 4.4-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Elija el host a despertar o introduzca su dirección MAC"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Descartar"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Conceder acceso a ejecutables de wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host a despertar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Interfaz de red a utilizar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "¡No se ha especificado el host de destino!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Enviar a la dirección de transmisión"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"A veces solo una de las dos herramientas funciona. Si una falla, pruebe la "
+"otra"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Especifica la interfaz donde se envían los paquetes WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Iniciando la utilidad WoL…"
+
+# Wake on LAN es un término habitualmente utilizado en el español para referirse a esa misma función de encendido remoto a través de la red
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN es un mecanismo para iniciar equipos de forma remota en la red "
+"local."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Despertar host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Despertar host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Falló el despertar del host:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Programa WoL"
diff --git a/package/luci/applications/luci-app-wol/po/fi/wol.po b/package/luci/applications/luci-app-wol/po/fi/wol.po
new file mode 100644 (file)
index 0000000..d16b525
--- /dev/null
@@ -0,0 +1,85 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2022-03-12 13:29+0000\n"
+"Last-Translator: Jiri Grönroos <jiri.gronroos@iki.fi>\n"
+"Language-Team: Finnish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/fi/>\n"
+"Language: fi\n"
+"MIME-Version: 1.0\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 4.12-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Valitse herätettävä laitenimi tai kirjoita mukautettu MAC-osoite"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Hylkää"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Herätettävä laitenimi"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Käytettävä verkkoliityntä"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Lähetä yleislähetysosoitteeseen"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Käynnistetään WoL-työkalu…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN on mekanismi, jolla voi etänä käynnistää tietokoneita "
+"paikallisessa verkossa."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Herätä laitenimi"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Herätetään laitenimeä"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Laitenimen herättäminen epäonnistui:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL-ohjelma"
diff --git a/package/luci/applications/luci-app-wol/po/fr/wol.po b/package/luci/applications/luci-app-wol/po/fr/wol.po
new file mode 100644 (file)
index 0000000..c62944f
--- /dev/null
@@ -0,0 +1,88 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2023-06-11 16:07+0000\n"
+"Last-Translator: viking76 <liaudetgael@gmail.com>\n"
+"Language-Team: French <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/fr/>\n"
+"Language: fr\n"
+"MIME-Version: 1.0\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 4.18-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Choisir l'hôte à réveiller ou entrer une adresse MAC à utiliser"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Effacer"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Permettre l'accès aux exécutables wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Hôte à réveiller"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Interface réseau à utiliser"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Aucun hôte cible n'est spécifié !"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Envoyer sur l'adresse de diffusion"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Parfois seul un des deux outils fonctionne. Si l'un échoue, essayez l'autre"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Spécifie l'interface sur laquelle le paquet WoL est envoyé"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Lancement de l'utilitaire WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN est un mécanisme pour démarrer à distance les ordinateurs du "
+"réseau local."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Réveiller l'hôte"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Hôte de réveil"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Hôte de réveil échoué :"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Programme WoL"
diff --git a/package/luci/applications/luci-app-wol/po/he/wol.po b/package/luci/applications/luci-app-wol/po/he/wol.po
new file mode 100644 (file)
index 0000000..6b258c6
--- /dev/null
@@ -0,0 +1,85 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-01-15 22:31+0000\n"
+"Last-Translator: Yaron Shahrabani <sh.yaron@gmail.com>\n"
+"Language-Team: Hebrew <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/he/>\n"
+"Language: he\n"
+"MIME-Version: 1.0\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 4.5-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "בחר את ה־host שברצונך להעיר או הזן כתובת MAC מותאמת אישית לשימוש"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "התעלמות"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wol/po/hi/wol.po b/package/luci/applications/luci-app-wol/po/hi/wol.po
new file mode 100644 (file)
index 0000000..dfedfaa
--- /dev/null
@@ -0,0 +1,80 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: hi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wol/po/hu/wol.po b/package/luci/applications/luci-app-wol/po/hu/wol.po
new file mode 100644 (file)
index 0000000..520c872
--- /dev/null
@@ -0,0 +1,92 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2023-09-18 15:45+0000\n"
+"Last-Translator: David Rapaň <david@rapan.cz>\n"
+"Language-Team: Hungarian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/hu/>\n"
+"Language: hu\n"
+"MIME-Version: 1.0\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.0.2\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Válassza ki a felélesztendő gépet, vagy adja meg a haszálandó egyedi MAC "
+"címet"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Eltüntetés"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Felélesztendő gép"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Használandó interfész"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nincs megadva cím!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Küldés az üzenetszórási címre"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Néha csak a két eszköz egyike működik. Ha az egyik nem működik, próbálja meg "
+"a másikat"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+"Megadja azt az interfészt amelyiken keresztül a WoL csomag kiküldésre kerül"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Felélesztés hálózaton keresztül"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"A felélesztés hálózaton keresztül a helyi hálózatban lévő számítógépek "
+"távoli elindítására szolgáló módszer."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Gép felélesztése"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Felélesztés folyamatban"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Nem sikerült feléleszteni:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL program"
diff --git a/package/luci/applications/luci-app-wol/po/id/wol.po b/package/luci/applications/luci-app-wol/po/id/wol.po
new file mode 100644 (file)
index 0000000..dd6c258
--- /dev/null
@@ -0,0 +1,88 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-02-20 08:36+0000\n"
+"Last-Translator: Ahmad Rulim <mfalkia342@gmail.com>\n"
+"Language-Team: Indonesian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/id/>\n"
+"Language: id\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.5\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Pilih host untuk bangun atau masukkan alamat MAC kustom untuk digunakan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Tutup"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Berikan akses ke file executable wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host yang akan dibangunkan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Antarmuka jaringan yang akan digunakan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Tidak ada target host yang ditentukan!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Kirim ke alamat siaran"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Kadang-kadang hanya satu dari dua alat yang berfungsi. Jika salah satu "
+"gagal, coba yang lain"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Menentukan antarmuka pengiriman paket WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Memulai utilitas WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Bangunkan di LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Bangunkan di LAN adalah mekanisme untuk menyalakan komputer dari jarak jauh "
+"di jaringan lokal."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Bangunkan host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Membangunkan host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Gagal membangunkan host:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Program WoL"
diff --git a/package/luci/applications/luci-app-wol/po/it/wol.po b/package/luci/applications/luci-app-wol/po/it/wol.po
new file mode 100644 (file)
index 0000000..a396e65
--- /dev/null
@@ -0,0 +1,88 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-09-15 08:34+0000\n"
+"Last-Translator: pisquan8 <cimurro@outlook.de>\n"
+"Language-Team: Italian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/it/>\n"
+"Language: it\n"
+"MIME-Version: 1.0\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 4.9-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Scegli l'host da \"svegliare\" o inserisci il MAC address da usare"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Chiudi"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Concedere l'accesso agli eseguibili wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host da \"svegliare\""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Interfaccia di rete da usare"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nessun host di destinazione specificato!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Manda a indirizzo di broadcast"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"A volte solo uno dei due tools funziona. Se uno fallisce, prova il secondo"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Specifica l'interfaccia su cui il pacchetto \"magico\" WoL è inviato"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Avvio dell'utilità WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN è un meccanismo che permette di avviare da remoto i computer "
+"nella rete locale."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Sveglia Host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Risvegliando l'host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Il risveglio dell'host è fallito:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Programma WoL"
diff --git a/package/luci/applications/luci-app-wol/po/ja/wol.po b/package/luci/applications/luci-app-wol/po/ja/wol.po
new file mode 100644 (file)
index 0000000..73e11ae
--- /dev/null
@@ -0,0 +1,89 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-02-07 07:33+0000\n"
+"Last-Translator: Satoru Yoshida <ramat@ram.ne.jp>\n"
+"Language-Team: Japanese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/ja/>\n"
+"Language: ja\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.5-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "起動するホストのMACアドレスを選択または入力してください"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "閉じる"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "wake-on-lan 実行可能ファイルへのアクセスを許可"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "起動するホストを指定"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "使用するネットワークインターフェース"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "ターゲットホストが指定されていません!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "ブロードキャスト アドレスに送信する"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"片方のツールのみが動作する場合があるため、片方が失敗する場合は別のツールを試"
+"してみてください"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "WoLパケットを送信するインタフェースを指定"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "WoL ユーティリティを開始中…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LANはローカルネットワーク内のコンピュータを遠隔で起動させることができ"
+"る機能です。"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "ホストを起動"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "ホストを起動"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "ホストの起動に失敗しました:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoLプログラム"
diff --git a/package/luci/applications/luci-app-wol/po/ko/wol.po b/package/luci/applications/luci-app-wol/po/ko/wol.po
new file mode 100644 (file)
index 0000000..8a69aeb
--- /dev/null
@@ -0,0 +1,87 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2022-07-31 13:17+0000\n"
+"Last-Translator: somni <me@somni.one>\n"
+"Language-Team: Korean <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/ko/>\n"
+"Language: ko\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.14-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "깨우려는 호스트를 선택하세요. MAC 주소를 직접 입력해도 됩니다."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "닫기"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "wake-on-lan 실행 파일에 권한 부여"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "깨우려는 호스트"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "사용할 네트워크 인터페이스"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "대상 호스트가 지정되지 않았습니다!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "브로드캐스트 주소로 전송"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"간혹 두 프로그램 중 하나만 정상적으로 작동하는 경우가 있습니다. 하나가 잘 작"
+"동하지 않는다면, 다른 하나로 시도해보세요."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "WoL 패킷이 전송될 인터페이스를 지정하세요."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "WoL 유틸리티 시작 중…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN은 로컬 네트워크에서 컴퓨터를 원격으로 부팅시킬 수 있는 기능입니"
+"다."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "호스트 깨우기"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "호스트 깨우는 중"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "호스트 깨우기 실패:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL 프로그램"
diff --git a/package/luci/applications/luci-app-wol/po/lt/wol.po b/package/luci/applications/luci-app-wol/po/lt/wol.po
new file mode 100644 (file)
index 0000000..3e2af84
--- /dev/null
@@ -0,0 +1,92 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2024-06-17 20:43+0000\n"
+"Last-Translator: Džiugas J <dziugas1959@hotmail.com>\n"
+"Language-Team: Lithuanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/lt/>\n"
+"Language: lt\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n % 10 == 1 && (n % 100 < 11 || n % 100 > "
+"19)) ? 0 : ((n % 10 >= 2 && n % 10 <= 9 && (n % 100 < 11 || n % 100 > 19)) ? "
+"1 : 2);\n"
+"X-Generator: Weblate 5.6-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Pasirinkti skleidėją/p.k – vedėją kurį pažadinti arba įvesti skirtingą „MAC“ "
+"adresą naudojimui"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Nepaisyti"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Duoti prieigą „wake-on-lan executables“"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Skleidėjas/P.k – vedėjas pažadinamas"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Tinklo išvaizdą naudojimui"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Jokio taikomojo skleidėjo/p.k – vedėjo nenustatytą!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Siųsti į skleidžiamąjį adresą"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Kartais tik vienas iš dviejų įrankių veikią. Jeigu vienas neveikia, "
+"mėginkite kitą"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+"Nurodo „WoL“ paketo sąsają ir/arba sietuvą, per kurį jis yra siunčiamas"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Kraunasi „WoL“ įrankis…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Atsibusti ant „LAN“"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Atsibusti ant „LAN“ yra mechanizmas nuotoliniu būdu pajungti kompiuterius "
+"vietiniame tinkle."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Pažadinti skleidėją/p.k – vedėją"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Žadinamas skleidėjas/p.k – vedėjas"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Žadinti skleidėjo/p.k – vedėjo nepavyko:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "„WoL“ programa"
diff --git a/package/luci/applications/luci-app-wol/po/mr/wol.po b/package/luci/applications/luci-app-wol/po/mr/wol.po
new file mode 100644 (file)
index 0000000..505bf40
--- /dev/null
@@ -0,0 +1,84 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2020-10-15 00:31+0000\n"
+"Last-Translator: Prachi Joshi <josprachi@yahoo.com>\n"
+"Language-Team: Marathi <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/mr/>\n"
+"Language: mr\n"
+"MIME-Version: 1.0\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 4.3-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "उठण्यासाठी होस्ट निवडा किंवा वापरण्यासाठी सानुकूल मॅक पत्ता प्रविष्ट करा"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "डिसमिस करा"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "वेक-ऑन-लॅन अंमलबजावणीसाठी प्रवेश द्या"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "जागे होण्यासाठी होस्ट"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "वापरण्यासाठी नेटवर्क इंटरफेस"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "कोणतेही लक्ष्य होस्ट निर्दिष्ट केलेले नाही!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"कधीकधी दोनपैकी केवळ एक साधने कार्य करतात. जर एक अपयशी ठरले तर दुसर्‍याचा वापरून पहा"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "WoL पॅकेट पाठवलेले इंटरफेस निर्दिष्ट करते"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "लॅनवर जागे व्हा"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr "वॅक ऑन लॅन ही स्थानिक नेटवर्कमध्ये संगणक दूरस्थपणे बूट करण्याची एक यंत्रणा आहे."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "होस्ट ला जागे करा"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "जागृत होस्ट"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "होस्ट जागृत करणे अयशस्वी:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL प्रोग्राम"
diff --git a/package/luci/applications/luci-app-wol/po/ms/wol.po b/package/luci/applications/luci-app-wol/po/ms/wol.po
new file mode 100644 (file)
index 0000000..b94afe7
--- /dev/null
@@ -0,0 +1,82 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2010-04-19 00:29+0200\n"
+"Last-Translator: Automatically generated\n"
+"Language-Team: none\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wol/po/nb_NO/wol.po b/package/luci/applications/luci-app-wol/po/nb_NO/wol.po
new file mode 100644 (file)
index 0000000..848c58a
--- /dev/null
@@ -0,0 +1,88 @@
+msgid ""
+msgstr ""
+"PO-Revision-Date: 2023-06-20 14:47+0000\n"
+"Last-Translator: Allan Nordhøy <epost@anotheragency.no>\n"
+"Language-Team: Norwegian Bokmål <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/nb_NO/>\n"
+"Language: nb_NO\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 4.18.1\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Velg hvilken vert som skal startes opp, eller angi en MAC adresse som skal "
+"brukes"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Avslå"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+#, fuzzy
+msgid "Grant access to wake-on-lan executables"
+msgstr "Innvilg tilgang til kjørbare wake-on-lan- filer"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Vert som skal startes opp"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Nettverksgrensesnitt"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Ingen målvert angitt!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Send til kringkastingsadresse"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+#, fuzzy
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Noen ganger virker bare ett av disse verktøyene. Hvis ett av de ikke lykkes "
+"med å starte opp verten kan du prøve det andre."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Angir grensesnittet som WoL pakken blir sendt ut på"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Starter WoL-verktøy …"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN er en mekanisme for å starte opp datamaskiner i det lokale "
+"nettverket."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Start vert"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+#, fuzzy
+msgid "Waking host"
+msgstr "Vekker vert"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Kunne ikke vekke vert:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL programm"
diff --git a/package/luci/applications/luci-app-wol/po/nl/wol.po b/package/luci/applications/luci-app-wol/po/nl/wol.po
new file mode 100644 (file)
index 0000000..bc6ec03
--- /dev/null
@@ -0,0 +1,89 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2023-05-06 12:52+0000\n"
+"Last-Translator: xtz1983 <xtz1983@gmail.com>\n"
+"Language-Team: Dutch <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/nl/>\n"
+"Language: nl\n"
+"MIME-Version: 1.0\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 4.18-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Kies de host om wakker te worden of voer een aangepast MAC-adres in om te "
+"gebruiken"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Afwijzen"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Verleen toegang tot uitvoerbare wake-on-lan-bestanden"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Gastheer om wakker te worden"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Te gebruiken netwerkinterface"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Geen doelhost opgegeven!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Verzenden naar uitzendadres"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Soms werkt slechts één van de twee tools. Als de ene niet lukt, probeer dan "
+"de andere"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Specificeert de interface waarop het WoL-pakket wordt verzonden"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "WoL utility starten…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN is een mechanisme om computers in het lokale netwerk op afstand "
+"op te starten."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Gastheer wakker maken"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Wakkere gastheer"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Wekken host mislukt:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL programma"
diff --git a/package/luci/applications/luci-app-wol/po/pl/wol.po b/package/luci/applications/luci-app-wol/po/pl/wol.po
new file mode 100644 (file)
index 0000000..e6aecbe
--- /dev/null
@@ -0,0 +1,88 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2024-06-27 14:44+0000\n"
+"Last-Translator: Piotr Kołtun <pkoltungm@gmail.com>\n"
+"Language-Team: Polish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/pl/>\n"
+"Language: pl\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
+"|| n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 5.7-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Wybierz hosta, który ma zostać wybudzony lub wprowadź jego adres MAC"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Zamknij"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Udziel dostępu do plików wykonywalnych wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host do wybudzenia"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Użyty interfejs sieciowy"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nie określono hosta docelowego!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Wyślij na adres rozgłoszeniowy"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr "Czasem działa tylko jedno z narzędzi. Jeżeli nie zadziała, użyj innego"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Określa interfejs, na który będzie wysłany pakiet WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Uruchamiam narzędzie WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"\"Wake on LAN\" to mechanizm służący do zdalnego włączania komputerów w "
+"sieci lokalnej."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Wybudź hosta"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Wybudzanie hosta"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Nieudane wybudzenie hosta:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Narzędzie WoL"
diff --git a/package/luci/applications/luci-app-wol/po/pt/wol.po b/package/luci/applications/luci-app-wol/po/pt/wol.po
new file mode 100644 (file)
index 0000000..af5be70
--- /dev/null
@@ -0,0 +1,87 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2020-12-19 06:29+0000\n"
+"Last-Translator: ssantos <ssantos@web.de>\n"
+"Language-Team: Portuguese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/pt/>\n"
+"Language: pt\n"
+"MIME-Version: 1.0\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 4.4-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Escolha ao host a acordar ou escreva um MAC personalizado a ser usado"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Dispensar"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Conceder acesso aos executáveis wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host a acordar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Interface de rede a usar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nenhum host de destino especificado!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Enviar para o endereço de broadcast"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr "Às vezes só uma das ferramentas funciona. Se uma falhar, tente a outra"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Especifica a interface pela qual é enviado o pacota WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "A iniciar o utilitário WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN é um mecanismo para remotamente iniciar computadores numa rede "
+"local."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Acordar host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Acordando o host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Arcordar o host falhou:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Programa de WoL"
diff --git a/package/luci/applications/luci-app-wol/po/pt_BR/wol.po b/package/luci/applications/luci-app-wol/po/pt_BR/wol.po
new file mode 100644 (file)
index 0000000..627e09f
--- /dev/null
@@ -0,0 +1,89 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2020-12-16 15:03+0000\n"
+"Last-Translator: Wellington Terumi Uemura <wellingtonuemura@gmail.com>\n"
+"Language-Team: Portuguese (Brazil) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswol/pt_BR/>\n"
+"Language: pt_BR\n"
+"MIME-Version: 1.0\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 4.4-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Escolha o computador para acordar ou entre com um endereço MAC"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Dispensar"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Conceda acesso UCI aos executáveis wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Computador para acordar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Interfaces de rede para usar"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nenhum host de destino foi especificado!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Enviar para o endereço de broadcast"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Algumas vezes, somente uma das duas ferramentas funciona. Se uma delas "
+"falhar, tente a outra"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Especifica a interface para onde os pacotes de WoL serão enviados"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Iniciando o utilitário WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN é um mecanismo para acordar/ligar remotamente computadores na "
+"rede local."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Acorda um computador"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Host acordado"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Falha ao acordar o host:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Programa WoL"
diff --git a/package/luci/applications/luci-app-wol/po/ro/wol.po b/package/luci/applications/luci-app-wol/po/ro/wol.po
new file mode 100644 (file)
index 0000000..fe6c3bd
--- /dev/null
@@ -0,0 +1,90 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-11-16 17:37+0000\n"
+"Last-Translator: Simona Iacob <s@zp1.net>\n"
+"Language-Team: Romanian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/ro/>\n"
+"Language: ro\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"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 4.9.1-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Alege statie pentru \"trezire\" sau introdu o adresa MAC de folosit"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Închideți"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Acordarea accesului la executabilele wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Statie pentru \"trezire\""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Interfata de retea pentru utilizare"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nu este specificată nicio gazdă țintă!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Trimiteți la adresa de difuzare"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Uneori, doar unul dintre cele două instrumente funcționează. Dacă unul "
+"dintre ele eșuează, încercați-l pe celălalt"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Specifica interfata prin care pachetele WoL sunt trimise"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Lansarea utilitarului WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Activarea pe LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Activarea pe LAN e un mecanism pentru a porni de la distanta computere de pe "
+"retea."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Statie de \"trezire\""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Gazda care se trezește"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Trezirea gazdei a eșuat:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Program WoL"
diff --git a/package/luci/applications/luci-app-wol/po/ru/wol.po b/package/luci/applications/luci-app-wol/po/ru/wol.po
new file mode 100644 (file)
index 0000000..2cd4223
--- /dev/null
@@ -0,0 +1,89 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: LuCI: wol\n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-01-09 15:32+0000\n"
+"Last-Translator: Nt0G <nt0gggg@gmail.com>\n"
+"Language-Team: Russian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/ru/>\n"
+"Language: ru\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.4.1-dev\n"
+"Project-Info: Это технический перевод, не дословный. Главное-удобный русский "
+"интерфейс, все проверялось в графическом режиме, совместим с другими apps\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Выберите устройство для пробуждения или введите MAC-адрес"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Закрыть"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Предоставить доступ к исполняемым файлам Wake-on-LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Устройство для пробуждения"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Используемый сетевой интерфейс"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Не указано устройство!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Отправить на широковещательный адрес"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Иногда работает только один из двух способов: не сработал один — попробуйте "
+"другой"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Сетевой интерфейс, с которого будут посланы пакеты WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Запуск утилиты WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Пробуждение по LAN (Wake on LAN, WoL) — механизм удалённого включения "
+"устройств в локальной сети."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Разбудить устройство"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Пробуждаемое устройство"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Пробуждение не удалось:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Утилита <abbr title=\"Wake on LAN\">WoL</abbr>"
diff --git a/package/luci/applications/luci-app-wol/po/sk/wol.po b/package/luci/applications/luci-app-wol/po/sk/wol.po
new file mode 100644 (file)
index 0000000..605d898
--- /dev/null
@@ -0,0 +1,86 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2023-07-08 12:50+0000\n"
+"Last-Translator: MaycoH <hudec.marian@hotmail.com>\n"
+"Language-Team: Slovak <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/sk/>\n"
+"Language: sk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
+"X-Generator: Weblate 5.0-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Vyberte hostiteľa pre zobudenie, alebo zadajte vlastnú MAC adresu, ktorú "
+"chcete použiť"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Zahodiť"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Poskytnite prístup k spustiteľným súborom wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Hostiteľ na zobudenie"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Sieťové rozhranie na použitie"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Nebol zadaný žiadny cieľový hostiteľ!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Odoslať na broadcast adresu"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Niekedy funguje iba jeden z týchto dvoch nástrojov. Ak jeden zlyhá, skúste "
+"druhý"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Určuje rozhranie, na ktoré sa odosiela packet WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Spúšťa sa nástroj WoL…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN je mechanizmus na diaľkové zapnutie počítačov v lokálnej sieti."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Zobudiť hostiteľa"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Zobúdzanie hostiteľa"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Zobúdzanie hostiteľa zlyhalo:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Program WoL"
diff --git a/package/luci/applications/luci-app-wol/po/sv/wol.po b/package/luci/applications/luci-app-wol/po/sv/wol.po
new file mode 100644 (file)
index 0000000..a1e4b45
--- /dev/null
@@ -0,0 +1,87 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"PO-Revision-Date: 2024-05-12 20:34+0000\n"
+"Last-Translator: Daniel Nilsson <daniel.nilsson94@outlook.com>\n"
+"Language-Team: Swedish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/sv/>\n"
+"Language: sv\n"
+"MIME-Version: 1.0\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.5.4\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Välj värden som ska väckas upp eller fyll i en anpassad MAC-adress att "
+"använda"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Avfärda"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Värd att väcka upp"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Nätverksgränssnitt att använda"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Ingen målvärd angiven!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Skicka till sändningsadress"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Ibland så fungerar bara en av de två verktygen. Prova med den andra om den "
+"första misslyckades"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Anger gränssnittet som fjärrstartspaketet skickas med"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Startar WoL verktyg…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Fjärrstyrning av uppstart"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Fjärrstyrning av uppstart är en mekanism för att starta upp datorer via "
+"fjärrstyrning i det lokala nätverket."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Väck upp värden"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Program för fjärrstart"
diff --git a/package/luci/applications/luci-app-wol/po/templates/wol.pot b/package/luci/applications/luci-app-wol/po/templates/wol.pot
new file mode 100644 (file)
index 0000000..b04e72e
--- /dev/null
@@ -0,0 +1,70 @@
+msgid ""
+msgstr "Content-Type: text/plain; charset=UTF-8"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr ""
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr ""
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr ""
diff --git a/package/luci/applications/luci-app-wol/po/tr/wol.po b/package/luci/applications/luci-app-wol/po/tr/wol.po
new file mode 100644 (file)
index 0000000..4673282
--- /dev/null
@@ -0,0 +1,88 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-05-18 05:32+0000\n"
+"Last-Translator: semih <semiht@gmail.com>\n"
+"Language-Team: Turkish <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/tr/>\n"
+"Language: tr\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.7-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Uyandırmak için bir cihaz seçin ya da elle bir MAC adresi girin"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Kapat"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "WoL yürütülebilir dosyalarına erişim izni verin"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Uyandırılacak cihaz"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Kullanılacak ağ arayüzü"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Hedef cihaz belirtilmedi!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Yayın adresine gönder"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Bazen iki araçtan yalnızca biri çalışır. Biri başarısız olursa diğerini "
+"deneyin"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "WoL paketinin gönderildiği arayüzü belirtir"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "WoL yardımcı programı başlatılıyor…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Wake on LAN, yerel ağdaki bilgisayarları uzaktan uyandırma mekanizmasıdır."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Cihazı uyandır"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Cihazı uyandırma"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Cihaz uyandırma başarısız:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "WoL uygulaması"
diff --git a/package/luci/applications/luci-app-wol/po/uk/wol.po b/package/luci/applications/luci-app-wol/po/uk/wol.po
new file mode 100644 (file)
index 0000000..7cb6f5f
--- /dev/null
@@ -0,0 +1,88 @@
+msgid ""
+msgstr ""
+"Project-Id-Version: \n"
+"PO-Revision-Date: 2021-03-12 09:02+0000\n"
+"Last-Translator: Tymofij Lytvynenko <till.svit@gmail.com>\n"
+"Language-Team: Ukrainian <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/uk/>\n"
+"Language: uk\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && "
+"n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
+"X-Generator: Weblate 4.5.2-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr ""
+"Виберіть комп'ютер, який необхідно розбудити або введіть користувацьку MAC-"
+"адресу"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Закрити"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Надати доступ до виконуваних файлів wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Комп'ютер, який необхідно розбудити"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Використовувати мережевий інтерфейс"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Цільовий компʼютер не вказано!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Надіслати на широкомовну адресу"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Іноді працює тільки одна з цих двох утиліт. Якщо одна з них не працює, "
+"спробуйте іншу."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Визначає інтерфейс, яким буде надіслано пакет WoL"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Запуск засобу WoL …"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr ""
+"Пробудження через LAN (Wake on LAN) є технологією, що дає змогу віддалено "
+"\"будити\" (вмикати) комп'ютери у локальній мережі."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Розбудити комп'ютер"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Пробудження компʼютера"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Помилка пробудження:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Программа WoL"
diff --git a/package/luci/applications/luci-app-wol/po/vi/wol.po b/package/luci/applications/luci-app-wol/po/vi/wol.po
new file mode 100644 (file)
index 0000000..f50bf75
--- /dev/null
@@ -0,0 +1,87 @@
+# Generated from applications/luci-wol/luasrc/model/cbi/wol.lua
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2023-06-21 04:37+0000\n"
+"Last-Translator: Quy <haonguyen93056@gmail.com>\n"
+"Language-Team: Vietnamese <https://hosted.weblate.org/projects/openwrt/"
+"luciapplicationswol/vi/>\n"
+"Language: vi\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.18.1\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "Chọn máy chủ để đánh thức hoặc nhập địa chỉ MAC tùy chỉnh để sử dụng"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "Bỏ qua"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "Cấp quyền truy cập vào các tệp thực thi Wake-on-lan"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "Host to wake up"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "Giao thức mạng để sử dụng"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "Không có target host được chỉ định!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "Gửi đến địa chỉ broadcast"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr ""
+"Đôi khi chỉ một trong hai công cụ hoạt động. Nếu một cái không thành công, "
+"hãy thử cái khác"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "Chỉ định giao diện gói WoL được gửi"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "Đang bắt WoL …"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "Wake on LAN"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr "Wake on LAN là cơ chế khởi động từ xa các máy tính trong mạng nội bộ."
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "Wake up host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "Waking host"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "Waking host thất bại:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "Chương trình WoL"
diff --git a/package/luci/applications/luci-app-wol/po/zh_Hans/wol.po b/package/luci/applications/luci-app-wol/po/zh_Hans/wol.po
new file mode 100644 (file)
index 0000000..69cd86a
--- /dev/null
@@ -0,0 +1,86 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2021-04-12 08:24+0000\n"
+"Last-Translator: xiazhang <xz@xia.plus>\n"
+"Language-Team: Chinese (Simplified) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswol/zh_Hans/>\n"
+"Language: zh_Hans\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 4.6-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "选择要唤醒的主机,或者输入自定义 MAC 地址"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "关闭"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "授予访问 wake-on-lan 可执行文件的权限"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "选择要唤醒的主机"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "选择使用的网络接口"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "未指定目标主机!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "发送到广播地址"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr "这两个工具有时只有一个生效。如果其中一个失效,请尝试另一个"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "限定将发送网络唤醒数据包的接口"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "正在启动WoL实用程序…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "网络唤醒"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr "网络唤醒是一个远程启动本地网络内计算机的机制。"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "唤醒主机"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "正在唤醒主机"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "唤醒主机失败:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "网络唤醒程序"
diff --git a/package/luci/applications/luci-app-wol/po/zh_Hant/wol.po b/package/luci/applications/luci-app-wol/po/zh_Hant/wol.po
new file mode 100644 (file)
index 0000000..c9383f7
--- /dev/null
@@ -0,0 +1,86 @@
+#
+# Yangfl <mmyangfl@gmail.com>, 2017, 2018.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2010-04-19 00:29+0200\n"
+"PO-Revision-Date: 2023-08-06 10:10+0000\n"
+"Last-Translator: Trevor <wowpapa3232@gmail.com>\n"
+"Language-Team: Chinese (Traditional) <https://hosted.weblate.org/projects/"
+"openwrt/luciapplicationswol/zh_Hant/>\n"
+"Language: zh_Hant\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=1; plural=0;\n"
+"X-Generator: Weblate 5.0-dev\n"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:65
+msgid "Choose the host to wake up or enter a custom MAC address to use"
+msgstr "選擇要喚醒的主機,或者輸入 MAC 位址"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:123
+msgid "Dismiss"
+msgstr "關閉"
+
+#: applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json:3
+msgid "Grant access to wake-on-lan executables"
+msgstr "授予存取 Wake-on-LAN 執行檔的權限"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:64
+msgid "Host to wake up"
+msgstr "選擇要喚醒的主機"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:52
+msgid "Network interface to use"
+msgstr "選擇使用的網路介面"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:94
+msgid "No target host specified!"
+msgstr "未指定任何目標!"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:79
+msgid "Send to broadcast address"
+msgstr "傳送到廣播位址"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:45
+msgid ""
+"Sometimes only one of the two tools works. If one fails, try the other one"
+msgstr "這兩個工具有時只有一個生效。如果其中一個失效,請嘗試另一個"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:53
+msgid "Specifies the interface the WoL packet is sent on"
+msgstr "指定 WoL 封包傳送的介面"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:112
+msgid "Starting WoL utility…"
+msgstr "啟動 WoL 工具中…"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:38
+#: applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json:3
+msgid "Wake on LAN"
+msgstr "網路喚醒"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:39
+msgid ""
+"Wake on LAN is a mechanism to remotely boot computers in the local network."
+msgstr "網路喚醒是一個遠端啟動區域網路內電腦的機制。"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:140
+msgid "Wake up host"
+msgstr "喚醒主機"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:111
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:116
+msgid "Waking host"
+msgstr "正在喚醒主機"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:129
+msgid "Waking host failed:"
+msgstr "主機喚醒失敗;主機名稱:"
+
+#: applications/luci-app-wol/htdocs/luci-static/resources/view/wol.js:44
+msgid "WoL program"
+msgstr "網路喚醒程式"
diff --git a/package/luci/applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json b/package/luci/applications/luci-app-wol/root/usr/share/luci/menu.d/luci-app-wol.json
new file mode 100644 (file)
index 0000000..1fb8cd7
--- /dev/null
@@ -0,0 +1,13 @@
+{
+       "admin/services/wol": {
+               "title": "Wake on LAN",
+               "order": 90,
+               "action": {
+                       "type": "view",
+                       "path": "wol"
+               },
+               "depends": {
+                       "acl": [ "luci-app-wol" ]
+               }
+       }
+}
diff --git a/package/luci/applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json b/package/luci/applications/luci-app-wol/root/usr/share/rpcd/acl.d/luci-app-wol.json
new file mode 100644 (file)
index 0000000..c679fe3
--- /dev/null
@@ -0,0 +1,17 @@
+{
+       "luci-app-wol": {
+               "description": "Grant access to wake-on-lan executables",
+               "read": {
+                       "ubus": {
+                               "luci-rpc": [ "getHostHints" ]
+                       },
+                       "uci": [ "etherwake" ]
+               },
+               "write": {
+                       "file": {
+                               "/usr/bin/etherwake": [ "exec" ],
+                               "/usr/bin/wol": [ "exec" ]
+                       }
+               }
+       }
+}
diff --git a/package/luci/modules/luci-base/src/contrib/lemon b/package/luci/modules/luci-base/src/contrib/lemon
new file mode 100755 (executable)
index 0000000..6852c67
Binary files /dev/null and b/package/luci/modules/luci-base/src/contrib/lemon differ
diff --git a/package/network/config/bind/Config.in b/package/network/config/bind/Config.in
new file mode 100644 (file)
index 0000000..f1b83c7
--- /dev/null
@@ -0,0 +1,44 @@
+if PACKAGE_bind-server
+
+config BIND_LIBJSON
+       bool
+       default n
+       prompt "Include libjson support in bind-server"
+       help
+               BIND 9 supports reporting statistics about usage. libjson
+               is required to report server statistics in JSON format. 
+               Building with libjson support will require the libjson-c
+               package to be installed as well.
+
+config BIND_LIBXML2
+       bool
+       default n
+       prompt "Include libxml2 support in bind-server"
+       help
+               BIND 9 supports reporting statistics about usage. 
+               libxml2 is required to report server statistics in XML
+               format. Building with libjson support will require the
+               libxml2 package to be installed as well.
+endif
+
+if PACKAGE_bind-libs
+
+config BIND_ENABLE_DOH
+       bool
+       default y
+       prompt "Include DNS-over-HTTPS support in bind"
+       help
+               BIND 9 supports DNS-over-HTTPS and enables it by
+               default.  This requires linking against libnghttp2.
+               You can disable DoHTTPS if you do not need it or need
+               to avoid the additional library dependency.
+
+config BIND_ENABLE_GSSAPI
+       bool
+       default n
+       prompt "Include GSSPAI support in bind"
+       help
+               BIND 9 supports GSSAPI. This depends on libcomerr and krb5-libs.
+               Disable it by default as krb5-libs is rather large.
+
+endif
diff --git a/package/network/config/bind/Makefile b/package/network/config/bind/Makefile
new file mode 100644 (file)
index 0000000..1452792
--- /dev/null
@@ -0,0 +1,303 @@
+#
+# Copyright (C) 2006-2012 OpenWrt.org
+#               2014-2020 Noah Meyerhans <frodo@morgul.net>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=bind
+PKG_VERSION:=9.18.24
+PKG_RELEASE:=1
+USERID:=bind=57:bind=57
+
+PKG_MAINTAINER:=Noah Meyerhans <frodo@morgul.net>
+PKG_LICENSE:=MPL-2.0
+PKG_LICENSE_FILES:=LICENSE
+PKG_CPE_ID:=cpe:/a:isc:bind
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:= \
+       https://www.mirrorservice.org/sites/ftp.isc.org/isc/bind9/$(PKG_VERSION) \
+       https://ftp.isc.org/isc/bind9/$(PKG_VERSION)
+PKG_HASH:=709d73023c9115ddad3bab65b6c8c79a590196d0d114f5d0ca2533dbd52ddf66
+
+PKG_FIXUP:=autoreconf
+PKG_REMOVE_FILES:=aclocal.m4 libtool.m4
+
+PKG_INSTALL:=1
+PKG_BUILD_FLAGS:=no-mips16
+PKG_BUILD_PARALLEL:=1
+
+PKG_CONFIG_DEPENDS := \
+       CONFIG_BIND_LIBJSON \
+       CONFIG_BIND_LIBXML2 \
+       CONFIG_BIND_ENABLE_DOH \
+       CONFIG_BIND_ENABLE_GSSAPI
+
+PKG_BUILD_DEPENDS += BIND_LIBXML2:libxml2 BIND_LIBJSON:libjson-c
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
+
+DISABLE_NLS:=
+
+define Package/bind/Default
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+bind-libs +@OPENSSL_WITH_EC
+  TITLE:=bind
+  URL:=https://www.isc.org/software/bind
+  SUBMENU:=IP Addresses and Names
+endef
+
+define Package/bind-libs
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+libopenssl \
+       +zlib \
+       +libpthread \
+       +libatomic \
+       +libuv \
+       +BIND_ENABLE_DOH:libnghttp2 \
+       +BIND_ENABLE_GSSAPI:krb5-libs \
+       +BIND_ENABLE_GSSAPI:libcomerr \
+       +BIND_LIBXML2:libxml2 \
+       +BIND_LIBJSON:libjson-c
+  TITLE:=bind shared libraries
+  URL:=https://www.isc.org/software/bind
+endef
+
+define Package/bind-server
+  $(call Package/bind/Default)
+  TITLE+= DNS server
+  DEPENDS+= +libcap
+endef
+
+define Package/bind-server/config
+       source "$(SOURCE)/Config.in"
+endef
+
+define Package/bind-server-filter-aaaa
+  $(call Package/bind-server)
+  DEPENDS:=bind-server
+  TITLE+= filter AAAA plugin
+endef
+
+define Package/bind-client
+  $(call Package/bind/Default)
+  TITLE+= dynamic DNS client
+endef
+
+define Package/bind-tools
+  $(call Package/bind/Default)
+  TITLE+= administration tools (all)
+       DEPENDS:= \
+       +bind-check \
+       +bind-dig \
+       +bind-nslookup \
+       +bind-dnssec \
+       +bind-host \
+       +bind-rndc \
+       +bind-ddns-confgen
+endef
+
+define Package/bind-rndc
+  $(call Package/bind/Default)
+  TITLE+= administration tools (rndc and rndc-confgen only)
+endef
+
+define Package/bind-check
+  $(call Package/bind/Default)
+  TITLE+= administration tools (named-checkconf and named-checkzone only)
+endef
+
+define Package/bind-dnssec
+  $(call Package/bind/Default)
+  TITLE+= administration tools (dnssec-keygen, dnssec-settime and dnssec-signzone only)
+endef
+
+define Package/bind-host
+  $(call Package/bind/Default)
+  TITLE+= simple DNS client
+endef
+
+define Package/bind-dig
+  $(call Package/bind/Default)
+  TITLE+= DNS excavation tool
+endef
+
+define Package/bind-nslookup
+  $(call Package/bind/Default)
+  TITLE+= nslookup utility
+  ALTERNATIVES:= \
+         200:/usr/bin/nslookup:/usr/libexec/nslookup-bind
+endef
+
+define Package/bind-ddns-confgen
+  $(call Package/bind/Default)
+  TITLE+= administration tools (ddns-confgen and tsig-keygen only)
+endef
+
+export BUILD_CC="$(TARGET_CC)"
+
+TARGET_LDFLAGS += -Wl,--gc-sections,--as-needed
+
+CONFIGURE_ARGS += \
+       --disable-geoip \
+       --with-openssl="$(STAGING_DIR)/usr" \
+       --without-lmdb \
+       --enable-epoll \
+       --without-readline \
+       --sysconfdir=/etc/bind
+
+ifdef CONFIG_BIND_LIBJSON
+       TARGET_CFLAGS += -DHAVE_JSON_C -UHAVE_JSON
+       CONFIGURE_ARGS += \
+               --with-json-c=yes
+else
+       CONFIGURE_ARGS += \
+               --with-json-c=no
+endif
+
+ifdef CONFIG_BIND_LIBXML2
+       CONFIGURE_ARGS += \
+               --with-libxml2=yes
+else
+       CONFIGURE_ARGS += \
+               --with-libxml2=no
+endif
+
+ifdef CONFIG_BIND_ENABLE_DOH
+       CONFIGURE_ARGS += \
+               --enable-doh
+else
+       CONFIGURE_ARGS += \
+               --disable-doh
+endif
+
+ifdef CONFIG_BIND_ENABLE_GSSAPI
+       CONFIGURE_ARGS += \
+               --with-gssapi
+else
+       CONFIGURE_ARGS += \
+               --without-gssapi
+endif
+
+CONFIGURE_VARS += \
+       BUILD_CC="$(TARGET_CC)" \
+
+define Build/Compile
+       $(MAKE) -C $(PKG_BUILD_DIR)/lib/dns \
+               BUILD_CC="$(HOSTCC)" \
+               CC="$(HOSTCC)" \
+               CFLAGS="-O2" \
+               LIBS="" \
+               gen
+       $(call Build/Compile/Default)
+endef
+
+define Package/bind-libs/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib
+endef
+
+define Package/bind-server/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/named $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc/bind
+       $(CP) \
+               ./files/bind/db.0 \
+               ./files/bind/db.127 \
+               ./files/bind/db.255 \
+               ./files/bind/db.local \
+               ./files/bind/db.root \
+               ./files/bind/bind.keys \
+               $(1)/etc/bind/
+       sed -e '1s/ broadcast / empty rfc1918 /' \
+               < ./files/bind/db.0 \
+               > $(1)/etc/bind/db.empty
+       $(CP) ./files/bind/named.conf.example $(1)/etc/bind/named.conf
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/named.init $(1)/etc/init.d/named
+       find $(1)/etc/bind/ -name ".svn" | xargs rm -rf
+endef
+
+define Package/bind-server/conffiles
+/etc/bind/db.0
+/etc/bind/db.127
+/etc/bind/db.255
+/etc/bind/db.local
+/etc/bind/db.root
+/etc/bind/named.conf
+endef
+
+define Package/bind-server-filter-aaaa/install
+       $(INSTALL_DIR) $(1)/usr/lib/bind
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/bind/filter-aaaa.so $(1)/usr/lib/bind
+endef
+
+define Package/bind-client/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/nsupdate $(1)/usr/bin/
+endef
+
+define Package/bind-tools/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/delv $(1)/usr/bin/
+endef
+
+define Package/bind-rndc/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/rndc $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/rndc-confgen $(1)/usr/sbin/
+endef
+
+define Package/bind-check/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/named-checkconf $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/named-checkzone $(1)/usr/bin/
+endef
+
+define Package/bind-dnssec/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dnssec-keygen $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dnssec-settime $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dnssec-signzone $(1)/usr/bin/
+endef
+
+define Package/bind-host/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/host $(1)/usr/bin/
+endef
+
+define Package/bind-dig/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/dig $(1)/usr/bin/
+endef
+
+define Package/bind-nslookup/install
+       $(INSTALL_DIR) $(1)/usr/libexec
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/nslookup $(1)/usr/libexec/nslookup-bind
+endef
+
+define Package/bind-ddns-confgen/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/ddns-confgen $(1)/usr/sbin/ddns-confgen
+       $(LN) -s ddns-confgen $(1)/usr/sbin/tsig-keygen
+endef
+
+$(eval $(call BuildPackage,bind-libs))
+$(eval $(call BuildPackage,bind-server))
+$(eval $(call BuildPackage,bind-server-filter-aaaa))
+$(eval $(call BuildPackage,bind-client))
+$(eval $(call BuildPackage,bind-tools))
+$(eval $(call BuildPackage,bind-rndc))
+$(eval $(call BuildPackage,bind-check))
+$(eval $(call BuildPackage,bind-dnssec))
+$(eval $(call BuildPackage,bind-host))
+$(eval $(call BuildPackage,bind-dig))
+$(eval $(call BuildPackage,bind-nslookup))
+$(eval $(call BuildPackage,bind-ddns-confgen))
diff --git a/package/network/config/bind/files/bind/bind.keys b/package/network/config/bind/files/bind/bind.keys
new file mode 100644 (file)
index 0000000..931ebf9
--- /dev/null
@@ -0,0 +1,69 @@
+# The bind.keys file is used to override the built-in DNSSEC trust anchors
+# which are included as part of BIND 9.  As of the current release, the only
+# trust anchors it contains are those for the DNS root zone ("."), and for
+# the ISC DNSSEC Lookaside Validation zone ("dlv.isc.org").  Trust anchors
+# for any other zones MUST be configured elsewhere; if they are configured
+# here, they will not be recognized or used by named.
+#
+# The built-in trust anchors are provided for convenience of configuration.
+# They are not activated within named.conf unless specifically switched on.
+# To use the built-in root key, set "dnssec-validation auto;" in
+# named.conf options.  To use the built-in DLV key, set
+# "dnssec-lookaside auto;".  Without these options being set,
+# the keys in this file are ignored.
+#
+# This file is NOT expected to be user-configured.
+#
+# These keys are current as of Feburary 2017.  If any key fails to
+# initialize correctly, it may have expired.  In that event you should
+# replace this file with a current version.  The latest version of
+# bind.keys can always be obtained from ISC at https://www.isc.org/bind-keys.
+
+trust-anchors {
+        # ISC DLV: See https://www.isc.org/solutions/dlv for details.
+        #
+        # NOTE: The ISC DLV zone is being phased out as of February 2017;
+        # the key will remain in place but the zone will be otherwise empty.
+        # Configuring "dnssec-lookaside auto;" to activate this key is
+        # harmless, but is no longer useful and is not recommended.
+        dlv.isc.org. initial-key 257 3 5 "BEAAAAPHMu/5onzrEE7z1egmhg/WPO0+juoZrW3euWEn4MxDCE1+lLy2
+                brhQv5rN32RKtMzX6Mj70jdzeND4XknW58dnJNPCxn8+jAGl2FZLK8t+
+                1uq4W+nnA3qO2+DL+k6BD4mewMLbIYFwe0PG73Te9fZ2kJb56dhgMde5
+                ymX4BI/oQ+cAK50/xvJv00Frf8kw6ucMTwFlgPe+jnGxPPEmHAte/URk
+                Y62ZfkLoBAADLHQ9IrS2tryAe7mbBZVcOwIeU/Rw/mRx/vwwMCTgNboM
+                QKtUdvNXDrYJDSHZws3xiRXF1Rf+al9UmZfSav/4NWLKjHzpT59k/VSt
+                TDN0YUuWrBNh";
+
+        # ROOT KEYS: See https://data.iana.org/root-anchors/root-anchors.xml
+        # for current trust anchor information.
+        #
+        # These keys are activated by setting "dnssec-validation auto;"
+        # in named.conf.
+        #
+        # This key (19036) is to be phased out starting in 2017. It will
+        # remain in the root zone for some time after its successor key
+        # has been added. It will remain this file until it is removed from
+        # the root zone.
+        . initial-key 257 3 8 "AwEAAagAIKlVZrpC6Ia7gEzahOR+9W29euxhJhVVLOyQbSEW0O8gcCjF
+                FVQUTf6v58fLjwBd0YI0EzrAcQqBGCzh/RStIoO8g0NfnfL2MTJRkxoX
+                bfDaUeVPQuYEhg37NZWAJQ9VnMVDxP/VHL496M/QZxkjf5/Efucp2gaD
+                X6RS6CXpoY68LsvPVjR0ZSwzz1apAzvN9dlzEheX7ICJBBtuA6G3LQpz
+                W5hOA2hzCTMjJPJ8LbqF6dsV6DoBQzgul0sGIcGOYl7OyQdXfZ57relS
+                Qageu+ipAdTTJ25AsRTAoub8ONGcLmqrAmRLKBP1dfwhYB4N7knNnulq
+                QxA+Uk1ihz0=";
+
+        # This key (20326) is to be published in the root zone in 2017.
+        # Servers which were already using the old key (19036) should
+        # roll seamlessly to this new one via RFC 5011 rollover. Servers
+        # being set up for the first time can use the contents of this
+        # file as initializing keys; thereafter, the keys in the
+        # managed key database will be trusted and maintained
+        # automatically.
+        . initial-key 257 3 8 "AwEAAaz/tAm8yTn4Mfeh5eyI96WSVexTBAvkMgJzkKTOiW1vkIbzxeF3
+                +/4RgWOq7HrxRixHlFlExOLAJr5emLvN7SWXgnLh4+B5xQlNVz8Og8kv
+                ArMtNROxVQuCaSnIDdD5LKyWbRd2n9WGe2R8PzgCmr3EgVLrjyBxWezF
+                0jLHwVN8efS3rCj/EWgvIWgb9tarpVUDK/b58Da+sqqls3eNbuv7pr+e
+                oZG+SrDK6nWeL3c6H5Apxz7LjVc1uTIdsIXxuOLYA4/ilBmSVIzuDWfd
+                RUfhHdY6+cn8HFRm+2hM8AnXGXws9555KrUB5qihylGa8subX2Nn6UwN
+                R1AkUTV74bU=";
+};
diff --git a/package/network/config/bind/files/bind/db.0 b/package/network/config/bind/files/bind/db.0
new file mode 100644 (file)
index 0000000..e3aabdb
--- /dev/null
@@ -0,0 +1,12 @@
+;
+; BIND reverse data file for broadcast zone
+;
+$TTL   604800
+@      IN      SOA     localhost. root.localhost. (
+                             1         ; Serial
+                        604800         ; Refresh
+                         86400         ; Retry
+                       2419200         ; Expire
+                        604800 )       ; Negative Cache TTL
+;
+@      IN      NS      localhost.
diff --git a/package/network/config/bind/files/bind/db.127 b/package/network/config/bind/files/bind/db.127
new file mode 100644 (file)
index 0000000..cd05bef
--- /dev/null
@@ -0,0 +1,13 @@
+;
+; BIND reverse data file for local loopback interface
+;
+$TTL   604800
+@      IN      SOA     localhost. root.localhost. (
+                             1         ; Serial
+                        604800         ; Refresh
+                         86400         ; Retry
+                       2419200         ; Expire
+                        604800 )       ; Negative Cache TTL
+;
+@      IN      NS      localhost.
+1.0.0  IN      PTR     localhost.
diff --git a/package/network/config/bind/files/bind/db.255 b/package/network/config/bind/files/bind/db.255
new file mode 100644 (file)
index 0000000..e3aabdb
--- /dev/null
@@ -0,0 +1,12 @@
+;
+; BIND reverse data file for broadcast zone
+;
+$TTL   604800
+@      IN      SOA     localhost. root.localhost. (
+                             1         ; Serial
+                        604800         ; Refresh
+                         86400         ; Retry
+                       2419200         ; Expire
+                        604800 )       ; Negative Cache TTL
+;
+@      IN      NS      localhost.
diff --git a/package/network/config/bind/files/bind/db.local b/package/network/config/bind/files/bind/db.local
new file mode 100644 (file)
index 0000000..66b4892
--- /dev/null
@@ -0,0 +1,13 @@
+;
+; BIND data file for local loopback interface
+;
+$TTL   604800
+@      IN      SOA     localhost. root.localhost. (
+                             1         ; Serial
+                        604800         ; Refresh
+                         86400         ; Retry
+                       2419200         ; Expire
+                        604800 )       ; Negative Cache TTL
+;
+@      IN      NS      localhost.
+@      IN      A       127.0.0.1
diff --git a/package/network/config/bind/files/bind/db.root b/package/network/config/bind/files/bind/db.root
new file mode 100644 (file)
index 0000000..f0b79d2
--- /dev/null
@@ -0,0 +1,90 @@
+;       This file holds the information on root name servers needed to
+;       initialize cache of Internet domain name servers
+;       (e.g. reference this file in the "cache  .  <file>"
+;       configuration file of BIND domain name servers).
+;
+;       This file is made available by InterNIC 
+;       under anonymous FTP as
+;           file                /domain/named.cache
+;           on server           FTP.INTERNIC.NET
+;       -OR-                    RS.INTERNIC.NET
+;
+;       last update:    February 17, 2016
+;       related version of root zone:   2016021701
+;
+; formerly NS.INTERNIC.NET
+;
+.                        3600000      NS    A.ROOT-SERVERS.NET.
+A.ROOT-SERVERS.NET.      3600000      A     198.41.0.4
+A.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:ba3e::2:30
+;
+; FORMERLY NS1.ISI.EDU
+;
+.                        3600000      NS    B.ROOT-SERVERS.NET.
+B.ROOT-SERVERS.NET.      3600000      A     192.228.79.201
+B.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:84::b
+;
+; FORMERLY C.PSI.NET
+;
+.                        3600000      NS    C.ROOT-SERVERS.NET.
+C.ROOT-SERVERS.NET.      3600000      A     192.33.4.12
+C.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2::c
+;
+; FORMERLY TERP.UMD.EDU
+;
+.                        3600000      NS    D.ROOT-SERVERS.NET.
+D.ROOT-SERVERS.NET.      3600000      A     199.7.91.13
+D.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2d::d
+;
+; FORMERLY NS.NASA.GOV
+;
+.                        3600000      NS    E.ROOT-SERVERS.NET.
+E.ROOT-SERVERS.NET.      3600000      A     192.203.230.10
+;
+; FORMERLY NS.ISC.ORG
+;
+.                        3600000      NS    F.ROOT-SERVERS.NET.
+F.ROOT-SERVERS.NET.      3600000      A     192.5.5.241
+F.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:2f::f
+;
+; FORMERLY NS.NIC.DDN.MIL
+;
+.                        3600000      NS    G.ROOT-SERVERS.NET.
+G.ROOT-SERVERS.NET.      3600000      A     192.112.36.4
+;
+; FORMERLY AOS.ARL.ARMY.MIL
+;
+.                        3600000      NS    H.ROOT-SERVERS.NET.
+H.ROOT-SERVERS.NET.      3600000      A     198.97.190.53
+H.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:1::53
+;
+; FORMERLY NIC.NORDU.NET
+;
+.                        3600000      NS    I.ROOT-SERVERS.NET.
+I.ROOT-SERVERS.NET.      3600000      A     192.36.148.17
+I.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fe::53
+;
+; OPERATED BY VERISIGN, INC.
+;
+.                        3600000      NS    J.ROOT-SERVERS.NET.
+J.ROOT-SERVERS.NET.      3600000      A     192.58.128.30
+J.ROOT-SERVERS.NET.      3600000      AAAA  2001:503:c27::2:30
+;
+; OPERATED BY RIPE NCC
+;
+.                        3600000      NS    K.ROOT-SERVERS.NET.
+K.ROOT-SERVERS.NET.      3600000      A     193.0.14.129
+K.ROOT-SERVERS.NET.      3600000      AAAA  2001:7fd::1
+;
+; OPERATED BY ICANN
+;
+.                        3600000      NS    L.ROOT-SERVERS.NET.
+L.ROOT-SERVERS.NET.      3600000      A     199.7.83.42
+L.ROOT-SERVERS.NET.      3600000      AAAA  2001:500:3::42
+;
+; OPERATED BY WIDE
+;
+.                        3600000      NS    M.ROOT-SERVERS.NET.
+M.ROOT-SERVERS.NET.      3600000      A     202.12.27.33
+M.ROOT-SERVERS.NET.      3600000      AAAA  2001:dc3::35
+; End of file
diff --git a/package/network/config/bind/files/bind/named.conf.example b/package/network/config/bind/files/bind/named.conf.example
new file mode 100644 (file)
index 0000000..fbe99dc
--- /dev/null
@@ -0,0 +1,49 @@
+// This is the primary configuration file for the BIND DNS server named.
+
+options {
+       directory "/tmp";
+
+       // If your ISP provided one or more IP addresses for stable 
+       // nameservers, you probably want to use them as forwarders.  
+       // Uncomment the following block, and insert the addresses replacing 
+       // the all-0's placeholder.
+
+       // forwarders {
+       //      0.0.0.0;
+       // };
+
+       auth-nxdomain no;    # conform to RFC1035
+};
+
+include "/etc/bind/named-rndc.conf";
+
+include "/tmp/bind/named.conf.local";
+
+// prime the server with knowledge of the root servers
+zone "." {
+       type hint;
+       file "/etc/bind/db.root";
+};
+
+// be authoritative for the localhost forward and reverse zones, and for
+// broadcast zones as per RFC 1912
+
+zone "localhost" {
+       type master;
+       file "/etc/bind/db.local";
+};
+
+zone "127.in-addr.arpa" {
+       type master;
+       file "/etc/bind/db.127";
+};
+
+zone "0.in-addr.arpa" {
+       type master;
+       file "/etc/bind/db.0";
+};
+
+zone "255.in-addr.arpa" {
+       type master;
+       file "/etc/bind/db.255";
+};
diff --git a/package/network/config/bind/files/named.init b/package/network/config/bind/files/named.init
new file mode 100644 (file)
index 0000000..288d8f8
--- /dev/null
@@ -0,0 +1,87 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2014 Noah Meyerhans <frodo@morgul.net>
+# Licensed under the terms of the GNU General Public License version 2
+# or (at your discretion) any later later version
+
+USE_PROCD=1
+
+START=22
+
+config_file=/etc/bind/named.conf
+config_dir=$(dirname $config_file)
+named_options_file=/etc/bind/named-rndc.conf
+rndc_conf_file=/etc/bind/rndc.conf
+pid_file=/var/run/named/named.pid
+
+logdir=/var/log/named/
+cachedir=/var/cache/bind
+libdir=/var/lib/bind
+dyndir=/tmp/bind
+
+conf_local_file=$dyndir/named.conf.local
+
+fix_perms() {
+    for dir in $libdir $logdir $cachedir $dyndir; do
+       test -e "$dir" || {
+            mkdir -p "$dir"
+            chgrp bind "$dir"
+            chmod g+w "$dir"
+       }
+    done
+}
+
+no_ipv6() {
+    [ -z "$(ip -6 -o route show default)" ]
+}
+
+reload_service() {
+    rndc -q reload
+}
+
+start_service() {
+    user_exists bind 57 || user_add bind 57
+    group_exists bind 57 || group_add bind 57
+    fix_perms
+
+    local runnamed=$(dirname $pid_file)
+    # with dropped privileges, we need this created for us
+    [ -d $runnamed ] || {
+       mkdir -m 0755 $runnamed
+       chown bind.bind $runnamed
+    }
+
+    local rndc_temp=$(mktemp /tmp/rndc-confgen.XXXXXX)
+
+    rndc-confgen > $rndc_temp
+
+    sed -r -n \
+       -e '/^# options \{$/,/^\};$/{ s/^/# / }' \
+       -e p \
+       -e '/^# End of rndc\.conf$/q' \
+       < $rndc_temp > $rndc_conf_file
+
+    sed -r -n \
+       -e '1,/^# End of rndc\.conf$/ { b done }' \
+       -e '/^# Use with the following in named.conf/ { p ; b done }' \
+       -e '/^# End of named\.conf$/ { p ; b done }' \
+       -e '/^# key /,$ { s/^# // ; p }' \
+       -e ': done' \
+       < $rndc_temp > $named_options_file
+
+    rm -f $rndc_temp
+
+    touch $conf_local_file
+
+    local args=
+    no_ipv6 && args="-4"
+
+    procd_open_instance
+    procd_set_param command /usr/sbin/named -u bind -f $args -c $config_file
+    procd_set_param file $config_file \
+                        $config_dir/bind.keys \
+                        $named_options_file \
+                        $conf_local_file \
+                        $config_dir/db.*
+    procd_set_param respawn
+    procd_close_instance
+}
diff --git a/package/network/config/mwan3/Makefile b/package/network/config/mwan3/Makefile
new file mode 100644 (file)
index 0000000..b31f4ce
--- /dev/null
@@ -0,0 +1,117 @@
+#
+# Copyright (C) 2006-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mwan3
+PKG_VERSION:=2.11.8
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>, \
+               Aaron Goodman <aaronjg@alumni.stanford.edu>
+PKG_LICENSE:=GPL-2.0
+PKG_CONFIG_DEPENDS:=CONFIG_IPV6
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/mwan3
+   SECTION:=net
+   CATEGORY:=Network
+   SUBMENU:=Routing and Redirection
+   DEPENDS:= \
+     +ip \
+     +ipset \
+     +iptables \
+     +IPV6:ip6tables \
+     +iptables-mod-conntrack-extra \
+     +iptables-mod-ipopt \
+     +jshn
+   TITLE:=Multiwan hotplug script with connection tracking support
+   MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
+   PKGARCH:=all
+endef
+
+define Package/mwan3/description
+Hotplug script which makes configuration of multiple WAN interfaces simple
+and manageable. With loadbalancing/failover support for up to 250 wan
+interfaces, connection tracking and an easy to manage traffic ruleset.
+endef
+
+define Package/mwan3/conffiles
+/etc/config/mwan3
+/etc/mwan3.user
+endef
+
+define Package/mwan3/postinst
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ] && [ -x /etc/init.d/rpcd ]; then
+       /etc/init.d/rpcd restart
+fi
+exit 0
+endef
+
+define Package/mwan3/postrm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ] && [ -x /etc/init.d/rpcd ]; then
+       /etc/init.d/rpcd restart
+fi
+exit 0
+endef
+
+define Build/Compile
+       $(TARGET_CC) $(CFLAGS) $(LDFLAGS) $(FPIC) \
+               -shared \
+               -o $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 \
+               $(if $(CONFIG_IPV6),-DCONFIG_IPV6) \
+               $(PKG_BUILD_DIR)/sockopt_wrap.c \
+               -ldl
+endef
+
+define Package/mwan3/install
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/etc/config/mwan3 \
+               $(1)/etc/config/
+
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+       $(INSTALL_DATA) ./files/etc/hotplug.d/iface/15-mwan3 \
+               $(1)/etc/hotplug.d/iface/
+       $(INSTALL_DATA) ./files/etc/hotplug.d/iface/16-mwan3-user \
+               $(1)/etc/hotplug.d/iface/
+
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/etc/init.d/mwan3 \
+               $(1)/etc/init.d/
+
+       $(INSTALL_DIR) $(1)/lib/mwan3
+       $(INSTALL_DATA) ./files/lib/mwan3/common.sh \
+               $(1)/lib/mwan3/
+       $(INSTALL_DATA) ./files/lib/mwan3/mwan3.sh \
+               $(1)/lib/mwan3/
+
+       $(INSTALL_DIR) $(1)/usr/libexec/rpcd
+       $(INSTALL_BIN) ./files/usr/libexec/rpcd/mwan3 \
+               $(1)/usr/libexec/rpcd/
+
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) ./files/usr/sbin/mwan3 \
+               $(1)/usr/sbin/
+       $(INSTALL_BIN) ./files/usr/sbin/mwan3rtmon \
+               $(1)/usr/sbin/
+       $(INSTALL_BIN) ./files/usr/sbin/mwan3track \
+               $(1)/usr/sbin/
+
+       $(INSTALL_DIR) $(1)/etc
+       $(INSTALL_BIN) ./files/etc/mwan3.user \
+               $(1)/etc/
+
+       $(CP) $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 $(1)/lib/mwan3/
+
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_DATA) ./files/etc/uci-defaults/mwan3-migrate-flush_conntrack \
+               $(1)/etc/uci-defaults/
+endef
+
+$(eval $(call BuildPackage,mwan3))
diff --git a/package/network/config/mwan3/files/etc/config/mwan3 b/package/network/config/mwan3/files/etc/config/mwan3
new file mode 100644 (file)
index 0000000..5302d80
--- /dev/null
@@ -0,0 +1,133 @@
+# For full documentation of mwan3 configuration:
+# https://openwrt.org/docs/guide-user/network/wan/multiwan/mwan3#mwan3_configuration
+
+config globals 'globals'
+       option mmx_mask '0x3F00'
+
+config interface 'wan'
+       option enabled '1'
+       list track_ip '1.0.0.1'
+       list track_ip '1.1.1.1'
+       list track_ip '208.67.222.222'
+       list track_ip '208.67.220.220'
+       option family 'ipv4'
+       option reliability '2'
+
+config interface 'wan6'
+       option enabled '0'
+       list track_ip '2606:4700:4700::1001'
+       list track_ip '2606:4700:4700::1111'
+       list track_ip '2620:0:ccd::2'
+       list track_ip '2620:0:ccc::2'
+       option family 'ipv6'
+       option reliability '2'
+
+config interface 'wanb'
+       option enabled '0'
+       list track_ip '1.0.0.1'
+       list track_ip '1.1.1.1'
+       list track_ip '208.67.222.222'
+       list track_ip '208.67.220.220'
+       option family 'ipv4'
+       option reliability '1'
+
+config interface 'wanb6'
+       option enabled '0'
+       list track_ip '2606:4700:4700::1001'
+       list track_ip '2606:4700:4700::1111'
+       list track_ip '2620:0:ccd::2'
+       list track_ip '2620:0:ccc::2'
+       option family 'ipv6'
+       option reliability '1'
+
+config member 'wan_m1_w3'
+       option interface 'wan'
+       option metric '1'
+       option weight '3'
+
+config member 'wan_m2_w3'
+       option interface 'wan'
+       option metric '2'
+       option weight '3'
+
+config member 'wanb_m1_w2'
+       option interface 'wanb'
+       option metric '1'
+       option weight '2'
+
+config member 'wanb_m1_w3'
+       option interface 'wanb'
+       option metric '1'
+       option weight '3'
+
+config member 'wanb_m2_w2'
+       option interface 'wanb'
+       option metric '2'
+       option weight '2'
+
+config member 'wan6_m1_w3'
+       option interface 'wan6'
+       option metric '1'
+       option weight '3'
+
+config member 'wan6_m2_w3'
+       option interface 'wan6'
+       option metric '2'
+       option weight '3'
+
+config member 'wanb6_m1_w2'
+       option interface 'wanb6'
+       option metric '1'
+       option weight '2'
+
+config member 'wanb6_m1_w3'
+       option interface 'wanb6'
+       option metric '1'
+       option weight '3'
+
+config member 'wanb6_m2_w2'
+       option interface 'wanb6'
+       option metric '2'
+       option weight '2'
+
+config policy 'wan_only'
+       list use_member 'wan_m1_w3'
+       list use_member 'wan6_m1_w3'
+
+config policy 'wanb_only'
+       list use_member 'wanb_m1_w2'
+       list use_member 'wanb6_m1_w2'
+
+config policy 'balanced'
+       list use_member 'wan_m1_w3'
+       list use_member 'wanb_m1_w3'
+       list use_member 'wan6_m1_w3'
+       list use_member 'wanb6_m1_w3'
+
+config policy 'wan_wanb'
+       list use_member 'wan_m1_w3'
+       list use_member 'wanb_m2_w2'
+       list use_member 'wan6_m1_w3'
+       list use_member 'wanb6_m2_w2'
+
+config policy 'wanb_wan'
+       list use_member 'wan_m2_w3'
+       list use_member 'wanb_m1_w2'
+       list use_member 'wan6_m2_w3'
+       list use_member 'wanb6_m1_w2'
+
+config rule 'https'
+       option sticky '1'
+       option dest_port '443'
+       option proto 'tcp'
+       option use_policy 'balanced'
+
+config rule 'default_rule_v4'
+       option dest_ip '0.0.0.0/0'
+       option use_policy 'balanced'
+       option family 'ipv4'
+
+config rule 'default_rule_v6'
+       option dest_ip '::/0'
+       option use_policy 'balanced'
+       option family 'ipv6'
diff --git a/package/network/config/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/package/network/config/mwan3/files/etc/hotplug.d/iface/15-mwan3
new file mode 100644 (file)
index 0000000..6eac630
--- /dev/null
@@ -0,0 +1,89 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+initscript=/etc/init.d/mwan3
+. /lib/functions/procd.sh
+
+
+SCRIPTNAME="mwan3-hotplug"
+[ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1
+[ -n "$INTERFACE" ] || exit 2
+[ "$FIRSTCONNECT" = "1" ] || [ "$MWAN3_SHUTDOWN" = "1" ] && exit 0
+
+if { [ "$ACTION" = "ifup" ] || [ "$ACTION" = "connected" ] ; } && [ -z "$DEVICE" ]; then
+       LOG notice "$ACTION called on $INTERFACE with no device set"
+       exit 3
+fi
+
+[ "$MWAN3_STARTUP" = "init" ] || procd_lock
+
+mwan3_init
+
+/etc/init.d/mwan3 running || {
+       [ "$MWAN3_STARTUP" = "init" ] || procd_lock
+       LOG notice "mwan3 hotplug $ACTION on $INTERFACE not called because globally disabled"
+       exit 0
+}
+
+$IPT4 -S mwan3_hook &>/dev/null || {
+       LOG warn "hotplug called on $INTERFACE before mwan3 has been set up"
+       exit 0
+}
+
+if [ "$MWAN3_STARTUP" != "init" ] && [ "$ACTION" = "ifup" ]; then
+       mwan3_set_user_iface_rules $INTERFACE $DEVICE
+fi
+
+config_get_bool enabled $INTERFACE 'enabled' '0'
+[ "${enabled}" -eq 1 ] || {
+       LOG notice "mwan3 hotplug on $INTERFACE not called because interface disabled"
+       exit 0
+}
+
+config_get initial_state $INTERFACE initial_state "online"
+if [ "$initial_state" = "offline" ]; then
+       status=$(cat $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS 2>/dev/null || echo unknown)
+       [ "$status" = "online" ] || status=offline
+else
+       status=online
+fi
+
+LOG notice "Execute $ACTION event on interface $INTERFACE (${DEVICE:-unknown})"
+
+case "$ACTION" in
+       connected)
+               mwan3_set_iface_hotplug_state $INTERFACE "online"
+               mwan3_set_policies_iptables
+               ;;
+       ifup)
+               mwan3_create_iface_iptables $INTERFACE $DEVICE
+               mwan3_create_iface_rules $INTERFACE $DEVICE
+               mwan3_set_iface_hotplug_state $INTERFACE "$status"
+               if [ "$MWAN3_STARTUP" != "init" ]; then
+                       mwan3_create_iface_route $INTERFACE $DEVICE
+                       mwan3_set_general_rules
+                       [ "$status" = "online" ] && mwan3_set_policies_iptables
+               fi
+               [ "$ACTION" = ifup ] && procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR2
+               ;;
+       disconnected)
+               mwan3_set_iface_hotplug_state $INTERFACE "offline"
+               mwan3_set_policies_iptables
+               ;;
+       ifdown)
+               mwan3_set_iface_hotplug_state $INTERFACE "offline"
+               mwan3_delete_iface_ipset_entries $INTERFACE
+               mwan3_delete_iface_rules $INTERFACE
+               mwan3_delete_iface_route $INTERFACE
+               mwan3_delete_iface_iptables $INTERFACE
+               procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR1
+               mwan3_set_policies_iptables
+       ;;
+esac
+
+mwan3_flush_conntrack "$INTERFACE" "$ACTION"
+
+exit 0
diff --git a/package/network/config/mwan3/files/etc/hotplug.d/iface/16-mwan3-user b/package/network/config/mwan3/files/etc/hotplug.d/iface/16-mwan3-user
new file mode 100644 (file)
index 0000000..0960a26
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+[ -f "/etc/mwan3.user" ] && {
+       . /lib/functions.sh
+       . /lib/mwan3/mwan3.sh
+       initscript=/etc/init.d/mwan3
+       . /lib/functions/procd.sh
+
+       [ "$MWAN3_SHUTDOWN" != 1 ] && procd_lock
+
+       [ "$MWAN3_SHUTDOWN" != 1 ] && ! /etc/init.d/mwan3 running && {
+               exit 0
+       }
+
+       config_load mwan3
+
+       config_get_bool enabled "$INTERFACE" enabled 0
+       [ "${enabled}" -eq 1 ] || {
+               exit 0
+       }
+
+       [ -x /etc/mwan3.user ] || chmod 755 /etc/mwan3.user
+       env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /etc/mwan3.user
+}
+
+exit 0
diff --git a/package/network/config/mwan3/files/etc/init.d/mwan3 b/package/network/config/mwan3/files/etc/init.d/mwan3
new file mode 100755 (executable)
index 0000000..33a1f46
--- /dev/null
@@ -0,0 +1,111 @@
+#!/bin/sh /etc/rc.common
+
+. "${IPKG_INSTROOT}/lib/functions/network.sh"
+. "${IPKG_INSTROOT}/lib/mwan3/mwan3.sh"
+
+START=19
+USE_PROCD=1
+SCRIPTNAME="mwan3-init"
+
+service_running() {
+       [ -d "$MWAN3_STATUS_DIR" ]
+}
+
+start_tracker() {
+       local enabled interface
+       interface=$1
+       config_get_bool enabled $interface 'enabled' '0'
+       [ $enabled -eq 0 ] && return
+       [ -z "$(config_get $interface track_ip)" ] && return
+
+       procd_open_instance "track_${1}"
+       procd_set_param command /usr/sbin/mwan3track $interface
+       procd_set_param respawn
+       procd_close_instance
+}
+
+start_service() {
+       local enabled hotplug_pids
+
+       mwan3_init
+       config_foreach start_tracker interface
+
+       mwan3_update_iface_to_table
+       mwan3_set_dynamic_ipset
+       mwan3_set_connected_ipset
+       mwan3_set_custom_ipset
+       mwan3_set_general_rules
+       mwan3_set_general_iptables
+       config_foreach mwan3_ifup interface "init"
+       wait $hotplug_pids
+       mwan3_set_policies_iptables
+       mwan3_set_user_rules
+
+       procd_open_instance rtmon_ipv4
+       procd_set_param command /usr/sbin/mwan3rtmon ipv4
+       procd_set_param respawn
+       procd_close_instance
+
+       if command -v ip6tables > /dev/null; then
+               procd_open_instance rtmon_ipv6
+               procd_set_param command /usr/sbin/mwan3rtmon ipv6
+               procd_set_param respawn
+               procd_close_instance
+       fi
+}
+
+stop_service() {
+       local ipset rule IP IPTR IPT family table tid
+
+       mwan3_init
+       config_foreach mwan3_interface_shutdown interface
+
+       for family in ipv4 ipv6; do
+               if [ "$family" = "ipv4" ]; then
+                       IPT="$IPT4"
+                       IPTR="$IPT4R"
+                       IP="$IP4"
+               elif [ "$family" = "ipv6" ]; then
+                       [ $NO_IPV6 -ne 0 ] && continue
+                       IPT="$IPT6"
+                       IPTR="$IPT6R"
+                       IP="$IP6"
+               fi
+
+               for tid in $($IP route list table all | sed -ne 's/.*table \([0-9]\+\).*/\1/p' | sort -u); do
+                       [ $tid -gt $MWAN3_INTERFACE_MAX ] && continue
+                       $IP route flush table $tid &> /dev/null
+               done
+
+               for rule in $($IP rule list | grep -E '^[1-3][0-9]{3}\:' | cut -d ':' -f 1); do
+                       $IP rule del pref $rule &> /dev/null
+               done
+               table="$($IPT -S)"
+               {
+                       echo "*mangle";
+                       [ -z "${table##*PREROUTING -j mwan3_hook*}" ] && echo "-D PREROUTING -j mwan3_hook"
+                       [ -z "${table##*OUTPUT -j mwan3_hook*}" ] && echo "-D OUTPUT -j mwan3_hook"
+                       echo "$table" | awk '{print "-F "$2}' | grep mwan3 | sort -u
+                       echo "$table" | awk '{print "-X "$2}' | grep mwan3 | sort -u
+                       echo "COMMIT"
+               } | $IPTR
+       done
+
+       # Needed for the firewall backend to release the ipsets reference
+       sleep 2
+       for ipset in $($IPS -n list | grep mwan3_); do
+               $IPS -q destroy $ipset
+       done
+
+       rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR
+
+}
+
+reload_service() {
+       stop
+       start
+}
+
+service_triggers() {
+       procd_add_reload_trigger 'mwan3'
+}
diff --git a/package/network/config/mwan3/files/etc/mwan3.user b/package/network/config/mwan3/files/etc/mwan3.user
new file mode 100644 (file)
index 0000000..2e8e517
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# This file is interpreted as shell script.
+# Put your custom mwan3 action here, they will
+# be executed with each netifd hotplug interface event
+# on interfaces for which mwan3 is enabled.
+#
+# There are three main environment variables that are passed to this script.
+#
+# $ACTION
+#      <ifup>         Is called by netifd and mwan3track.
+#      <ifdown>       Is called by netifd and mwan3track.
+#      <connected>    Is only called by mwan3track if tracking was successful.
+#      <disconnected> Is only called by mwan3track if tracking has failed.
+# $INTERFACE   Name of the interface an action relates to (e.g. "wan" or "wwan").
+# $DEVICE      Physical device name of the interface the action relates to (e.g. "eth0" or "wwan0").
+#               Note: On an ifdown event, $DEVICE is not available, use $INTERFACE instead.
+#
+# Further documentation can be found here:
+# https://openwrt.org/docs/guide-user/network/wan/multiwan/mwan3#alertsnotifications
diff --git a/package/network/config/mwan3/files/etc/uci-defaults/mwan3-migrate-flush_conntrack b/package/network/config/mwan3/files/etc/uci-defaults/mwan3-migrate-flush_conntrack
new file mode 100644 (file)
index 0000000..1691efa
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+mwan3_migrate_flush_conntrack() {
+       local iface="$1"
+
+       config_get value "${iface}" flush_conntrack
+       case $value in
+               always)
+                       uci_remove mwan3 "$iface" flush_conntrack
+                       uci_add_list mwan3 "$iface" flush_conntrack ifup
+                       uci_add_list mwan3 "$iface" flush_conntrack ifdown
+                       ;;
+               never)
+                       uci_remove mwan3 "$iface" flush_conntrack
+                       ;;
+       esac
+
+       uci_commit mwan3
+}
+
+config_load mwan3
+config_foreach mwan3_migrate_flush_conntrack interface
+
+exit 0
diff --git a/package/network/config/mwan3/files/lib/mwan3/common.sh b/package/network/config/mwan3/files/lib/mwan3/common.sh
new file mode 100644 (file)
index 0000000..29ace60
--- /dev/null
@@ -0,0 +1,205 @@
+#!/bin/sh
+
+IP4="ip -4"
+IP6="ip -6"
+SCRIPTNAME="$(basename "$0")"
+
+MWAN3_STATUS_DIR="/var/run/mwan3"
+MWAN3_STATUS_IPTABLES_LOG_DIR="${MWAN3_STATUS_DIR}/iptables_log"
+MWAN3TRACK_STATUS_DIR="/var/run/mwan3track"
+
+MWAN3_INTERFACE_MAX=""
+
+MMX_MASK=""
+MMX_DEFAULT=""
+MMX_BLACKHOLE=""
+MM_BLACKHOLE=""
+
+MMX_UNREACHABLE=""
+MM_UNREACHABLE=""
+MAX_SLEEP=$(((1<<31)-1))
+
+command -v ip6tables > /dev/null
+NO_IPV6=$?
+
+IPS="ipset"
+IPT4="iptables -t mangle -w"
+IPT6="ip6tables -t mangle -w"
+IPT4R="iptables-restore -T mangle -w -n"
+IPT6R="ip6tables-restore -T mangle -w -n"
+
+LOG()
+{
+       local facility=$1; shift
+       # in development, we want to show 'debug' level logs
+       # when this release is out of beta, the comment in the line below
+       # should be removed
+       [ "$facility" = "debug" ] && return
+       logger -t "${SCRIPTNAME}[$$]" -p $facility "$*"
+}
+
+mwan3_get_true_iface()
+{
+       local family V
+       _true_iface=$2
+       config_get family "$2" family ipv4
+       if [ "$family" = "ipv4" ]; then
+               V=4
+       elif [ "$family" = "ipv6" ]; then
+               V=6
+       fi
+       ubus call "network.interface.${2}_${V}" status &>/dev/null && _true_iface="${2}_${V}"
+       export "$1=$_true_iface"
+}
+
+mwan3_get_src_ip()
+{
+       local family _src_ip interface true_iface device addr_cmd default_ip IP sed_str
+       interface=$2
+       mwan3_get_true_iface true_iface $interface
+
+       unset "$1"
+       config_get family "$interface" family ipv4
+       if [ "$family" = "ipv4" ]; then
+               addr_cmd='network_get_ipaddr'
+               default_ip="0.0.0.0"
+               sed_str='s/ *inet \([^ \/]*\).*/\1/;T; pq'
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ]; then
+               addr_cmd='network_get_ipaddr6'
+               default_ip="::"
+               sed_str='s/ *inet6 \([^ \/]*\).* scope.*/\1/;T; pq'
+               IP="$IP6"
+       fi
+
+       $addr_cmd _src_ip "$true_iface"
+       if [ -z "$_src_ip" ]; then
+               network_get_device device $true_iface
+               _src_ip=$($IP address ls dev $device 2>/dev/null | sed -ne "$sed_str")
+               if [ -n "$_src_ip" ]; then
+                       LOG warn "no src $family address found from netifd for interface '$true_iface' dev '$device' guessing $_src_ip"
+               else
+                       _src_ip="$default_ip"
+                       LOG warn "no src $family address found for interface '$true_iface' dev '$device'"
+               fi
+       fi
+       export "$1=$_src_ip"
+}
+
+mwan3_get_mwan3track_status()
+{
+       local track_ips pid
+       mwan3_list_track_ips()
+       {
+               track_ips="$1 $track_ips"
+       }
+       config_list_foreach "$1" track_ip mwan3_list_track_ips
+
+       if [ -n "$track_ips" ]; then
+               pid="$(pgrep -f "mwan3track $1$")"
+               if [ -n "$pid" ]; then
+                       if [ "$(cat /proc/"$(pgrep -P $pid)"/cmdline)" = "sleep${MAX_SLEEP}" ]; then
+                               tracking="paused"
+                       else
+                               tracking="active"
+                       fi
+               else
+                       tracking="down"
+               fi
+       else
+               tracking="not enabled"
+       fi
+       echo "$tracking"
+}
+
+mwan3_init()
+{
+       local bitcnt mmdefault source_routing
+
+       config_load mwan3
+
+       [ -d $MWAN3_STATUS_DIR ] || mkdir -p $MWAN3_STATUS_DIR/iface_state
+       [ -d "$MWAN3_STATUS_IPTABLES_LOG_DIR" ] || mkdir -p "$MWAN3_STATUS_IPTABLES_LOG_DIR"
+
+       # mwan3's MARKing mask (at least 3 bits should be set)
+       if [ -e "${MWAN3_STATUS_DIR}/mmx_mask" ]; then
+               MMX_MASK=$(cat "${MWAN3_STATUS_DIR}/mmx_mask")
+               MWAN3_INTERFACE_MAX=$(uci_get_state mwan3 globals iface_max)
+       else
+               config_get MMX_MASK globals mmx_mask '0x3F00'
+               echo "$MMX_MASK"| tr 'A-F' 'a-f' > "${MWAN3_STATUS_DIR}/mmx_mask"
+               LOG debug "Using firewall mask ${MMX_MASK}"
+
+               bitcnt=$(mwan3_count_one_bits MMX_MASK)
+               mmdefault=$(((1<<bitcnt)-1))
+               MWAN3_INTERFACE_MAX=$((mmdefault-3))
+               uci_toggle_state mwan3 globals iface_max "$MWAN3_INTERFACE_MAX"
+               LOG debug "Max interface count is ${MWAN3_INTERFACE_MAX}"
+       fi
+
+       # remove "linkdown", expiry and source based routing modifiers from route lines
+       config_get_bool source_routing globals source_routing 0
+       [ $source_routing -eq 1 ] && unset source_routing
+       MWAN3_ROUTE_LINE_EXP="s/offload//; s/linkdown //; s/expires [0-9]\+sec//; s/error [0-9]\+//; ${source_routing:+s/default\(.*\) from [^ ]*/default\1/;} p"
+
+       # mark mask constants
+       bitcnt=$(mwan3_count_one_bits MMX_MASK)
+       mmdefault=$(((1<<bitcnt)-1))
+       MM_BLACKHOLE=$((mmdefault-2))
+       MM_UNREACHABLE=$((mmdefault-1))
+
+       # MMX_DEFAULT should equal MMX_MASK
+       MMX_DEFAULT=$(mwan3_id2mask mmdefault MMX_MASK)
+       MMX_BLACKHOLE=$(mwan3_id2mask MM_BLACKHOLE MMX_MASK)
+       MMX_UNREACHABLE=$(mwan3_id2mask MM_UNREACHABLE MMX_MASK)
+}
+
+# maps the 1st parameter so it only uses the bits allowed by the bitmask (2nd parameter)
+# which means spreading the bits of the 1st parameter to only use the bits that are set to 1 in the 2nd parameter
+# 0 0 0 0 0 1 0 1 (0x05) 1st parameter
+# 1 0 1 0 1 0 1 0 (0xAA) 2nd parameter
+#     1   0   1          result
+mwan3_id2mask()
+{
+       local bit_msk bit_val result
+       bit_val=0
+       result=0
+       for bit_msk in $(seq 0 31); do
+               if [ $((($2>>bit_msk)&1)) = "1" ]; then
+                       if [ $((($1>>bit_val)&1)) = "1" ]; then
+                               result=$((result|(1<<bit_msk)))
+                       fi
+                       bit_val=$((bit_val+1))
+               fi
+       done
+       printf "0x%x" $result
+}
+
+# counts how many bits are set to 1
+# n&(n-1) clears the lowest bit set to 1
+mwan3_count_one_bits()
+{
+       local count n
+       count=0
+       n=$(($1))
+       while [ "$n" -gt "0" ]; do
+               n=$((n&(n-1)))
+               count=$((count+1))
+       done
+       echo $count
+}
+
+get_uptime() {
+       local uptime=$(cat /proc/uptime)
+       echo "${uptime%%.*}"
+}
+
+get_online_time() {
+       local time_n time_u iface
+       iface="$1"
+       time_u="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/ONLINE" 2>/dev/null)"
+       [ -z "${time_u}" ] || [ "${time_u}" = "0" ] || {
+               time_n="$(get_uptime)"
+               echo $((time_n-time_u))
+       }
+}
diff --git a/package/network/config/mwan3/files/lib/mwan3/mwan3.sh b/package/network/config/mwan3/files/lib/mwan3/mwan3.sh
new file mode 100644 (file)
index 0000000..a3e7c00
--- /dev/null
@@ -0,0 +1,1230 @@
+#!/bin/sh
+
+. "${IPKG_INSTROOT}/usr/share/libubox/jshn.sh"
+. "${IPKG_INSTROOT}/lib/mwan3/common.sh"
+
+CONNTRACK_FILE="/proc/net/nf_conntrack"
+IPv6_REGEX="([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,7}:|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|"
+IPv6_REGEX="${IPv6_REGEX}[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|"
+IPv6_REGEX="${IPv6_REGEX}:((:[0-9a-fA-F]{1,4}){1,7}|:)|"
+IPv6_REGEX="${IPv6_REGEX}fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|"
+IPv6_REGEX="${IPv6_REGEX}::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"
+IPv4_REGEX="((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
+
+DEFAULT_LOWEST_METRIC=256
+
+mwan3_push_update()
+{
+       # helper function to build an update string to pass on to
+       # IPTR or IPS RESTORE. Modifies the 'update' variable in
+       # the local scope.
+       update="$update"$'\n'"$*";
+}
+
+mwan3_update_dev_to_table()
+{
+       local _tid
+       # shellcheck disable=SC2034
+       mwan3_dev_tbl_ipv4=" "
+       # shellcheck disable=SC2034
+       mwan3_dev_tbl_ipv6=" "
+
+       update_table()
+       {
+               local family curr_table device enabled
+               let _tid++
+               config_get family "$1" family ipv4
+               network_get_device device "$1"
+               [ -z "$device" ] && return
+               config_get enabled "$1" enabled
+               [ "$enabled" -eq 0 ] && return
+               curr_table=$(eval "echo  \"\$mwan3_dev_tbl_${family}\"")
+               export "mwan3_dev_tbl_$family=${curr_table}${device}=$_tid "
+       }
+       network_flush_cache
+       config_foreach update_table interface
+}
+
+mwan3_update_iface_to_table()
+{
+       local _tid
+       mwan3_iface_tbl=" "
+       update_table()
+       {
+               let _tid++
+               export mwan3_iface_tbl="${mwan3_iface_tbl}${1}=$_tid "
+       }
+       config_foreach update_table interface
+}
+
+mwan3_route_line_dev()
+{
+       # must have mwan3 config already loaded
+       # arg 1 is route device
+       local _tid route_line route_device route_family entry curr_table
+       route_line=$2
+       route_family=$3
+       route_device=$(echo "$route_line" | sed -ne "s/.*dev \([^ ]*\).*/\1/p")
+       unset "$1"
+       [ -z "$route_device" ] && return
+
+       curr_table=$(eval "echo \"\$mwan3_dev_tbl_${route_family}\"")
+       for entry in $curr_table; do
+               if [ "${entry%%=*}" = "$route_device" ]; then
+                       _tid=${entry##*=}
+                       export "$1=$_tid"
+                       return
+               fi
+       done
+}
+
+# counts how many bits are set to 1
+# n&(n-1) clears the lowest bit set to 1
+mwan3_count_one_bits()
+{
+       local count n
+       count=0
+       n=$(($1))
+       while [ "$n" -gt "0" ]; do
+               n=$((n&(n-1)))
+               count=$((count+1))
+       done
+       echo $count
+}
+
+mwan3_get_iface_id()
+{
+       local _tmp
+       [ -z "$mwan3_iface_tbl" ] && mwan3_update_iface_to_table
+       _tmp="${mwan3_iface_tbl##* ${2}=}"
+       _tmp=${_tmp%% *}
+       export "$1=$_tmp"
+}
+
+mwan3_set_custom_ipset_v4()
+{
+       local custom_network_v4
+
+       for custom_network_v4 in $($IP4 route list table "$1" | awk '{print $1}' | grep -E "$IPv4_REGEX"); do
+               LOG notice "Adding network $custom_network_v4 from table $1 to mwan3_custom_v4 ipset"
+               mwan3_push_update -! add mwan3_custom_ipv4 "$custom_network_v4"
+       done
+}
+
+mwan3_set_custom_ipset_v6()
+{
+       local custom_network_v6
+
+       for custom_network_v6 in $($IP6 route list table "$1" | awk '{print $1}' | grep -E "$IPv6_REGEX"); do
+               LOG notice "Adding network $custom_network_v6 from table $1 to mwan3_custom_v6 ipset"
+               mwan3_push_update -! add mwan3_custom_ipv6 "$custom_network_v6"
+       done
+}
+
+mwan3_set_custom_ipset()
+{
+       local update=""
+
+       mwan3_push_update -! create mwan3_custom_ipv4 hash:net
+       mwan3_push_update flush mwan3_custom_ipv4
+       config_list_foreach "globals" "rt_table_lookup" mwan3_set_custom_ipset_v4
+
+       if [ $NO_IPV6 -eq 0 ]; then
+               mwan3_push_update -! create mwan3_custom_ipv6 hash:net family inet6
+               mwan3_push_update flush mwan3_custom_ipv6
+               config_list_foreach "globals" "rt_table_lookup" mwan3_set_custom_ipset_v6
+       fi
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_custom_ipset.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_custom_ipset: $error"
+}
+
+
+mwan3_set_connected_ipv4()
+{
+       local connected_network_v4 error
+       local candidate_list cidr_list
+       local update=""
+
+       mwan3_push_update -! create mwan3_connected_ipv4 hash:net
+       mwan3_push_update flush mwan3_connected_ipv4
+
+       candidate_list=""
+       cidr_list=""
+       route_lists()
+       {
+               $IP4 route | awk '{print $1}'
+               $IP4 route list table 0 | awk '{print $2}'
+       }
+       for connected_network_v4 in $(route_lists | grep -E "$IPv4_REGEX"); do
+               if [ -z "${connected_network_v4##*/*}" ]; then
+                       cidr_list="$cidr_list $connected_network_v4"
+               else
+                       candidate_list="$candidate_list $connected_network_v4"
+               fi
+       done
+
+       for connected_network_v4 in $cidr_list; do
+               mwan3_push_update -! add mwan3_connected_ipv4 "$connected_network_v4"
+       done
+       for connected_network_v4 in $candidate_list; do
+               mwan3_push_update -! add mwan3_connected_ipv4 "$connected_network_v4"
+       done
+
+       mwan3_push_update add mwan3_connected_ipv4 224.0.0.0/3
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_connected_ipv4.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_connected_ipv4: $error"
+}
+
+mwan3_set_connected_ipv6()
+{
+       local connected_network_v6 error
+       local update=""
+       [ $NO_IPV6 -eq 0 ] || return
+
+       mwan3_push_update -! create mwan3_connected_ipv6 hash:net family inet6
+       mwan3_push_update flush mwan3_connected_ipv6
+
+       for connected_network_v6 in $($IP6 route | awk '{print $1}' | grep -E "$IPv6_REGEX"); do
+               mwan3_push_update -! add mwan3_connected_ipv6 "$connected_network_v6"
+       done
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_connected_ipv6.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_connected_ipv6: $error"
+}
+
+mwan3_set_connected_ipset()
+{
+       local error
+       local update=""
+
+       mwan3_push_update -! create mwan3_connected_ipv4 hash:net
+       mwan3_push_update flush mwan3_connected_ipv4
+
+       if [ $NO_IPV6 -eq 0 ]; then
+               mwan3_push_update -! create mwan3_connected_ipv6 hash:net family inet6
+               mwan3_push_update flush mwan3_connected_ipv6
+       fi
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_connected_ipset.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_connected_ipset: $error"
+}
+
+mwan3_set_dynamic_ipset()
+{
+       local error
+       local update=""
+
+       mwan3_push_update -! create mwan3_dynamic_ipv4 list:set
+       mwan3_push_update flush mwan3_dynamic_ipv4
+
+       if [ $NO_IPV6 -eq 0 ]; then
+               mwan3_push_update -! create mwan3_dynamic_ipv6 hash:net family inet6
+               mwan3_push_update flush mwan3_dynamic_ipv6
+       fi
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_dynamic_ipset.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_dynamic_ipset: $error"
+}
+
+mwan3_set_general_rules()
+{
+       local IP
+
+       for IP in "$IP4" "$IP6"; do
+               [ "$IP" = "$IP6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               RULE_NO=$((MM_BLACKHOLE+2000))
+               if [ -z "$($IP rule list | awk -v var="$RULE_NO:" '$1 == var')" ]; then
+                       $IP rule add pref $RULE_NO fwmark $MMX_BLACKHOLE/$MMX_MASK blackhole
+               fi
+
+               RULE_NO=$((MM_UNREACHABLE+2000))
+               if [ -z "$($IP rule list | awk -v var="$RULE_NO:" '$1 == var')" ]; then
+                       $IP rule add pref $RULE_NO fwmark $MMX_UNREACHABLE/$MMX_MASK unreachable
+               fi
+       done
+}
+
+mwan3_set_general_iptables()
+{
+       local IPT current update error family
+
+       for IPT in "$IPT4" "$IPT6"; do
+               [ "$IPT" = "$IPT6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               current="$($IPT -S)"$'\n'
+               update="*mangle"
+               if [ -n "${current##*-N mwan3_ifaces_in*}" ]; then
+                       mwan3_push_update -N mwan3_ifaces_in
+               fi
+
+               if [ "$IPT" = "$IPT6" ]; then
+                       family="ipv6"
+               else
+                       family="ipv4"
+               fi
+
+               for chain in custom connected dynamic; do
+                       echo "${current}" | grep -q "\-N mwan3_${chain}_${family}$"
+                       local ret="$?"
+                       if [ "$ret" = 1 ]; then
+                               mwan3_push_update -N mwan3_${chain}_${family}
+                               mwan3_push_update -A mwan3_${chain}_${family} \
+                                       -m set --match-set mwan3_${chain}_${family} dst \
+                                       -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+                       fi
+               done
+
+               if [ -n "${current##*-N mwan3_rules*}" ]; then
+                       mwan3_push_update -N mwan3_rules
+               fi
+
+               if [ -n "${current##*-N mwan3_hook*}" ]; then
+                       mwan3_push_update -N mwan3_hook
+                       # do not mangle ipv6 ra service
+                       if [ "$IPT" = "$IPT6" ]; then
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 133 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 134 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 135 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 136 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 137 \
+                                                 -j RETURN
+
+                       fi
+                       mwan3_push_update -A mwan3_hook \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -j CONNMARK --restore-mark --nfmask "$MMX_MASK" --ctmask "$MMX_MASK"
+                       mwan3_push_update -A mwan3_hook \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -j mwan3_ifaces_in
+
+                       for chain in custom connected dynamic; do
+                               mwan3_push_update -A mwan3_hook \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -j mwan3_${chain}_${family}
+                       done
+
+                       mwan3_push_update -A mwan3_hook \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -j mwan3_rules
+                       mwan3_push_update -A mwan3_hook \
+                                         -j CONNMARK --save-mark --nfmask "$MMX_MASK" --ctmask "$MMX_MASK"
+
+                       for chain in custom connected dynamic; do
+                               mwan3_push_update -A mwan3_hook \
+                                       -m mark ! --mark $MMX_DEFAULT/$MMX_MASK \
+                                       -j mwan3_${chain}_${family}
+                       done
+               fi
+
+               if [ -n "${current##*-A PREROUTING -j mwan3_hook*}" ]; then
+                       mwan3_push_update -A PREROUTING -j mwan3_hook
+               fi
+               if [ -n "${current##*-A OUTPUT -j mwan3_hook*}" ]; then
+                       mwan3_push_update -A OUTPUT -j mwan3_hook
+               fi
+               mwan3_push_update COMMIT
+               mwan3_push_update ""
+
+               echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-set_general_iptables-${family}.dump"
+               if [ "$IPT" = "$IPT4" ]; then
+                       error=$(echo "$update" | $IPT4R 2>&1) || LOG error "set_general_iptables (${family}): $error"
+               else
+                       error=$(echo "$update" | $IPT6R 2>&1) || LOG error "set_general_iptables (${family}): $error"
+               fi
+       done
+}
+
+mwan3_create_iface_iptables()
+{
+       local id family IPT IPTR current update error
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+               IPTR="$IPT4R"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IPT="$IPT6"
+               IPTR="$IPT6R"
+       else
+               return
+       fi
+
+       current="$($IPT -S)"$'\n'
+       update="*mangle"
+       if [ -n "${current##*-N mwan3_ifaces_in*}" ]; then
+               mwan3_push_update -N mwan3_ifaces_in
+       fi
+
+       if [ -n "${current##*-N mwan3_iface_in_$1$'\n'*}" ]; then
+               mwan3_push_update -N "mwan3_iface_in_$1"
+       else
+               mwan3_push_update -F "mwan3_iface_in_$1"
+       fi
+
+       for chain in custom connected dynamic; do
+               mwan3_push_update -A "mwan3_iface_in_$1" \
+                       -i "$2" \
+                       -m set --match-set mwan3_${chain}_${family} src \
+                       -m mark --mark "0x0/$MMX_MASK" \
+                       -m comment --comment "default" \
+                       -j MARK --set-xmark "$MMX_DEFAULT/$MMX_MASK"
+       done
+       mwan3_push_update -A "mwan3_iface_in_$1" \
+                         -i "$2" \
+                         -m mark --mark "0x0/$MMX_MASK" \
+                         -m comment --comment "$1" \
+                         -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+
+       if [ -n "${current##*-A mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_${1}$'\n'*}" ]; then
+               mwan3_push_update -A mwan3_ifaces_in \
+                                 -m mark --mark 0x0/$MMX_MASK \
+                                 -j "mwan3_iface_in_$1"
+               LOG debug "create_iface_iptables: mwan3_iface_in_$1 not in iptables, adding"
+       else
+               LOG debug "create_iface_iptables: mwan3_iface_in_$1 already in iptables, skip"
+       fi
+
+       mwan3_push_update COMMIT
+       mwan3_push_update ""
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-create_iface_iptables-${1}.dump"
+       error=$(echo "$update" | $IPTR 2>&1) || LOG error "create_iface_iptables (${1}): $error"
+}
+
+mwan3_delete_iface_iptables()
+{
+       local IPT update
+       config_get family "$1" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+       fi
+
+       if [ "$family" = "ipv6" ]; then
+               [ $NO_IPV6 -ne 0 ] && return
+               IPT="$IPT6"
+       fi
+
+       update="*mangle"
+
+       mwan3_push_update -D mwan3_ifaces_in \
+               -m mark --mark 0x0/$MMX_MASK \
+               -j "mwan3_iface_in_$1" &> /dev/null
+       mwan3_push_update -F "mwan3_iface_in_$1" &> /dev/null
+       mwan3_push_update -X "mwan3_iface_in_$1" &> /dev/null
+
+       mwan3_push_update COMMIT
+       mwan3_push_update ""
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-delete_iface_iptables-${1}.dump"
+       error=$(echo "$update" | $IPTR 2>&1) || LOG error "delete_iface_iptables (${1}): $error"
+}
+
+mwan3_extra_tables_routes()
+{
+       $IP route list table "$1"
+}
+
+mwan3_get_routes()
+{
+       {
+               $IP route list table main
+               config_list_foreach "globals" "rt_table_lookup" mwan3_extra_tables_routes
+       } | sed -ne "$MWAN3_ROUTE_LINE_EXP" | sort -u
+}
+
+mwan3_create_iface_route()
+{
+       local tid route_line family IP id tbl
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ]; then
+               IP="$IP6"
+       fi
+
+       tbl=$($IP route list table $id 2>/dev/null)$'\n'
+       mwan3_update_dev_to_table
+       mwan3_get_routes | while read -r route_line; do
+               mwan3_route_line_dev "tid" "$route_line" "$family"
+               { [ -z "${route_line##default*}" ] || [ -z "${route_line##fe80::/64*}" ]; } && [ "$tid" != "$id" ] && continue
+               if [ -z "$tid" ] || [ "$tid" = "$id" ]; then
+                       # possible that routes are already in the table
+                       # if 'connected' was called after 'ifup'
+                       [ -n "$tbl" ] && [ -z "${tbl##*$route_line$'\n'*}" ] && continue
+                       $IP route add table $id $route_line ||
+                               LOG debug "Route '$route_line' already added to table $id"
+               fi
+
+       done
+}
+
+mwan3_delete_iface_route()
+{
+       local id family
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       if [ -z "$id" ]; then
+               LOG warn "delete_iface_route: could not find table id for interface $1"
+               return 0
+       fi
+
+       if [ "$family" = "ipv4" ]; then
+               $IP4 route flush table "$id"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               $IP6 route flush table "$id"
+       fi
+}
+
+mwan3_create_iface_rules()
+{
+       local id family IP
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IP="$IP6"
+       else
+               return
+       fi
+
+       mwan3_delete_iface_rules "$1"
+
+       $IP rule add pref $((id+1000)) iif "$2" lookup "$id"
+       $IP rule add pref $((id+2000)) fwmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK" lookup "$id"
+       $IP rule add pref $((id+3000)) fwmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK" unreachable
+}
+
+mwan3_delete_iface_rules()
+{
+       local id family IP rule_id
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IP="$IP6"
+       else
+               return
+       fi
+
+       for rule_id in $(ip rule list | awk '$1 % 1000 == '$id' && $1 > 1000 && $1 < 4000 {print substr($1,0,4)}'); do
+               $IP rule del pref $rule_id
+       done
+}
+
+mwan3_delete_iface_ipset_entries()
+{
+       local id setname entry
+
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       for setname in $(ipset -n list | grep ^mwan3_rule_); do
+               for entry in $(ipset list "$setname" | grep "$(mwan3_id2mask id MMX_MASK | awk '{ printf "0x%08x", $1; }')" | cut -d ' ' -f 1); do
+                       $IPS del "$setname" $entry ||
+                               LOG notice "failed to delete $entry from $setname"
+               done
+       done
+}
+
+
+mwan3_set_policy()
+{
+       local id iface family metric probability weight device is_lowest is_offline IPT IPTR total_weight current update error
+
+       is_lowest=0
+       config_get iface "$1" interface
+       config_get metric "$1" metric 1
+       config_get weight "$1" weight 1
+
+       [ -n "$iface" ] || return 0
+       network_get_device device "$iface"
+       [ "$metric" -gt $DEFAULT_LOWEST_METRIC ] && LOG warn "Member interface $iface has >$DEFAULT_LOWEST_METRIC metric. Not appending to policy" && return 0
+
+       mwan3_get_iface_id id "$iface"
+
+       [ -n "$id" ] || return 0
+
+       [ "$(mwan3_get_iface_hotplug_state "$iface")" = "online" ]
+       is_offline=$?
+
+       config_get family "$iface" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+               IPTR="$IPT4R"
+       elif [ "$family" = "ipv6" ]; then
+               IPT="$IPT6"
+               IPTR="$IPT6R"
+       fi
+       current="$($IPT -S)"$'\n'
+       update="*mangle"
+
+       if [ "$family" = "ipv4" ] && [ $is_offline -eq 0 ]; then
+               if [ "$metric" -lt "$lowest_metric_v4" ]; then
+                       is_lowest=1
+                       total_weight_v4=$weight
+                       lowest_metric_v4=$metric
+               elif [ "$metric" -eq "$lowest_metric_v4" ]; then
+                       total_weight_v4=$((total_weight_v4+weight))
+                       total_weight=$total_weight_v4
+               else
+                       return
+               fi
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ] && [ $is_offline -eq 0 ]; then
+               if [ "$metric" -lt "$lowest_metric_v6" ]; then
+                       is_lowest=1
+                       total_weight_v6=$weight
+                       lowest_metric_v6=$metric
+               elif [ "$metric" -eq "$lowest_metric_v6" ]; then
+                       total_weight_v6=$((total_weight_v6+weight))
+                       total_weight=$total_weight_v6
+               else
+                       return
+               fi
+       fi
+       if [ $is_lowest -eq 1 ]; then
+               mwan3_push_update -F "mwan3_policy_$policy"
+               mwan3_push_update -A "mwan3_policy_$policy" \
+                                 -m mark --mark 0x0/$MMX_MASK \
+                                 -m comment --comment \"$iface $weight $weight\" \
+                                 -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+       elif [ $is_offline -eq 0 ]; then
+               probability=$((weight*1000/total_weight))
+               if [ "$probability" -lt 10 ]; then
+                       probability="0.00$probability"
+               elif [ $probability -lt 100 ]; then
+                       probability="0.0$probability"
+               elif [ $probability -lt 1000 ]; then
+                       probability="0.$probability"
+               else
+                       probability="1"
+               fi
+
+               mwan3_push_update -I "mwan3_policy_$policy" \
+                                 -m mark --mark 0x0/$MMX_MASK \
+                                 -m statistic \
+                                 --mode random \
+                                 --probability "$probability" \
+                                 -m comment --comment \"$iface $weight $total_weight\" \
+                                 -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+       elif [ -n "$device" ]; then
+               echo "$current" | grep -q "^-A mwan3_policy_$policy.*--comment .* [0-9]* [0-9]*" ||
+                       mwan3_push_update -I "mwan3_policy_$policy" \
+                                         -o "$device" \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -m comment --comment \"out $iface $device\" \
+                                         -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+       fi
+       mwan3_push_update COMMIT
+       mwan3_push_update ""
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-set_policy-${1}.dump"
+       error=$(echo "$update" | $IPTR 2>&1) || LOG error "set_policy ($1): $error"
+}
+
+mwan3_create_policies_iptables()
+{
+       local last_resort lowest_metric_v4 lowest_metric_v6 total_weight_v4 total_weight_v6 policy IPT current update error
+
+       policy="$1"
+
+       config_get last_resort "$1" last_resort unreachable
+
+       if [ "$1" != "$(echo "$1" | cut -c1-15)" ]; then
+               LOG warn "Policy $1 exceeds max of 15 chars. Not setting policy" && return 0
+       fi
+
+       for IPT in "$IPT4" "$IPT6"; do
+               [ "$IPT" = "$IPT6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               current="$($IPT -S)"$'\n'
+               update="*mangle"
+               if [ -n "${current##*-N mwan3_policy_$1$'\n'*}" ]; then
+                       mwan3_push_update -N "mwan3_policy_$1"
+               fi
+
+               mwan3_push_update -F "mwan3_policy_$1"
+
+               case "$last_resort" in
+                       blackhole)
+                               mwan3_push_update -A "mwan3_policy_$1" \
+                                                 -m mark --mark 0x0/$MMX_MASK \
+                                                 -m comment --comment "blackhole" \
+                                                 -j MARK --set-xmark $MMX_BLACKHOLE/$MMX_MASK
+                               ;;
+                       default)
+                               mwan3_push_update -A "mwan3_policy_$1" \
+                                                 -m mark --mark 0x0/$MMX_MASK \
+                                                 -m comment --comment "default" \
+                                                 -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+                               ;;
+                       *)
+                               mwan3_push_update -A "mwan3_policy_$1" \
+                                                 -m mark --mark 0x0/$MMX_MASK \
+                                                 -m comment --comment "unreachable" \
+                                                 -j MARK --set-xmark $MMX_UNREACHABLE/$MMX_MASK
+                               ;;
+               esac
+               mwan3_push_update COMMIT
+               mwan3_push_update ""
+
+               echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-create_policies_iptables-${1}.dump"
+               if [ "$IPT" = "$IPT4" ]; then
+                       error=$(echo "$update" | $IPT4R 2>&1) || LOG error "create_policies_iptables ($1): $error"
+               else
+                       error=$(echo "$update" | $IPT6R 2>&1) || LOG error "create_policies_iptables ($1): $error"
+               fi
+       done
+
+       lowest_metric_v4=$DEFAULT_LOWEST_METRIC
+       total_weight_v4=0
+
+       lowest_metric_v6=$DEFAULT_LOWEST_METRIC
+       total_weight_v6=0
+
+       config_list_foreach "$1" use_member mwan3_set_policy
+}
+
+mwan3_set_policies_iptables()
+{
+       config_foreach mwan3_create_policies_iptables policy
+}
+
+mwan3_set_sticky_iptables()
+{
+       local interface="${1}"
+       local rule="${2}"
+       local ipv="${3}"
+       local policy="${4}"
+
+       local id iface
+       for iface in $(echo "$current" | grep "^-A $policy" | cut -s -d'"' -f2 | awk '{print $1}'); do
+               if [ "$iface" = "$interface" ]; then
+
+                       mwan3_get_iface_id id "$iface"
+
+                       [ -n "$id" ] || return 0
+                       if [ -z "${current##*-N mwan3_iface_in_${iface}$'\n'*}" ]; then
+                               mwan3_push_update -I "mwan3_rule_$rule" \
+                                                 -m mark --mark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK" \
+                                                 -m set ! --match-set "mwan3_rule_${ipv}_${rule}" src,src \
+                                                 -j MARK --set-xmark "0x0/$MMX_MASK"
+                               mwan3_push_update -I "mwan3_rule_$rule" \
+                                                 -m mark --mark "0/$MMX_MASK" \
+                                                 -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+                       fi
+               fi
+       done
+}
+
+mwan3_set_sticky_ipset()
+{
+       local rule="$1"
+       local mmx="$2"
+       local timeout="$3"
+
+       local error
+       local update=""
+
+       mwan3_push_update -! create "mwan3_rule_ipv4_$rule" \
+               hash:ip,mark markmask "$mmx" \
+               timeout "$timeout"
+
+       [ $NO_IPV6 -eq 0 ] &&
+               mwan3_push_update -! create "mwan3_rule_ipv6_$rule" \
+                       hash:ip,mark markmask "$mmx" \
+                       timeout "$timeout" family inet6
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_sticky_ipset-${rule}.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_sticky_ipset (${rule}): $error"
+}
+
+mwan3_set_user_iptables_rule()
+{
+       local ipset family proto policy src_ip src_port src_iface src_dev
+       local sticky dest_ip dest_port use_policy timeout policy
+       local global_logging rule_logging loglevel rule_policy rule ipv
+
+       rule="$1"
+       ipv="$2"
+       rule_policy=0
+       config_get sticky "$1" sticky 0
+       config_get timeout "$1" timeout 600
+       config_get ipset "$1" ipset
+       config_get proto "$1" proto all
+       config_get src_ip "$1" src_ip
+       config_get src_iface "$1" src_iface
+       config_get src_port "$1" src_port
+       config_get dest_ip "$1" dest_ip
+       config_get dest_port "$1" dest_port
+       config_get use_policy "$1" use_policy
+       config_get family "$1" family any
+       config_get rule_logging "$1" logging 0
+       config_get global_logging globals logging 0
+       config_get loglevel globals loglevel notice
+
+       [ "$ipv" = "ipv6" ] && [ $NO_IPV6 -ne 0 ] && return
+       [ "$family" = "ipv4" ] && [ "$ipv" = "ipv6" ] && return
+       [ "$family" = "ipv6" ] && [ "$ipv" = "ipv4" ] && return
+
+       for ipaddr in "$src_ip" "$dest_ip"; do
+               if [ -n "$ipaddr" ] && { { [ "$ipv" = "ipv4" ] && echo "$ipaddr" | grep -qE "$IPv6_REGEX"; } ||
+                                                { [ "$ipv" = "ipv6" ] && echo "$ipaddr" | grep -qE $IPv4_REGEX; } }; then
+                       LOG warn "invalid $ipv address $ipaddr specified for rule $rule"
+                       return
+               fi
+       done
+
+       if [ -n "$src_iface" ]; then
+               network_get_device src_dev "$src_iface"
+               if [ -z "$src_dev" ]; then
+                       LOG notice "could not find device corresponding to src_iface $src_iface for rule $1"
+                       return
+               fi
+       fi
+
+       [ -z "$dest_ip" ] && unset dest_ip
+       [ -z "$src_ip" ] && unset src_ip
+       [ -z "$ipset" ] && unset ipset
+       [ -z "$src_port" ] && unset src_port
+       [ -z "$dest_port" ] && unset dest_port
+       if [ "$proto" != 'tcp' ] && [ "$proto" != 'udp' ]; then
+               [ -n "$src_port" ] && {
+                       LOG warn "src_port set to '$src_port' but proto set to '$proto' not tcp or udp. src_port will be ignored"
+               }
+
+               [ -n "$dest_port" ] && {
+                       LOG warn "dest_port set to '$dest_port' but proto set to '$proto' not tcp or udp. dest_port will be ignored"
+               }
+               unset src_port
+               unset dest_port
+       fi
+
+       if [ "$1" != "$(echo "$1" | cut -c1-15)" ]; then
+               LOG warn "Rule $1 exceeds max of 15 chars. Not setting rule" && return 0
+       fi
+
+       if [ -n "$ipset" ]; then
+               ipset="-m set --match-set $ipset dst"
+       fi
+
+       if [ -z "$use_policy" ]; then
+               return
+       fi
+
+       if [ "$use_policy" = "default" ]; then
+               policy="MARK --set-xmark $MMX_DEFAULT/$MMX_MASK"
+       elif [ "$use_policy" = "unreachable" ]; then
+               policy="MARK --set-xmark $MMX_UNREACHABLE/$MMX_MASK"
+       elif [ "$use_policy" = "blackhole" ]; then
+               policy="MARK --set-xmark $MMX_BLACKHOLE/$MMX_MASK"
+       else
+               rule_policy=1
+               policy="mwan3_policy_$use_policy"
+               if [ "$sticky" -eq 1 ]; then
+                       mwan3_set_sticky_ipset "$rule" "$MMX_MASK" "$timeout"
+               fi
+       fi
+
+       if [ $rule_policy -eq 1 ] && [ -n "${current##*-N $policy$'\n'*}" ]; then
+               mwan3_push_update -N "$policy"
+       fi
+
+       if [ $rule_policy -eq 1 ] && [ "$sticky" -eq 1 ]; then
+               if [ -n "${current##*-N mwan3_rule_$1$'\n'*}" ]; then
+                       mwan3_push_update -N "mwan3_rule_$1"
+               fi
+
+               mwan3_push_update -F "mwan3_rule_$1"
+               config_foreach mwan3_set_sticky_iptables interface "$rule" "$ipv" "$policy"
+
+
+               mwan3_push_update -A "mwan3_rule_$1" \
+                                 -m mark --mark 0/$MMX_MASK \
+                                 -j "$policy"
+               mwan3_push_update -A "mwan3_rule_$1" \
+                                 -m mark ! --mark 0xfc00/0xfc00 \
+                                 -j SET --del-set "mwan3_rule_${ipv}_${rule}" src,src
+               mwan3_push_update -A "mwan3_rule_$1" \
+                                 -m mark ! --mark 0xfc00/0xfc00 \
+                                 -j SET --add-set "mwan3_rule_${ipv}_${rule}" src,src
+               policy="mwan3_rule_$1"
+       fi
+       if [ "$global_logging" = "1" ] && [ "$rule_logging" = "1" ]; then
+               mwan3_push_update -A mwan3_rules \
+                                 -p "$proto" \
+                                 ${src_ip:+-s} $src_ip \
+                                 ${src_dev:+-i} $src_dev \
+                                 ${dest_ip:+-d} $dest_ip \
+                                 $ipset \
+                                 ${src_port:+-m} ${src_port:+multiport} ${src_port:+--sports} $src_port \
+                                 ${dest_port:+-m} ${dest_port:+multiport} ${dest_port:+--dports} $dest_port \
+                                 -m mark --mark 0/$MMX_MASK \
+                                 -m comment --comment "$1" \
+                                 -j LOG --log-level "$loglevel" --log-prefix "MWAN3($1)"
+       fi
+
+       mwan3_push_update -A mwan3_rules \
+                         -p "$proto" \
+                         ${src_ip:+-s} $src_ip \
+                         ${src_dev:+-i} $src_dev \
+                         ${dest_ip:+-d} $dest_ip \
+                         $ipset \
+                         ${src_port:+-m} ${src_port:+multiport} ${src_port:+--sports} $src_port \
+                         ${dest_port:+-m} ${dest_port:+multiport} ${dest_port:+--dports} $dest_port \
+                         -m mark --mark 0/$MMX_MASK \
+                         -j $policy
+
+}
+
+mwan3_set_user_iface_rules()
+{
+       local current iface update family error device is_src_iface
+       iface=$1
+       device=$2
+
+       if [ -z "$device" ]; then
+               LOG notice "set_user_iface_rules: could not find device corresponding to iface $iface"
+               return
+       fi
+
+       config_get family "$iface" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+               IPTR="$IPT4R"
+       elif [ "$family" = "ipv6" ]; then
+               IPT="$IPT6"
+               IPTR="$IPT6R"
+       fi
+       $IPT -S | grep -q "^-A mwan3_rules.*-i $device" && return
+
+       is_src_iface=0
+
+       iface_rule()
+       {
+               local src_iface
+               config_get src_iface "$1" src_iface
+               [ "$src_iface" = "$iface" ] && is_src_iface=1
+       }
+       config_foreach iface_rule rule
+       [ $is_src_iface -eq 1 ] && mwan3_set_user_rules
+}
+
+mwan3_set_user_rules()
+{
+       local IPT IPTR ipv
+       local current update error
+
+       for ipv in ipv4 ipv6; do
+               if [ "$ipv" = "ipv4" ]; then
+                       IPT="$IPT4"
+                       IPTR="$IPT4R"
+               elif [ "$ipv" = "ipv6" ]; then
+                       IPT="$IPT6"
+                       IPTR="$IPT6R"
+               fi
+               [ "$ipv" = "ipv6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               update="*mangle"
+               current="$($IPT -S)"$'\n'
+
+
+               if [ -n "${current##*-N mwan3_rules*}" ]; then
+                       mwan3_push_update -N "mwan3_rules"
+               fi
+
+               mwan3_push_update -F mwan3_rules
+
+               config_foreach mwan3_set_user_iptables_rule rule "$ipv"
+
+               mwan3_push_update COMMIT
+               mwan3_push_update ""
+
+               echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-set_user_rules-${ipv}.dump"
+               error=$(echo "$update" | $IPTR 2>&1) || LOG error "set_user_rules (${ipv}): $error"
+       done
+
+
+}
+
+mwan3_interface_hotplug_shutdown()
+{
+       local interface status device ifdown
+       interface="$1"
+       ifdown="$2"
+       [ -f $MWAN3TRACK_STATUS_DIR/$interface/STATUS ] && {
+               status=$(cat $MWAN3TRACK_STATUS_DIR/$interface/STATUS)
+       }
+
+       [ "$status" != "online" ] && [ "$ifdown" != 1 ] && return
+
+       if [ "$ifdown" = 1 ]; then
+               env -i ACTION=ifdown \
+                       INTERFACE=$interface \
+                       DEVICE=$device \
+                       sh /etc/hotplug.d/iface/15-mwan3
+       else
+               [ "$status" = "online" ] && {
+                       env -i MWAN3_SHUTDOWN="1" \
+                               ACTION="disconnected" \
+                               INTERFACE="$interface" \
+                               DEVICE="$device" /sbin/hotplug-call iface
+               }
+       fi
+
+}
+
+mwan3_interface_shutdown()
+{
+       mwan3_interface_hotplug_shutdown $1
+       mwan3_track_clean $1
+}
+
+mwan3_ifup()
+{
+       local interface=$1
+       local caller=$2
+
+       local up l3_device status true_iface
+
+       if [ "${caller}" = "cmd" ]; then
+               # It is not necessary to obtain a lock here, because it is obtained in the hotplug
+               # script, but we still want to do the check to print a useful error message
+               /etc/init.d/mwan3 running || {
+                       echo 'The service mwan3 is global disabled.'
+                       echo 'Please execute "/etc/init.d/mwan3 start" first.'
+                       exit 1
+               }
+               config_load mwan3
+       fi
+       mwan3_get_true_iface true_iface $interface
+       status=$(ubus -S call network.interface.$true_iface status)
+
+       [ -n "$status" ] && {
+               json_load "$status"
+               json_get_vars up l3_device
+       }
+       hotplug_startup()
+       {
+               env -i MWAN3_STARTUP=$caller ACTION=ifup \
+                   INTERFACE=$interface DEVICE=$l3_device \
+                   sh /etc/hotplug.d/iface/15-mwan3
+       }
+
+       if [ "$up" != "1" ] || [ -z "$l3_device" ]; then
+               return
+       fi
+
+       if [ "${caller}" = "init" ]; then
+               hotplug_startup &
+               hotplug_pids="$hotplug_pids $!"
+       else
+               hotplug_startup
+       fi
+
+}
+
+mwan3_set_iface_hotplug_state() {
+       local iface=$1
+       local state=$2
+
+       echo "$state" > "$MWAN3_STATUS_DIR/iface_state/$iface"
+}
+
+mwan3_get_iface_hotplug_state() {
+       local iface=$1
+
+       cat "$MWAN3_STATUS_DIR/iface_state/$iface" 2>/dev/null || echo "offline"
+}
+
+mwan3_report_iface_status()
+{
+       local device result tracking IP IPT error
+
+       mwan3_get_iface_id id "$1"
+       network_get_device device "$1"
+       config_get enabled "$1" enabled 0
+       config_get family "$1" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+               IPT="$IPT4"
+       fi
+
+       if [ "$family" = "ipv6" ]; then
+               IP="$IP6"
+               IPT="$IPT6"
+       fi
+
+       if [ -z "$id" ] || [ -z "$device" ]; then
+               result="offline"
+       else
+               error=0
+               [ -n "$($IP rule | awk '$1 == "'$((id+1000)):'"')" ] ||
+                       error=$((error+1))
+               [ -n "$($IP rule | awk '$1 == "'$((id+2000)):'"')" ] ||
+                       error=$((error+2))
+               [ -n "$($IP rule | awk '$1 == "'$((id+3000)):'"')" ] ||
+                       error=$((error+4))
+               [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ] ||
+                       error=$((error+8))
+               [ -n "$($IP route list table $id default dev $device 2> /dev/null)" ] ||
+                       error=$((error+16))
+       fi
+
+       if [ "$result" = "offline" ]; then
+               :
+       elif [ $error -eq 0 ]; then
+               online=$(get_online_time "$1")
+               network_get_uptime uptime "$1"
+               online="$(printf '%02dh:%02dm:%02ds\n' $((online/3600)) $((online%3600/60)) $((online%60)))"
+               uptime="$(printf '%02dh:%02dm:%02ds\n' $((uptime/3600)) $((uptime%3600/60)) $((uptime%60)))"
+               result="$(mwan3_get_iface_hotplug_state $1) $online, uptime $uptime"
+       elif [ $error -gt 0 ] && [ $error -ne 31 ]; then
+               result="error (${error})"
+       elif [ "$enabled" = "1" ]; then
+               result="offline"
+       else
+               result="disabled"
+       fi
+
+       tracking="$(mwan3_get_mwan3track_status $1)"
+       echo " interface $1 is $result and tracking is $tracking"
+}
+
+mwan3_report_policies()
+{
+       local ipt="$1"
+       local policy="$2"
+
+       local percent total_weight weight iface
+
+       total_weight=$($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
+
+       if [ -n "${total_weight##*[!0-9]*}" ]; then
+               for iface in $($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '{print $1}'); do
+                       weight=$($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
+                       percent=$((weight*100/total_weight))
+                       echo " $iface ($percent%)"
+               done
+       else
+               echo " $($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
+       fi
+}
+
+mwan3_report_policies_v4()
+{
+       local policy
+
+       for policy in $($IPT4 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               echo "$policy:" | sed 's/mwan3_policy_//'
+               mwan3_report_policies "$IPT4" "$policy"
+       done
+}
+
+mwan3_report_policies_v6()
+{
+       local policy
+
+       for policy in $($IPT6 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               echo "$policy:" | sed 's/mwan3_policy_//'
+               mwan3_report_policies "$IPT6" "$policy"
+       done
+}
+
+mwan3_report_connected_v4()
+{
+       if [ -n "$($IPT4 -S mwan3_connected_ipv4 2> /dev/null)" ]; then
+               $IPS -o save list mwan3_connected_ipv4 | grep add | cut -d " " -f 3
+       fi
+}
+
+mwan3_report_connected_v6()
+{
+       if [ -n "$($IPT6 -S mwan3_connected_ipv6 2> /dev/null)" ]; then
+               $IPS -o save list mwan3_connected_ipv6 | grep add | cut -d " " -f 3
+       fi
+}
+
+mwan3_report_rules_v4()
+{
+       if [ -n "$($IPT4 -S mwan3_rules 2> /dev/null)" ]; then
+               $IPT4 -L mwan3_rules -n -v 2> /dev/null | tail -n+3 | sed 's/mark.*//' | sed 's/mwan3_policy_/- /' | sed 's/mwan3_rule_/S /'
+       fi
+}
+
+mwan3_report_rules_v6()
+{
+       if [ -n "$($IPT6 -S mwan3_rules 2> /dev/null)" ]; then
+               $IPT6 -L mwan3_rules -n -v 2> /dev/null | tail -n+3 | sed 's/mark.*//' | sed 's/mwan3_policy_/- /' | sed 's/mwan3_rule_/S /'
+       fi
+}
+
+mwan3_flush_conntrack()
+{
+       local interface="$1"
+       local action="$2"
+
+       handle_flush() {
+               local flush_conntrack="$1"
+               local action="$2"
+
+               if [ "$action" = "$flush_conntrack" ]; then
+                       echo f > ${CONNTRACK_FILE}
+                       LOG info "Connection tracking flushed for interface '$interface' on action '$action'"
+               fi
+       }
+
+       if [ -e "$CONNTRACK_FILE" ]; then
+               config_list_foreach "$interface" flush_conntrack handle_flush "$action"
+       fi
+}
+
+mwan3_track_clean()
+{
+       rm -rf "${MWAN3_STATUS_DIR:?}/${1}" &> /dev/null
+       rmdir --ignore-fail-on-non-empty "$MWAN3_STATUS_DIR"
+}
diff --git a/package/network/config/mwan3/files/usr/libexec/rpcd/mwan3 b/package/network/config/mwan3/files/usr/libexec/rpcd/mwan3
new file mode 100755 (executable)
index 0000000..3fce9b0
--- /dev/null
@@ -0,0 +1,232 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /usr/share/libubox/jshn.sh
+. /lib/mwan3/common.sh
+
+report_connected_v4() {
+       local address
+
+       if [ -n "$($IPT4 -S mwan3_connected_ipv4 2> /dev/null)" ]; then
+               for address in $($IPS -o save list mwan3_connected_ipv4 | grep add | cut -d " " -f 3); do
+                       json_add_string "" "${address}"
+               done
+       fi
+}
+
+report_connected_v6() {
+       [ $NO_IPV6 -ne 0 ] && return
+       local address
+
+       if [ -n "$($IPT6 -S mwan3_connected_ipv6 2> /dev/null)" ]; then
+               for address in $($IPS -o save list mwan3_connected_ipv6 | grep add | cut -d " " -f 3); do
+                       json_add_string "" "${address}"
+               done
+       fi
+}
+
+report_policies() {
+       local ipt="$1"
+       local policy="$2"
+
+       local percent total_weight weight iface
+
+       total_weight=$($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
+
+       for iface in $($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '{print $1}'); do
+               weight=$($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
+               percent=$(($weight*100/$total_weight))
+               json_add_object
+               json_add_string interface "$iface"
+               json_add_int percent "$percent"
+               json_close_object
+       done
+}
+
+report_policies_v4() {
+       local policy
+
+       for policy in $($IPT4 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               json_add_array "${policy##*mwan3_policy_}"
+               report_policies "$IPT4" "$policy"
+               json_close_array
+       done
+}
+
+report_policies_v6() {
+       [ $NO_IPV6 -ne 0 ] && return
+       local policy
+
+       for policy in $($IPT6 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               json_add_array "${policy##*mwan3_policy_}"
+               report_policies "$IPT6" "$policy"
+               json_close_array
+       done
+}
+
+get_age() {
+       local time_p time_u
+       iface="$1"
+       time_p="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TIME")"
+       [ -z "${time_p}" ] || {
+               time_n="$(get_uptime)"
+               echo $((time_n-time_p))
+       }
+}
+
+get_offline_time() {
+       local time_n time_d iface
+       iface="$1"
+       time_d="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/OFFLINE")"
+       [ -z "${time_d}" ] || [ "${time_d}" = "0" ] || {
+               time_n="$(get_uptime)"
+               echo $((time_n-time_d))
+       }
+}
+
+get_mwan3_status() {
+       local iface="${1}"
+       local iface_select="${2}"
+       local running="0"
+       local age=0
+       local online=0
+       local offline=0
+       local enabled time_p time_n time_u time_d status track_status up uptime
+
+       if [ "${iface}" != "${iface_select}" ] && [ "${iface_select}" != "" ]; then
+               return
+       fi
+
+       track_status="$(mwan3_get_mwan3track_status "$1")"
+       [ "$track_status" = "active" ] && running="1"
+       age=$(get_age "$iface")
+       online=$(get_online_time "$iface")
+       offline=$(get_offline_time "$iface")
+
+       config_get enabled "$iface" enabled 0
+
+       if [ -d "${MWAN3_STATUS_DIR}" ]; then
+               network_get_uptime uptime "$iface"
+               network_is_up "$iface" && up="1"
+               if [ -f "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS" ]; then
+                       status="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS")"
+               else
+                       status="notracking"
+               fi
+       else
+               uptime=0
+               up=0
+               status="unknown"
+       fi
+
+       json_add_object "${iface}"
+       json_add_int age "$age"
+       json_add_int online "${online}"
+       json_add_int offline "${offline}"
+       json_add_int uptime "${uptime}"
+       json_add_int "score" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/SCORE")"
+       json_add_int "lost" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOST")"
+       json_add_int "turn" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TURN")"
+       json_add_string "status" "${status}"
+       json_add_boolean "enabled" "${enabled}"
+       json_add_boolean "running" "${running}"
+       json_add_boolean "up" "${up}"
+       json_add_array "track_ip"
+       for file in $MWAN3TRACK_STATUS_DIR/${iface}/TRACK_*; do
+               [ -z "${file#*/TRACK_OUTPUT}" ] && continue
+               [ -z "${file#*/TRACK_\*}" ] && continue
+               track="${file#*/TRACK_}"
+               json_add_object
+               json_add_string ip "${track}"
+               json_add_string status "$(cat "${file}")"
+               json_add_int latency "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LATENCY_${track}")"
+               json_add_int packetloss "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOSS_${track}")"
+               json_close_object
+       done
+       json_close_array
+       json_close_object
+}
+
+main () {
+
+       case "$1" in
+               list)
+                       json_init
+                       json_add_object "status"
+                       json_add_string "section" "x"
+                       json_add_string "interface" "x"
+                       json_add_string "policies" "x"
+                       json_close_object
+                       json_dump
+                       ;;
+               call)
+                       case "$2" in
+                       status)
+                               local section iface
+                               read input;
+                               json_load "$input"
+                               json_get_var section section
+                               json_get_var iface interface
+
+                               config_load mwan3
+                               json_init
+                               case "$section" in
+                                       interfaces)
+                                               json_add_object interfaces
+                                               config_foreach get_mwan3_status interface "${iface}"
+                                               json_close_object
+                                               ;;
+                                       connected)
+                                               json_add_object connected
+                                               json_add_array ipv4
+                                               report_connected_v4
+                                               json_close_array
+                                               json_add_array ipv6
+                                               report_connected_v6
+                                               json_close_array
+                                               json_close_object
+                                               ;;
+                                       policies)
+                                               json_add_object policies
+                                               json_add_object ipv4
+                                               report_policies_v4
+                                               json_close_object
+                                               json_add_object ipv6
+                                               report_policies_v6
+                                               json_close_object
+                                               json_close_object
+                                               ;;
+                                       *)
+                                               # interfaces
+                                               json_add_object interfaces
+                                               config_foreach get_mwan3_status interface
+                                               json_close_object
+                                               # connected
+                                               json_add_object connected
+                                               json_add_array ipv4
+                                               report_connected_v4
+                                               json_close_array
+                                               json_add_array ipv6
+                                               report_connected_v6
+                                               json_close_array
+                                               json_close_object
+                                               # policies
+                                               json_add_object policies
+                                               json_add_object ipv4
+                                               report_policies_v4
+                                               json_close_object
+                                               json_add_object ipv6
+                                               report_policies_v6
+                                               json_close_object
+                                               json_close_object
+                                               ;;
+                               esac
+                               json_dump
+                               ;;
+                       esac
+                       ;;
+       esac
+}
+
+main "$@"
diff --git a/package/network/config/mwan3/files/usr/sbin/mwan3 b/package/network/config/mwan3/files/usr/sbin/mwan3
new file mode 100755 (executable)
index 0000000..ea3d4c6
--- /dev/null
@@ -0,0 +1,253 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+command_help() {
+       local cmd="$1"
+       local help="$2"
+
+       echo "$(printf "%-25s%s" "${cmd}" "${help}")"
+}
+
+help()
+{
+       cat <<EOF
+Syntax: mwan3 [command]
+
+Available commands:
+EOF
+       command_help "start" "Load iptables rules, ip rules and ip routes"
+       command_help "stop" "Unload iptables rules, ip rules and ip routes"
+       command_help "restart" "Reload iptables rules, ip rules and ip routes"
+       command_help "ifup <iface>" "Load rules and routes for specific interface"
+       command_help "ifdown <iface>" "Unload rules and routes for specific interface"
+       command_help "interfaces" "Show interfaces status"
+       command_help "policies" "Show currently active policy"
+       command_help "connected" "Show directly connected networks"
+       command_help "rules" "Show active rules"
+       command_help "status" "Show all status"
+       command_help "internal <ipv4|ipv6>" "Show internal configuration <default: ipv4>"
+       command_help "use <iface> <cmd>" "Run a command bound to <iface> and avoid mwan3 rules"
+}
+
+ifdown() {
+       if [ -z "$1" ]; then
+               echo "Error: Expecting interface. Usage: mwan3 ifdown <interface>"
+               exit 0
+       fi
+
+       if [ -n "$2" ]; then
+               echo "Error: Too many arguments. Usage: mwan3 ifdown <interface>"
+               exit 0
+       fi
+
+       mwan3_interface_hotplug_shutdown "$1" 1
+}
+
+ifup() {
+       . /etc/init.d/mwan3
+
+       if [ -z "$1" ]; then
+               echo "Expecting interface. Usage: mwan3 ifup <interface>"
+               exit 0
+       fi
+
+       if [ -n "$2" ]; then
+               echo "Too many arguments. Usage: mwan3 ifup <interface>"
+               exit 0
+       fi
+
+       mwan3_ifup "$1" "cmd"
+}
+
+interfaces()
+{
+       config_load mwan3
+
+       echo "Interface status:"
+       config_foreach mwan3_report_iface_status interface
+       echo
+}
+
+policies()
+{
+       echo "Current ipv4 policies:"
+       mwan3_report_policies_v4
+       echo
+       [ $NO_IPV6 -ne 0 ] && return
+       echo "Current ipv6 policies:"
+       mwan3_report_policies_v6
+       echo
+}
+
+connected()
+{
+       echo "Directly connected ipv4 networks:"
+       mwan3_report_connected_v4
+       echo
+       [ $NO_IPV6 -ne 0 ] && return
+       echo "Directly connected ipv6 networks:"
+       mwan3_report_connected_v6
+       echo
+}
+
+rules()
+{
+       echo "Active ipv4 user rules:"
+       mwan3_report_rules_v4
+       echo
+       [ $NO_IPV6 -ne 0 ] && return
+       echo "Active ipv6 user rules:"
+       mwan3_report_rules_v6
+       echo
+}
+
+status()
+{
+       interfaces
+       policies
+       connected
+       rules
+}
+
+internal()
+{
+       local family="$1"
+       local dash="-------------------------------------------------"
+
+       if [ -f "/etc/openwrt_release" ]; then
+               . /etc/openwrt_release
+       fi
+
+       local ipt ip output
+
+       if [ "$family" = "ipv6" ]; then
+               ipt="$IPT6"
+               ip="$IP6"
+       else
+               ipt="$IPT4"
+               ip="$IP4"
+       fi
+
+       echo "Software-Version"
+       echo "$dash"
+
+       if [ "$DISTRIB_RELEASE" != "" ]; then
+               echo "OpenWrt - $DISTRIB_RELEASE"
+       else
+               echo "OpenWrt - unknown"
+       fi
+
+       echo ""
+       echo "Output of \"$ip a show\""
+       echo "$dash"
+       output="$($ip a show)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+
+       echo ""
+       echo "Output of \"$ip route show\""
+       echo "$dash"
+       output="$($ip route show)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+
+       echo ""
+       echo "Output of \"$ip rule show\""
+       echo "$dash"
+       output="$($ip rule show)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+
+       echo ""
+       echo "Output of \"$ip route list table 1-250\""
+       echo "$dash"
+       local dump=0
+       for i in $(seq 1 250); do
+               output=$($ip route list table $i 2>/dev/null)
+               if [ "$output" != "" ];then
+                       dump=1
+                       echo "Routing table $i:"
+                       echo "$output"
+                       echo ""
+               fi
+       done
+       if [ "$dump" = "0" ]; then
+               echo "No data found"
+               echo ""
+       fi
+
+       echo "Output of \"$ipt -L -v -n\""
+       echo "$dash"
+       output="$($ipt -L -v -n)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+}
+
+start() {
+       /etc/init.d/mwan3 enable
+       /etc/init.d/mwan3 start
+}
+
+stop() {
+       /etc/init.d/mwan3 disable
+       /etc/init.d/mwan3 stop
+}
+
+restart() {
+       /etc/init.d/mwan3 enable
+       /etc/init.d/mwan3 stop
+       /etc/init.d/mwan3 start
+}
+
+use() {
+       # Run a command with the device, src_ip and fwmark set to avoid processing by mwan3
+       # firewall rules
+
+       local interface device src_ip family
+       mwan3_init
+
+       interface=$1 ; shift
+       [ -z "$*" ] && echo "no command specified for mwan3 use" && return
+       network_get_device device $interface
+       [ -z "$device" ] && echo "could not find device for $interface" && return
+
+       mwan3_get_src_ip src_ip $interface
+       [ -z "$src_ip" ] && echo "could not find src_ip for $interface" && return
+
+       config_get family $interface family
+       [ -z "$family" ] && echo "could not find family for $interface. Using ipv4." && family='ipv4'
+
+       echo "Running '$*' with DEVICE=$device SRCIP=$src_ip FWMARK=$MMX_DEFAULT FAMILY=$family"
+       # shellcheck disable=SC2048
+       FAMILY=$family DEVICE=$device SRCIP=$src_ip FWMARK=$MMX_DEFAULT LD_PRELOAD=/lib/mwan3/libwrap_mwan3_sockopt.so.1.0 $*
+
+}
+
+case "$1" in
+       ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart|use|internal)
+               mwan3_init
+               # shellcheck disable=SC2048
+               $*
+       ;;
+       *)
+               help
+       ;;
+esac
+
+exit 0
diff --git a/package/network/config/mwan3/files/usr/sbin/mwan3rtmon b/package/network/config/mwan3/files/usr/sbin/mwan3rtmon
new file mode 100755 (executable)
index 0000000..d8ccffe
--- /dev/null
@@ -0,0 +1,172 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+trap_with_arg()
+{
+       func="$1" ; shift
+       pid="$1" ; shift
+       for sig ; do
+               # shellcheck disable=SC2064
+               trap "$func $sig $pid" "$sig"
+       done
+}
+
+func_trap()
+{
+       kill -${1} ${2} 2>/dev/null
+}
+
+mwan3_add_all_routes()
+{
+       local tid IP IPT route_line family active_tbls tid initial_state error
+       local ipv=$1
+
+       add_active_tbls()
+       {
+               let tid++
+               config_get family "$1" family ipv4
+               config_get initial_state "$1" initial_state "online"
+               [ "$family" != "$ipv" ] && return
+               if $IPT -S "mwan3_iface_in_$1" &> /dev/null; then
+                       active_tbls="$active_tbls${tid} "
+               fi
+       }
+
+       add_route()
+       {
+               let tid++
+               [ -n "${active_tbls##* $tid *}" ] && return
+               error=$($IP route add table $tid $route_line 2>&1) ||
+                       LOG warn "failed to add $route_line to table $tid - error: $error"
+       }
+
+       mwan3_update_dev_to_table
+       [ "$ipv" = "ipv6" ] && [ $NO_IPV6 -ne 0 ] && return
+       if [ "$ipv" = "ipv4" ]; then
+               IP="$IP4"
+               IPT="$IPT4"
+       elif [ "$ipv" = "ipv6" ]; then
+               IP="$IP6"
+               IPT="$IPT6"
+       fi
+       tid=0
+       active_tbls=" "
+       config_foreach add_active_tbls interface
+       [ "$active_tbls" = " " ] && return
+       mwan3_get_routes | while read -r route_line; do
+               mwan3_route_line_dev "tid" "$route_line" "$ipv"
+               if [ -n "$tid" ] && [ -z "${active_tbls##* $tid *}" ]; then
+                       $IP route add table $tid $route_line
+               elif [ -n "${route_line##default*}" ] && [ -n "${route_line##fe80::/64*}" ]; then
+                       config_foreach add_route interface
+               fi
+       done
+}
+
+mwan3_rtmon_route_handle()
+{
+       local action route_line family tbl device line tid
+
+       route_line=${1##"Deleted "}
+       route_family=$2
+
+       if [ "$route_line" = "$1" ]; then
+               action="replace"
+               $IPS -! add mwan3_connected_${route_family} ${route_line%% *}
+       else
+               action="del"
+               mwan3_set_connected_${route_family}
+       fi
+
+       if [ -z "${route_line##*linkdown*}" ]; then
+               LOG debug "attempting to add link on down interface - $route_line"
+       fi
+
+       if [ "$route_family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$route_family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IP="$IP6"
+       else
+               LOG warn "route update called with invalid family - $route_family"
+               return
+       fi
+       route_line=$(echo "$route_line" | sed -ne "$MWAN3_ROUTE_LINE_EXP")
+
+       handle_route() {
+               local error
+               local iface=$1
+               tbl=$($IP route list table $tid 2>/dev/null)$'\n'
+
+               if [ -n "$iface" ] && [ "$(mwan3_get_mwan3track_status $iface)" != "active" ]; then
+                       LOG debug "interface $iface is disabled - skipping '$route_line'";
+                       return
+               fi
+
+               # check that action needs to be performed. May not need to take action if we
+               # got a delete event, but table was already flushed
+               if [ $action = "del" ] && [ -n "${tbl##*$route_line$'\n'*}" ]; then
+                       LOG debug "skipping already deleted route table $tid - skipping '$route_line'"
+                       return
+               fi
+
+               network_get_device device "$iface"
+               LOG debug "adjusting route $device: '$IP route $action table $tid $route_line'"
+               error=$($IP route "$action" table $tid $route_line 2>&1)||
+                       LOG warn "failed: '$IP route $action table $tid $route_line' - error: $error"
+       }
+       handle_route_cb(){
+               local iface=$1
+               let tid++
+               config_get family "$iface" family ipv4
+               [ "$family" != "$route_family" ] && return
+               handle_route "$iface"
+       }
+
+       mwan3_update_dev_to_table
+       mwan3_route_line_dev "tid" "$route_line" "$route_family"
+
+       if [ -n "$tid" ]; then
+               handle_route
+       elif [ -n "${route_line##default*}" ] && [ -n "${route_line##fe80::/64*}" ]; then
+               config_foreach handle_route_cb interface
+       fi
+}
+
+main()
+{
+       local IP family
+
+       mwan3_init
+
+       family=$1
+       [ -z $family ] && family=ipv4
+       if [ "$family" = "ipv6" ]; then
+               if [ $NO_IPV6 -ne 0 ]; then
+                       LOG warn "mwan3rtmon started for ipv6, but ipv6 not enabled on system"
+                       exit 1
+               fi
+               IP="$IP6"
+       else
+               IP="$IP4"
+       fi
+       sh -c "echo \$\$; exec $IP monitor route" | {
+               read -r monitor_pid
+               trap_with_arg func_trap "$monitor_pid" SIGINT SIGTERM SIGKILL
+               KILL -SIGSTOP $$
+               while IFS='' read -r line; do
+                       [ -z "${line##*table*}" ] && continue
+                       LOG debug "handling route update $family '$line'"
+                       mwan3_rtmon_route_handle "$line" "$family"
+               done
+       } &
+       child=$!
+       trap_with_arg func_trap "$child" SIGINT SIGTERM SIGKILL
+       mwan3_set_connected_${family}
+       mwan3_add_all_routes ${family}
+       kill -SIGCONT $child
+       wait $child
+}
+main "$@"
diff --git a/package/network/config/mwan3/files/usr/sbin/mwan3track b/package/network/config/mwan3/files/usr/sbin/mwan3track
new file mode 100755 (executable)
index 0000000..162bdbb
--- /dev/null
@@ -0,0 +1,413 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/common.sh
+
+INTERFACE=""
+DEVICE=""
+
+IFDOWN_EVENT=0
+IFUP_EVENT=0
+
+stop_subprocs() {
+       [ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" && unset SLEEP_PID
+       [ -n "$TRACK_PID" ] && kill "$TRACK_PID" && unset TRACK_PID
+}
+
+WRAP() {
+       # shellcheck disable=SC2048
+       FAMILY=$FAMILY DEVICE=$DEVICE SRCIP=$SRC_IP FWMARK=$MMX_DEFAULT LD_PRELOAD=/lib/mwan3/libwrap_mwan3_sockopt.so.1.0 $*
+}
+
+clean_up() {
+       LOG notice "Stopping mwan3track for interface \"${INTERFACE}\". Status was \"${STATUS}\""
+       stop_subprocs
+       exit 0
+}
+
+if_down() {
+       LOG info "Detect ifdown event on interface ${INTERFACE} (${DEVICE})"
+       IFDOWN_EVENT=1
+       stop_subprocs
+}
+
+if_up() {
+       LOG info "Detect ifup event on interface ${INTERFACE} (${DEVICE})"
+       IFDOWN_EVENT=0
+       IFUP_EVENT=1
+       STARTED=1
+       stop_subprocs
+}
+
+ping_test_host() {
+       if [ "$FAMILY" = "ipv6" ]; then
+               echo "::1"
+       else
+               echo "127.0.0.1"
+       fi
+}
+
+get_ping_command() {
+       if [ -x "/usr/bin/ping" ] && /usr/bin/ping -${FAMILY#ipv} -c1 -q $(ping_test_host) &>/dev/null; then
+               # -4 option added in iputils c3e68ac6 so need to check if we can use it
+               # or if we must use ping and ping6
+               echo "/usr/bin/ping -${FAMILY#ipv}"
+       elif [ "$FAMILY" = "ipv6" ] && [ -x "/usr/bin/ping6" ]; then
+               echo "/usr/bin/ping6"
+       elif [ "$FAMILY" = "ipv4" ] && [ -x "/usr/bin/ping" ]; then
+               echo "/usr/bin/ping"
+       elif [ -x "/bin/ping" ]; then
+               echo "/bin/ping -${FAMILY#ipv}"
+       else
+               return 1
+       fi
+}
+
+validate_track_method() {
+       case "$1" in
+               ping)
+                       PING=$(get_ping_command)
+                       if [ $? -ne 0 ]; then
+                               LOG warn "Missing ping. Please enable BUSYBOX_DEFAULT_PING and recompile busybox or install iputils-ping package."
+                               return 1
+                       fi
+                       ;;
+               arping)
+                       command -v arping 1>/dev/null 2>&1 || {
+                               LOG warn "Missing arping. Please install iputils-arping package."
+                               return 1
+                       }
+                       ;;
+               httping)
+                       command -v httping 1>/dev/null 2>&1 || {
+                               LOG warn "Missing httping. Please install httping package."
+                               return 1
+                       }
+                       ;;
+               nping-*)
+                       command -v nping 1>/dev/null 2>&1 || {
+                               LOG warn "Missing nping. Please install nping package."
+                               return 1
+                       }
+                       ;;
+               *)
+                       LOG warn "Unsupported tracking method: $track_method"
+                       return 2
+                       ;;
+       esac
+}
+
+validate_wrap() {
+       [ -x /lib/mwan3/libwrap_mwan3_sockopt.so.1.0 ] && return
+       LOG error "Missing libwrap_mwan3_sockopt. Please reinstall mwan3." &&
+               exit 1
+}
+
+disconnected() {
+       local status="$(cat ${MWAN3TRACK_STATUS_DIR}/${INTERFACE}/STATUS)"
+
+       STATUS='offline'
+       echo "offline" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+       get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/OFFLINE
+       echo "0" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/ONLINE
+       score=0
+       [ "$1" = 1 ] && return
+
+       # Only execute disconnectd action if status was online or disconnecting
+       if [ "$status" = "online" ] || [ "$status" = "disconnecting" ]; then
+               LOG notice "Interface $INTERFACE ($DEVICE) is offline"
+               env -i ACTION="disconnected" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+       else
+               LOG notice "Skip disconnected event for $INTERFACE ($DEVICE)"
+       fi
+}
+
+connected() {
+       STATUS='online'
+       echo "online" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+       echo "0" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/OFFLINE
+       get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/ONLINE
+       score=$((down+up))
+       host_up_count=0
+       lost=0
+       turn=0
+       loss=0
+       LOG notice "Interface $INTERFACE ($DEVICE) is online"
+       env -i FIRSTCONNECT=$1 ACTION="connected" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+}
+
+disconnecting() {
+       if [ "$STATUS" != "disconnecting" ] ; then
+               STATUS="disconnecting"
+               echo "disconnecting" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+               LOG notice "Interface $INTERFACE ($DEVICE) is disconnecting"
+               env -i ACTION="disconnecting" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+       fi
+}
+
+connecting() {
+       if [ "$STATUS" != "connecting" ] ; then
+               STATUS="connecting"
+               echo "connecting" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+               LOG notice "Interface $INTERFACE ($DEVICE) is connecting"
+               env -i ACTION="connecting" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+       fi
+}
+
+disabled() {
+       STATUS='disabled'
+       echo "disabled" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+       STARTED=0
+}
+
+firstconnect() {
+       local true_iface
+       network_flush_cache
+
+       mwan3_get_true_iface true_iface $INTERFACE
+       network_get_device DEVICE $true_iface
+
+       if [ "$STATUS" != "online" ]; then
+               config_get STATUS $INTERFACE initial_state "online"
+       fi
+
+       if ! network_is_up $true_iface || [ -z "$DEVICE" ]; then
+               disabled
+               return
+       fi
+
+       mwan3_get_src_ip SRC_IP $INTERFACE
+
+       LOG debug "firstconnect: called on $INTERFACE/$true_iface ($DEVICE). Status is $STATUS. SRC_IP is $SRC_IP"
+
+       STARTED=1
+       if [ "$STATUS" = "offline" ]; then
+               disconnected 1
+       else
+               connected 1
+       fi
+}
+
+update_status() {
+       local track_ip=$1
+
+       echo "$2" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_${track_ip}
+       [ -z "$3" ] && return
+       echo "$3" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/LATENCY_${track_ip}
+       echo "$4" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/LOSS_${track_ip}
+}
+
+main() {
+       local reliability count timeout interval failure_interval
+       local recovery_interval down up size
+       local keep_failure_interval check_quality failure_latency
+       local recovery_latency failure_loss recovery_loss
+
+       local max_ttl httping_ssl track_ips do_log
+
+       INTERFACE=$1
+       STATUS=""
+       STARTED=0
+       TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT
+
+       mwan3_init
+
+       mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
+
+       trap clean_up TERM
+       trap if_down USR1
+       trap if_up USR2
+
+       config_get FAMILY $INTERFACE family ipv4
+       config_get track_method $INTERFACE track_method ping
+       config_get_bool httping_ssl $INTERFACE httping_ssl 0
+       validate_track_method $track_method || {
+               track_method=ping
+               if validate_track_method $track_method; then
+                       LOG warn "Using ping to track interface $INTERFACE avaliability"
+               else
+                       LOG err "No track method avaliable"
+                       exit 1
+               fi
+       }
+       config_get reliability $INTERFACE reliability 1
+       config_get count $INTERFACE count 1
+       config_get timeout $INTERFACE timeout 4
+       config_get interval $INTERFACE interval 10
+       config_get down $INTERFACE down 5
+       config_get up $INTERFACE up 5
+       config_get size $INTERFACE size 56
+       config_get max_ttl $INTERFACE max_ttl 60
+       config_get failure_interval $INTERFACE failure_interval $interval
+       config_get_bool keep_failure_interval $INTERFACE keep_failure_interval 0
+       config_get recovery_interval $INTERFACE recovery_interval $interval
+       config_get_bool check_quality $INTERFACE check_quality 0
+       config_get failure_latency $INTERFACE failure_latency 1000
+       config_get recovery_latency $INTERFACE recovery_latency 500
+       config_get failure_loss $INTERFACE failure_loss 40
+       config_get recovery_loss $INTERFACE recovery_loss 10
+       local sleep_time result ping_status loss latency
+       mwan3_list_track_ips()
+       {
+               track_ips="$track_ips $1"
+       }
+       config_list_foreach "$1" track_ip mwan3_list_track_ips
+
+       local score=$((down+up))
+       local host_up_count=0
+       local lost=0
+       local turn=0
+
+       firstconnect
+       while true; do
+               [ $STARTED -eq 0 ] && { sleep $MAX_SLEEP & SLEEP_PID=$!; wait; }
+               unset SLEEP_PID
+               sleep_time=$interval
+               for track_ip in $track_ips; do
+                       if [ $host_up_count -lt $reliability ]; then
+                               case "$track_method" in
+                                       ping)
+                                               if [ $check_quality -eq 0 ]; then
+                                                       WRAP $PING -n -c $count -W $timeout -s $size -t $max_ttl -q $track_ip &> /dev/null &
+                                                       TRACK_PID=$!
+                                                       wait $TRACK_PID
+                                                       result=$?
+                                               else
+                                                       WRAP $PING -n -c $count -W $timeout -s $size -t $max_ttl -q $track_ip 2>/dev/null > $TRACK_OUTPUT &
+                                                       TRACK_PID=$!
+                                                       wait $TRACK_PID
+                                                       ping_status=$?
+                                                       loss="$(sed $TRACK_OUTPUT -ne 's/.*\([0-9]\+\)% packet loss.*/\1/p')"
+                                                       if [ "$ping_status" -ne 0 ] || [ "$loss" -eq 100 ]; then
+                                                               latency=999999
+                                                               loss=100
+                                                       else
+                                                               latency="$(sed $TRACK_OUTPUT -ne 's%\(rtt\|round-trip\).* = [^/]*/\([0-9]\+\).*%\2%p')"
+                                                       fi
+                                               fi
+                                       ;;
+                                       arping)
+                                               WRAP arping -I $DEVICE -c $count -w $timeout -q $track_ip &> /dev/null &
+                                               TRACK_PID=$!
+                                               wait $TRACK_PID
+                                               result=$?
+                                       ;;
+                                       httping)
+                                               if [ "$httping_ssl" -eq 1 ]; then
+                                                       WRAP httping -c $count -t $timeout -q "https://$track_ip" &> /dev/null &
+                                               else
+                                                       WRAP httping -c $count -t $timeout -q "http://$track_ip" &> /dev/null &
+                                               fi
+                                               TRACK_PID=$!
+                                               wait $TRACK_PID
+                                               result=$?
+                                       ;;
+                                       nping-*)
+                                               WRAP nping -c $count $track_ip --${FAMILY#nping-} > $TRACK_OUTPUT &
+                                               TRACK_PID=$!
+                                               wait $TRACK_PID
+                                               result=$(grep $TRACK_OUTPUT Lost | awk '{print $12}')
+                                       ;;
+                               esac
+                               do_log=""
+                               if [ $check_quality -eq 0 ]; then
+                                       if [ $result -eq 0 ]; then
+                                               let host_up_count++
+                                               update_status "$track_ip" "up"
+
+                                               [ $score -le $up ] && do_log="success"
+                                       else
+                                               let lost++
+                                               update_status "$track_ip" "down"
+
+                                               [ $score -gt $up ] && do_log="failed"
+                                       fi
+                                       [ -n "$do_log" ] && LOG info "Check ($track_method) ${do_log} for target \"$track_ip\" on interface $INTERFACE ($DEVICE). Current score: $score"
+
+                               else
+                                       if [ "$loss" -ge "$failure_loss" ] || [ "$latency" -ge "$failure_latency" ]; then
+                                               let lost++
+                                               update_status "$track_ip" "down" $latency $loss
+
+                                               [ $score -gt $up ] && do_log="failed"
+                                       elif [ "$loss" -le "$recovery_loss" ] && [ "$latency" -le "$recovery_latency" ]; then
+                                               let host_up_count++
+                                               update_status "$track_ip" "up" $latency $loss
+
+                                               [ $score -le $up ] && do_log="success"
+                                       else
+                                               echo "skipped" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_${track_ip}
+                                       fi
+                                       [ -n "$do_log" ] && LOG info "Check (${track_method}: latency=${latency}ms loss=${loss}%) ${do_log} for target \"$track_ip\" on interface $INTERFACE ($DEVICE). Current score: $score"
+                               fi
+                       else
+                               echo "skipped" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_${track_ip}
+                       fi
+               done
+
+               if [ $host_up_count -lt $reliability ]; then
+                       let score--
+
+                       if [ $score -lt $up ]; then
+                               score=0
+                               [ ${keep_failure_interval} -eq 1 ] && sleep_time=$failure_interval
+                       elif [ $score -eq $up ]; then
+                               disconnecting
+                               sleep_time=$failure_interval
+                               disconnected
+                       elif [ $score -gt $up ]; then
+                               disconnecting
+                               sleep_time=$failure_interval
+                       fi
+               else
+                       if [ $score -lt $((down+up)) ] && [ $lost -gt 0 ]; then
+                               LOG info "Lost $((lost*count)) ping(s) on interface $INTERFACE ($DEVICE). Current score: $score"
+                       fi
+
+                       let score++
+                       lost=0
+
+                       if [ $score -lt $up ]; then
+                               connecting
+                               sleep_time=$recovery_interval
+                       elif [ $score -eq $up ]; then
+                               connecting
+                               sleep_time=$recovery_interval
+                               connected
+                       elif [ $score -gt $up ]; then
+                               echo "online" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+                               score=$((down+up))
+                       fi
+               fi
+
+               let turn++
+               mkdir -p "$MWAN3TRACK_STATUS_DIR/${1}"
+               echo "${lost}" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/LOST
+               echo "${score}" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/SCORE
+               echo "${turn}" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TURN
+               get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TIME
+
+               host_up_count=0
+               if [ "${IFDOWN_EVENT}" -eq 0 ] && [ "${IFUP_EVENT}" -eq 0 ]; then
+                       sleep "${sleep_time}" &
+                       SLEEP_PID=$!
+                       wait
+                       unset SLEEP_PID
+               fi
+
+               if [ "${IFDOWN_EVENT}" -eq 1 ]; then
+                       LOG debug "Register ifdown event on interface ${INTERFACE} (${DEVICE})"
+                       disconnected
+                       disabled
+                       IFDOWN_EVENT=0
+               fi
+               if [ "${IFUP_EVENT}" -eq 1 ]; then
+                       LOG debug "Register ifup event on interface ${INTERFACE} (${DEVICE})"
+                       firstconnect
+                       IFUP_EVENT=0
+               fi
+       done
+}
+
+main "$@"
diff --git a/package/network/config/mwan3/src/sockopt_wrap.c b/package/network/config/mwan3/src/sockopt_wrap.c
new file mode 100644 (file)
index 0000000..695e575
--- /dev/null
@@ -0,0 +1,255 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Aaron Goodman <aaronjg@alumni.stanford.edu>. All Rights Reserved.
+ */
+
+/*
+ * sockopt_wrap.c provides a shared library that intercepts syscalls to various
+ * networking functions to bind the sockets a source IP address and network device
+ * and to set the firewall mark on otugoing packets. Parameters are set using the
+ * DEVICE, SRCIP, FWMARK environment variables.
+ *
+ *  Additionally the FAMILY environment variable can be set to either 'ipv4' or
+ *  'ipv6' to cause sockets opened with ipv6 or ipv4 to fail, respectively.
+ *
+ *  Each environment variable is optional, and if not set, the library will not
+ *  enforce the particular parameter.
+ */
+
+#define _GNU_SOURCE
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <net/ethernet.h>
+#include <linux/if_packet.h>
+#include <net/if.h>
+
+static int (*next_socket)(int domain, int type, int protocol);
+static int (*next_setsockopt)(int sockfd, int level, int optname,
+                              const void *optval, socklen_t optlen);
+static int (*next_bind)(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+static int (*next_close)(int fd);
+static ssize_t (*next_send)(int sockfd, const void *buf, size_t len, int flags);
+static ssize_t (*next_sendto)(int sockfd, const void *buf, size_t len, int flags,
+                              const struct sockaddr *dest_addr, socklen_t addrlen);
+static ssize_t (*next_sendmsg)(int sockfd, const struct msghdr *msg, int flags);
+static int (*next_connect)(int sockfd, const struct sockaddr *addr,
+                           socklen_t addrlen);
+static int device=0;
+static struct sockaddr_in source4 = {0};
+#ifdef CONFIG_IPV6
+static struct sockaddr_in6 source6 = {0};
+#endif
+static struct sockaddr * source = 0;
+static int sockaddr_size = 0;
+static int is_bound [1024] = {0};
+
+#define next_func(x)\
+void set_next_##x(){\
+       if (next_##x) return;\
+       next_##x = dlsym(RTLD_NEXT, #x);\
+       dlerror_handle();\
+       return;\
+}
+
+void dlerror_handle()
+{
+       char *msg;
+       if ((msg = dlerror()) != NULL) {
+               fprintf(stderr, "socket: dlopen failed : %s\n", msg);
+               fflush(stderr);
+               exit(EXIT_FAILURE);
+       }
+}
+
+next_func(bind);
+next_func(close);
+next_func(setsockopt);
+next_func(socket);
+next_func(send);
+next_func(sendto);
+next_func(sendmsg);
+next_func(connect);
+
+void dobind(int sockfd)
+{
+       if (source && sockfd < 1024 && !is_bound[sockfd]) {
+               set_next_bind();
+               if (next_bind(sockfd, source, sockaddr_size)) {
+                       perror("failed to bind to ip address");
+                       next_close(sockfd);
+                       exit(EXIT_FAILURE);
+               }
+               is_bound[sockfd] = 1;
+       }
+}
+
+int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
+{
+       set_next_connect();
+       dobind(sockfd);
+       return next_connect(sockfd, addr, addrlen);
+}
+
+ssize_t send(int sockfd, const void *buf, size_t len, int flags)
+{
+       set_next_send();
+       dobind(sockfd);
+       return next_send(sockfd, buf, len, flags);
+}
+
+ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
+               const struct sockaddr *dest_addr, socklen_t addrlen)
+{
+       set_next_sendto();
+       dobind(sockfd);
+       return next_sendto(sockfd, buf, len, flags, dest_addr, addrlen);
+}
+
+ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags)
+{
+       set_next_sendmsg();
+       dobind(sockfd);
+       return next_sendmsg(sockfd, msg, flags);
+}
+
+int bind (int sockfd, const struct sockaddr *addr, socklen_t addrlen)
+{
+       set_next_bind();
+       if (device && addr->sa_family == AF_PACKET) {
+               ((struct sockaddr_ll*)addr)->sll_ifindex=device;
+       }
+       else if (source && addr->sa_family == AF_INET) {
+               ((struct sockaddr_in*)addr)->sin_addr = source4.sin_addr;
+       }
+#ifdef CONFIG_IPV6
+       else if (source && addr->sa_family == AF_INET6) {
+               ((struct sockaddr_in6*)addr)->sin6_addr = source6.sin6_addr;
+       }
+#endif
+       if (sockfd < 1024)
+               is_bound[sockfd] = 1;
+       return next_bind(sockfd, addr, addrlen);
+}
+
+int close (int sockfd)
+{
+       set_next_close();
+       if (sockfd < 1024)
+               is_bound[sockfd]=0;
+       return next_close(sockfd);
+}
+
+int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
+{
+       set_next_setsockopt();
+       if (level == SOL_SOCKET && (optname == SO_MARK || optname == SO_BINDTODEVICE))
+               return 0;
+       return next_setsockopt(sockfd, level, optname, optval, optlen);
+}
+
+int socket(int domain, int type, int protocol)
+{
+       int handle;
+
+       const char *socket_str = getenv("DEVICE");
+       const char *srcip_str = getenv("SRCIP");
+       const char *fwmark_str = getenv("FWMARK");
+       const char *family_str = getenv("FAMILY");
+       const int iface_len = socket_str ? strnlen(socket_str, IFNAMSIZ) : 0;
+       int has_family = family_str && *family_str != 0;
+       int has_srcip = srcip_str && *srcip_str != 0;
+       const int fwmark = fwmark_str ? (int)strtol(fwmark_str, NULL, 0) : 0;
+
+       set_next_close();
+       set_next_socket();
+       set_next_send();
+       set_next_setsockopt();
+       set_next_sendmsg();
+       set_next_sendto();
+       set_next_connect();
+       if(has_family) {
+#ifdef CONFIG_IPV6
+               if(domain == AF_INET && strncmp(family_str,"ipv6",4) == 0)
+                       return -1;
+#endif
+               if(domain == AF_INET6 && strncmp(family_str,"ipv4",4) == 0)
+                       return -1;
+       }
+
+       if (domain != AF_INET
+#ifdef CONFIG_IPV6
+           && domain != AF_INET6
+#endif
+               ) {
+               return next_socket(domain, type, protocol);
+       }
+
+
+       if (iface_len > 0) {
+               if (iface_len == IFNAMSIZ) {
+                       fprintf(stderr,"socket: Too long iface name\n");
+                       fflush(stderr);
+                       exit(EXIT_FAILURE);
+               }
+       }
+
+       if (has_srcip) {
+               int s;
+               void * addr_buf;
+               if (domain == AF_INET) {
+                       addr_buf = &source4.sin_addr;
+                       sockaddr_size=sizeof source4;
+                       memset(&source4, 0, sockaddr_size);
+                       source4.sin_family = domain;
+                       source = (struct sockaddr*)&source4;
+               }
+#ifdef CONFIG_IPV6
+               else {
+                       addr_buf = &source6.sin6_addr;
+                       sockaddr_size=sizeof source6;
+                       memset(&source6, 0, sockaddr_size);
+                       source6.sin6_family=domain;
+                       source = (struct sockaddr*)&source6;
+               }
+#endif
+               s = inet_pton(domain, srcip_str, addr_buf);
+               if (s == 0) {
+                       fprintf(stderr, "socket: ip address invalid format for family %s\n",
+                               domain == AF_INET ? "AF_INET" : domain == AF_INET6 ?
+                               "AF_INET6" : "unknown");
+                       return -1;
+               }
+               if (s < 0) {
+                       perror("inet_pton");
+                       exit(EXIT_FAILURE);
+               }
+       }
+
+       handle = next_socket(domain, type, protocol);
+       if (handle == -1 ) {
+               return handle;
+       }
+
+       if (iface_len > 0) {
+               device=if_nametoindex(socket_str);
+               if (next_setsockopt(handle, SOL_SOCKET, SO_BINDTODEVICE,
+                                   socket_str, iface_len + 1)) {
+                       perror("socket: setting interface name failed with error");
+                       next_close(handle);
+                       exit(EXIT_FAILURE);
+               }
+       }
+
+       if (fwmark > 0) {
+               if (next_setsockopt(handle, SOL_SOCKET, SO_MARK,
+                                   &fwmark, sizeof fwmark)) {
+                       perror("failed setting mark for socket");
+                       next_close(handle);
+                       exit(EXIT_FAILURE);
+               }
+       }
+       return handle;
+}
diff --git a/package/network/config/nfs-kernel-server/Config.in b/package/network/config/nfs-kernel-server/Config.in
new file mode 100644 (file)
index 0000000..454a44e
--- /dev/null
@@ -0,0 +1,8 @@
+menu "Select nfs-kernel-server configuration options"
+        depends on PACKAGE_nfs-kernel-server
+
+config NFS_KERNEL_SERVER_V4
+       bool "Include support for NFSv4"
+       default y
+
+endmenu
diff --git a/package/network/config/nfs-kernel-server/Makefile b/package/network/config/nfs-kernel-server/Makefile
new file mode 100644 (file)
index 0000000..e304357
--- /dev/null
@@ -0,0 +1,218 @@
+# Copyright (C) 2009-2019 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=nfs-kernel-server
+PKG_VERSION:=2.6.2
+PKG_RELEASE:=3
+PKG_HASH:=26d46448982252e9e2c8346d10cf13e1143e7089c866f53e25db3359f3e9493c
+
+PKG_SOURCE_URL:=@SF/nfs
+PKG_SOURCE:=nfs-utils-$(PKG_VERSION).tar.xz
+
+HOST_BUILD_DIR:=$(BUILD_DIR_HOST)/nfs-utils-$(PKG_VERSION)
+PKG_BUILD_DIR:=$(BUILD_DIR)/nfs-utils-$(PKG_VERSION)
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+PKG_BUILD_DEPENDS:=$(PKG_NAME)/host libevent2
+HOST_BUILD_DEPENDS:=libtirpc/host
+
+PKG_CONFIG_DEPENDS:= \
+       CONFIG_IPV6 \
+       CONFIG_NFS_KERNEL_SERVER_V4
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+
+define Package/nfs-kernel-server/Default
+       SECTION:=net
+       CATEGORY:=Network
+       SUBMENU:=Filesystem
+       DEPENDS:=+libblkid +libuuid +libtirpc
+       URL:=http://nfs.sourceforge.net/
+       MAINTAINER:=Peter Wagner <tripolar@gmx.at>
+endef
+
+define Package/nfs-kernel-server
+       $(call Package/nfs-kernel-server/Default)
+       TITLE:=Kernel NFS server support
+       DEPENDS+= +kmod-fs-nfsd +kmod-fs-nfs +NFS_KERNEL_SERVER_V4:kmod-fs-nfs-v4 +rpcbind +NFS_KERNEL_SERVER_V4:nfs-utils-libs +NFS_KERNEL_SERVER_V4:libkeyutils +NFS_KERNEL_SERVER_V4:libdevmapper
+       USERID:=nfs:nfs
+endef
+
+define Package/nfs-kernel-server/description
+Kernel NFS server support
+endef
+
+define Package/nfs-kernel-server/config
+       source "$(SOURCE)/Config.in"
+endef
+
+define Package/nfs-kernel-server-utils
+       $(call Package/nfs-kernel-server/Default)
+       TITLE:=NFS server utils
+       DEPENDS:=nfs-kernel-server
+endef
+
+define Package/nfs-kernel-server-utils/description
+NFS server utils
+endef
+
+define Package/nfs-kernel-server/conffiles
+/etc/exports
+endef
+
+define Package/nfs-utils/Default
+       $(call Package/nfs-kernel-server/Default)
+       SECTION:=utils
+       CATEGORY:=Utilities
+       DEPENDS+= +NFS_KERNEL_SERVER_V4:libkeyutils +NFS_KERNEL_SERVER_V4:libdevmapper
+       URL:=http://nfs.sourceforge.net/
+       MAINTAINER:=Peter Wagner <tripolar@gmx.at>
+endef
+
+define Package/nfs-utils
+       $(call Package/nfs-utils/Default)
+       TITLE:=updated mount utility (includes nfs4)
+endef
+
+define Package/nfs-utils/description
+Updated mount.nfs command - allows mounting nfs4 volumes
+endef
+
+define Package/nfs-utils-libs
+       $(call Package/nfs-utils/Default)
+       TITLE:=libraries provided by nfs-utils
+endef
+
+define Package/nfs-utils-libs/description
+Libraries provided by nfs-utils
+endef
+
+TARGET_CFLAGS += -Wno-error=implicit-function-declaration \
+                -Wno-error=strict-prototypes \
+                -Wno-error=incompatible-pointer-types \
+                -Wno-error=format-security \
+                -Wno-error=undef \
+                -Wno-error=missing-include-dirs
+
+ifneq ($(CONFIG_USE_MUSL),)
+  TARGET_CFLAGS += -D_LARGEFILE64_SOURCE
+endif
+
+TARGET_LDFLAGS += -L$(STAGING_DIR)/usr/lib/libevent
+
+CONFIGURE_ARGS += \
+       --disable-caps \
+       --disable-gss \
+       --disable-nfsdcld \
+       --disable-nfsdcltrack \
+       --enable-shared \
+       --enable-static \
+       --with-rpcgen=internal \
+       $(if $(CONFIG_NFS_KERNEL_SERVER_V4),--enable,--disable)-nfsv4 \
+       $(if $(CONFIG_NFS_KERNEL_SERVER_V4),--enable,--disable)-nfsv41
+
+ifeq ($(CONFIG_IPV6),n)
+       CONFIGURE_ARGS += --disable-ipv6
+endif
+
+CONFIGURE_VARS += \
+       libblkid_cv_is_recent=yes \
+       ac_cv_lib_resolv___res_querydomain=yes \
+       ac_cv_lib_bsd_daemon=no \
+       CONFIG_SQLITE3_TRUE="\#" \
+       CONFIG_NFSDCLD_TRUE="\#"
+
+MAKE_FLAGS += \
+       OPT="$(TARGET_CFLAGS)" \
+       INSTALLSUID="install -m 4755" \
+       DESTDIR="$(PKG_INSTALL_DIR)" \
+       RPCGEN_PATH=$(STAGING_DIR_HOSTPKG)/bin/rpcgen \
+       RPCGEN=$(STAGING_DIR_HOSTPKG)/bin/rpcgen
+
+HOST_CFLAGS += -Dlinux \
+       -Wno-error=missing-include-dirs
+
+HOST_CONFIGURE_ARGS += \
+       --disable-gss \
+       --disable-nfsv4 \
+       --disable-nfsv41 \
+       --without-tcp-wrappers \
+       --with-rpcgen=internal
+
+HOST_CONFIGURE_VARS += \
+       ac_cv_lib_event_event_dispatch=yes \
+       ac_cv_lib_nfsidmap_nfs4_init_name_mapping=yes \
+       ac_cv_lib_blkid_blkid_get_library_version=yes \
+       ac_cv_header_event_h=yes \
+       ac_cv_header_nfsidmap_h=yes \
+       ac_cv_header_blkid_blkid_h=yes \
+       ac_cv_lib_resolv___res_querydomain=yes \
+       ac_cv_func_prctl=yes \
+       ac_cv_sizeof_size_t=0 \
+       ac_cv_func_getrpcbynumber=yes \
+       ac_cv_func_getrpcbynumber_r=yes \
+       enable_ipv6=no \
+       GSSGLUE_CFLAGS=" " \
+       GSSGLUE_LIBS=" " \
+       RPCSECGSS_CFLAGS=" " \
+       RPCSECGSS_LIBS=" " \
+       CONFIG_SQLITE3_TRUE="\#" \
+       CONFIG_NFSDCLD_TRUE="\#"
+
+define Host/Compile
+       $(MAKE) -C $(HOST_BUILD_DIR)/tools/rpcgen all
+endef
+
+define Host/Install
+       $(INSTALL_DIR) $(STAGING_DIR_HOSTPKG)/bin
+       $(INSTALL_BIN) $(HOST_BUILD_DIR)/tools/rpcgen/rpcgen $(STAGING_DIR_HOSTPKG)/bin/rpcgen
+endef
+
+define Package/nfs-kernel-server/install
+       $(INSTALL_DIR) $(1)/etc/init.d $(1)/usr/sbin
+       $(INSTALL_DATA) ./files/nfsd.exports $(1)/etc/exports
+       $(INSTALL_BIN) ./files/nfsd.init $(1)/etc/init.d/nfsd
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/statd/sm-notify $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/statd/statd $(1)/usr/sbin/rpc.statd
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/nfsd/nfsd $(1)/usr/sbin/rpc.nfsd
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/mountd/mountd $(1)/usr/sbin/rpc.mountd
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/exportfs/exportfs $(1)/usr/sbin/
+endef
+
+define Package/nfs-kernel-server-utils/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/showmount/showmount $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/utils/nfsstat/nfsstat $(1)/usr/sbin
+endef
+
+define Package/nfs-utils/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/nfsidmap.h $(1)/usr/include/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libnfsidmap.{a,la,so*} $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/pkgconfig/libnfsidmap.pc $(1)/usr/lib/pkgconfig/
+endef
+
+define Package/nfs-utils/install
+       $(INSTALL_DIR) $(1)/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/sbin/mount.nfs $(1)/sbin/
+       (cd $(1)/sbin; ln -sf mount.nfs mount.nfs4; ln -sf mount.nfs umount.nfs; ln -sf mount.nfs umount.nfs4)
+endef
+
+define Package/nfs-utils-libs/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(if $(CONFIG_NFS_KERNEL_SERVER_V4),$(CP) $(PKG_INSTALL_DIR)/usr/lib/libnfsidmap.so* $(1)/usr/lib/,)
+endef
+
+$(eval $(call HostBuild))
+$(eval $(call BuildPackage,nfs-utils))
+$(eval $(call BuildPackage,nfs-utils-libs))
+$(eval $(call BuildPackage,nfs-kernel-server))
+$(eval $(call BuildPackage,nfs-kernel-server-utils))
diff --git a/package/network/config/nfs-kernel-server/files/nfsd.exports b/package/network/config/nfs-kernel-server/files/nfsd.exports
new file mode 100644 (file)
index 0000000..0453e04
--- /dev/null
@@ -0,0 +1 @@
+/mnt   *(ro,all_squash,insecure,sync)
diff --git a/package/network/config/nfs-kernel-server/files/nfsd.init b/package/network/config/nfs-kernel-server/files/nfsd.init
new file mode 100644 (file)
index 0000000..7b0f175
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+
+START=99
+STOP=60
+
+USE_PROCD=1
+
+NFS_D=/var/lib/nfs
+RECOVERY_D=$NFS_D/v4recovery
+LOCK_D=/var/lib/nfs/sm
+VAR_NFS=/var/lib/nfs
+
+start_service() {
+       grep -q /proc/fs/nfsd /proc/mounts || \
+               mount -t nfsd nfsd /proc/fs/nfsd
+       mkdir -p $NFS_D
+       mkdir -p $RECOVERY_D
+       mkdir -p $LOCK_D
+       touch $NFS_D/rmtab
+
+       mkdir -p $VAR_NFS
+       chown nfs:nfs $VAR_NFS
+
+       sysctl -w fs.nfs.nlm_tcpport=32777 fs.nfs.nlm_udpport=32777 > /dev/null
+
+       procd_open_instance
+       procd_set_param command /usr/sbin/rpc.statd -p 32778 -o 32779 -F
+       procd_close_instance
+
+       /usr/sbin/exportfs -r
+       /usr/sbin/rpc.nfsd --grace-time 10
+
+       procd_open_instance
+       procd_set_param command /usr/sbin/rpc.mountd -p 32780 -F
+       procd_close_instance
+}
+
+stop_service() {
+       rpc.nfsd 0 2> /dev/null
+       /usr/sbin/exportfs -au
+       grep -q /proc/fs/nfsd /proc/mounts && \
+               umount /proc/fs/nfsd
+}
+
+service_triggers() {
+       local export_dirs="$(while read mp _r ; do echo -n "$mp " ; done < /etc/exports)"
+       procd_add_reload_mount_trigger $export_dirs
+}
diff --git a/package/network/config/nfs-kernel-server/patches/101-musl-getservbyport.patch b/package/network/config/nfs-kernel-server/patches/101-musl-getservbyport.patch
new file mode 100644 (file)
index 0000000..8e926e1
--- /dev/null
@@ -0,0 +1,16 @@
+Musl will always return something with getservbyport so we cannot skip
+ports that returns non-null.
+
+--- a/utils/statd/rmtcall.c
++++ b/utils/statd/rmtcall.c
+@@ -93,8 +93,10 @@ statd_get_socket(void)
+                                       __func__);
+                       break;
+               }
++#if defined(__GLIBC__) || defined(__UCLIBC__)
+               se = getservbyport(sin.sin_port, "udp");
+               if (se == NULL)
++#endif
+                       break;
+               if (retries == MAX_BRP_RETRIES) {
diff --git a/package/network/config/nfs-kernel-server/patches/110-move-hardcoded-rundir.patch b/package/network/config/nfs-kernel-server/patches/110-move-hardcoded-rundir.patch
new file mode 100644 (file)
index 0000000..fa097fb
--- /dev/null
@@ -0,0 +1,44 @@
+--- a/utils/blkmapd/device-discovery.c
++++ b/utils/blkmapd/device-discovery.c
+@@ -64,7 +64,7 @@
+ #define EVENT_BUFSIZE (1024 * EVENT_SIZE)
+ #define RPCPIPE_DIR   NFS_STATEDIR "/rpc_pipefs"
+-#define PID_FILE      "/run/blkmapd.pid"
++#define PID_FILE      "/tmp/run/blkmapd.pid"
+ #define CONF_SAVE(w, f) do {                  \
+       char *p = f;                            \
+--- a/utils/gssd/gssd.h
++++ b/utils/gssd/gssd.h
+@@ -44,7 +44,7 @@
+ #define DNOTIFY_SIGNAL                (SIGRTMIN + 3)
+ #define GSSD_DEFAULT_CRED_DIR                 "/tmp"
+-#define GSSD_USER_CRED_DIR                    "/run/user/%U"
++#define GSSD_USER_CRED_DIR                    "/tmp/run/user/%U"
+ #define GSSD_DEFAULT_CRED_PREFIX              "krb5cc"
+ #define GSSD_DEFAULT_MACHINE_CRED_SUFFIX      "machine"
+ #define GSSD_DEFAULT_KEYTAB_FILE              "/etc/krb5.keytab"
+--- a/utils/statd/sm-notify.c
++++ b/utils/statd/sm-notify.c
+@@ -913,7 +913,7 @@ static int record_pid(void)
+       int fd;
+       (void)snprintf(pid, sizeof(pid), "%d\n", (int)getpid());
+-      fd = open("/run/sm-notify.pid", O_CREAT|O_EXCL|O_WRONLY, 0600);
++      fd = open("/tmp/run/sm-notify.pid", O_CREAT|O_EXCL|O_WRONLY, 0600);
+       if (fd < 0)
+               return 0;
+--- a/utils/statd/statd.c
++++ b/utils/statd/statd.c
+@@ -161,7 +161,7 @@ usage(void)
+       fprintf(stderr,"      -H                   Specify a high-availability callout program.\n");
+ }
+-static const char *pidfile = "/run/rpc.statd.pid";
++static const char *pidfile = "/tmp/run/rpc.statd.pid";
+ int pidfd = -1;
+ static void create_pidfile(void)
diff --git a/package/network/config/nfs-kernel-server/patches/130-musl-svcgssd-sysconf.patch b/package/network/config/nfs-kernel-server/patches/130-musl-svcgssd-sysconf.patch
new file mode 100644 (file)
index 0000000..a498e39
--- /dev/null
@@ -0,0 +1,144 @@
+--- a/support/nfsidmap/libnfsidmap.c
++++ b/support/nfsidmap/libnfsidmap.c
+@@ -452,11 +452,17 @@ int nfs4_init_name_mapping(char *conffil
+       nobody_user = conf_get_str("Mapping", "Nobody-User");
+       if (nobody_user) {
+-              size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++              long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++              size_t buflen = 1024; /*value on my gentoo glibc system that has _SC_GETPW_R_SIZE_MAX*/
+               struct passwd *buf;
+               struct passwd *pw = NULL;
+               int err;
++              /*sysconf can return -1 when _SC_GETPW_R_SIZE_MAX is not defined, like on musl systems, if cast to size_t this will lead
++                to an integer overflow, which leads to a buffer overflow and crashes svcgssd */
++              if (scbuflen > 0)
++                      buflen = (size_t)scbuflen;
++
+               buf = malloc(sizeof(*buf) + buflen);
+               if (buf) {
+                       err = getpwnam_r(nobody_user, buf, ((char *)buf) + sizeof(*buf), buflen, &pw);
+@@ -473,11 +479,17 @@ int nfs4_init_name_mapping(char *conffil
+       nobody_group = conf_get_str("Mapping", "Nobody-Group");
+       if (nobody_group) {
+-              size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++              long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++              size_t buflen = 1024; /*value on my gentoo glibc system that has _SC_GETGR_R_SIZE_MAX*/
+               struct group *buf;
+               struct group *gr = NULL;
+               int err;
++              /*sysconf can return -1 when _SC_GETGR_R_SIZE_MAX is not defined, like on musl systems, if cast to size_t this will lead
++                to an integer overflow, which leads to a buffer overflow and crashes svcgssd */
++              if (scbuflen > 0)
++                      buflen = (size_t)scbuflen;
++
+               buf = malloc(sizeof(*buf) + buflen);
+               if (buf) {
+                       err = getgrnam_r(nobody_group, buf, ((char *)buf) + sizeof(*buf), buflen, &gr);
+--- a/support/nfsidmap/static.c
++++ b/support/nfsidmap/static.c
+@@ -98,10 +98,14 @@ static struct passwd *static_getpwnam(co
+ {
+       struct passwd *pw;
+       struct pwbuf *buf;
+-      size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      size_t buflen = 1024;
+       char *localname;
+       int err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       buf = malloc(sizeof(*buf) + buflen);
+       if (!buf) {
+               err = ENOMEM;
+@@ -149,10 +153,14 @@ static struct group *static_getgrnam(con
+ {
+       struct group *gr;
+       struct grbuf *buf;
+-      size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      size_t buflen = 1024;
+       char *localgroup;
+       int err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       buf = malloc(sizeof(*buf) + buflen);
+       if (!buf) {
+               err = ENOMEM;
+--- a/support/nfsidmap/nss.c
++++ b/support/nfsidmap/nss.c
+@@ -91,9 +91,13 @@ static int nss_uid_to_name(uid_t uid, ch
+       struct passwd *pw = NULL;
+       struct passwd pwbuf;
+       char *buf;
+-      size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      size_t buflen = 1024;
+       int err = -ENOMEM;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       buf = malloc(buflen);
+       if (!buf)
+               goto out;
+@@ -119,9 +123,13 @@ static int nss_gid_to_name(gid_t gid, ch
+       struct group *gr = NULL;
+       struct group grbuf;
+       char *buf;
+-      size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      size_t buflen = 1024;
+       int err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
++
+       if (domain == NULL)
+               domain = get_default_domain();
+@@ -192,12 +200,13 @@ static struct passwd *nss_getpwnam(const
+ {
+       struct passwd *pw;
+       struct pwbuf *buf;
+-      size_t buflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETPW_R_SIZE_MAX);
++      size_t buflen = 1024;
+       char *localname;
+       int err = ENOMEM;
+-      if (buflen > UINT_MAX)
+-              goto err;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
+       buf = malloc(sizeof(*buf) + buflen);
+       if (buf == NULL)
+@@ -301,7 +310,8 @@ static int _nss_name_to_gid(char *name,
+       struct group *gr = NULL;
+       struct group grbuf;
+       char *buf, *domain;
+-      size_t buflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      long scbuflen = sysconf(_SC_GETGR_R_SIZE_MAX);
++      size_t buflen = 1024;
+       int err = -EINVAL;
+       char *localname = NULL;
+       char *ref_name = NULL;
+@@ -327,8 +337,8 @@ static int _nss_name_to_gid(char *name,
+       }
+       err = -ENOMEM;
+-      if (buflen > UINT_MAX)
+-              goto out_name;
++      if (scbuflen > 0)
++              buflen = (size_t)scbuflen;
+       do {
+               buf = malloc(buflen);
diff --git a/package/network/config/nfs-kernel-server/patches/200-fix-macos-build.patch b/package/network/config/nfs-kernel-server/patches/200-fix-macos-build.patch
new file mode 100644 (file)
index 0000000..0509e51
--- /dev/null
@@ -0,0 +1,17 @@
+fix stat64 issue for modern macos versions (including macos arm64)
+
+--- a/tools/rpcgen/rpc_main.c
++++ b/tools/rpcgen/rpc_main.c
+@@ -68,6 +68,12 @@
+ # endif
+ #endif
++#ifdef __APPLE__
++# if __DARWIN_ONLY_64_BIT_INO_T
++#  define stat64 stat
++# endif
++#endif
++
+ struct commandline
+   {
+     int cflag;                        /* xdr C routines */
diff --git a/package/network/config/pbr/Makefile b/package/network/config/pbr/Makefile
new file mode 100644 (file)
index 0000000..744db6a
--- /dev/null
@@ -0,0 +1,200 @@
+# Copyright 2017-2022 Stan Grishin (stangri@melmac.ca)
+# This is free software, licensed under the GNU General Public License v3.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=pbr
+PKG_VERSION:=1.1.1
+PKG_RELEASE:=7
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_MAINTAINER:=Stan Grishin <stangri@melmac.ca>
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/pbr/Default
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Routing and Redirection
+  TITLE:=Policy Based Routing Service
+  URL:=https://docs.openwrt.melmac.net/pbr/
+  DEPENDS:=+ip-full +jshn +jsonfilter +resolveip
+  CONFLICTS:=vpnbypass vpn-policy-routing
+  PKGARCH:=all
+endef
+
+define Package/pbr
+$(call Package/pbr/Default)
+  TITLE+= with nft/nft set support
+  DEPENDS+=+kmod-nft-core +kmod-nft-nat +nftables-json
+  VARIANT:=nftables
+  PROVIDES:=vpnbypass vpn-policy-routing
+  DEFAULT_VARIANT:=1
+endef
+
+define Package/pbr-iptables
+$(call Package/pbr/Default)
+  TITLE+= with iptables/ipset support
+  DEPENDS+=+ipset +iptables +kmod-ipt-ipset +iptables-mod-ipopt
+  VARIANT:=iptables
+  PROVIDES:=pbr
+endef
+
+define Package/pbr-netifd
+$(call Package/pbr/Default)
+  TITLE+= with netifd support
+  VARIANT:=netifd
+  PROVIDES:=pbr
+endef
+
+define Package/pbr/description
+This service enables policy-based routing for WAN interfaces and various VPN tunnels.
+This version supports OpenWrt with both firewall3/ipset/iptables and firewall4/nft.
+endef
+
+define Package/pbr-iptables/description
+This service enables policy-based routing for WAN interfaces and various VPN tunnels.
+This version supports OpenWrt with firewall3/ipset/iptables.
+endef
+
+define Package/pbr-netifd/description
+This service enables policy-based routing for WAN interfaces and various VPN tunnels.
+This version supports OpenWrt with both firewall3/ipset/iptables and firewall4/nft.
+This version uses OpenWrt native netifd/tables to set up interfaces. This is WIP.
+endef
+
+define Package/pbr/conffiles
+/etc/config/pbr
+endef
+
+Package/pbr-iptables/conffiles = $(Package/pbr/conffiles)
+Package/pbr-netifd/conffiles = $(Package/pbr/conffiles)
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/pbr/default/install
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/etc/init.d/pbr.init $(1)/etc/init.d/pbr
+       $(SED) "s|^\(readonly PKG_VERSION\).*|\1='$(PKG_VERSION)-$(PKG_RELEASE)'|" $(1)/etc/init.d/pbr
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+       $(INSTALL_DATA) ./files/etc/hotplug.d/iface/70-pbr $(1)/etc/hotplug.d/iface/70-pbr
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_BIN)  ./files/etc/uci-defaults/90-pbr $(1)/etc/uci-defaults/90-pbr
+       $(INSTALL_DIR) $(1)/usr/share/pbr
+       $(INSTALL_DATA) ./files/usr/share/pbr/pbr.user.aws $(1)/usr/share/pbr/pbr.user.aws
+       $(INSTALL_DATA) ./files/usr/share/pbr/pbr.user.netflix $(1)/usr/share/pbr/pbr.user.netflix
+endef
+
+define Package/pbr/install
+$(call Package/pbr/default/install,$(1))
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/etc/config/pbr $(1)/etc/config/pbr
+       $(INSTALL_DIR) $(1)/usr/share/pbr
+       $(INSTALL_DATA) ./files/usr/share/pbr/pbr.firewall.include $(1)/usr/share/pbr/pbr.firewall.include
+       $(INSTALL_DIR) $(1)/usr/share/nftables.d
+       $(CP) ./files/usr/share/nftables.d/* $(1)/usr/share/nftables.d/
+endef
+
+define Package/pbr-iptables/install
+$(call Package/pbr/default/install,$(1))
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/firewall
+       $(INSTALL_DATA) ./files/etc/hotplug.d/firewall/70-pbr $(1)/etc/hotplug.d/firewall/70-pbr
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/etc/config/pbr.iptables $(1)/etc/config/pbr
+endef
+
+define Package/pbr-netifd/install
+$(call Package/pbr/default/install,$(1))
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/etc/config/pbr $(1)/etc/config/pbr
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_BIN)  ./files/etc/uci-defaults/91-pbr $(1)/etc/uci-defaults/91-pbr
+endef
+
+define Package/pbr/postinst
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               chmod -x /etc/init.d/pbr || true
+               fw4 -q reload || true
+               chmod +x /etc/init.d/pbr || true
+               echo -n "Installing rc.d symlink for pbr... "
+               /etc/init.d/pbr enable && echo "OK" || echo "FAIL"
+       fi
+       exit 0
+endef
+
+define Package/pbr/prerm
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               uci -q delete firewall.pbr || true
+               echo "Stopping pbr service... "
+               /etc/init.d/pbr stop && echo "OK" || echo "FAIL"
+               echo -n "Removing rc.d symlink for pbr... "
+               /etc/init.d/pbr disable && echo "OK" || echo "FAIL"
+       fi
+       exit 0
+endef
+
+define Package/pbr/postrm
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               fw4 -q reload || true
+       fi
+       exit 0
+endef
+
+define Package/pbr-iptables/postinst
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               echo -n "Installing rc.d symlink for pbr-iptables... "
+               /etc/init.d/pbr enable && echo "OK" || echo "FAIL"
+       fi
+       exit 0
+endef
+
+define Package/pbr-iptables/prerm
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               uci -q delete firewall.pbr || true
+               echo "Stopping pbr-iptables service... "
+               /etc/init.d/pbr stop && echo "OK" || echo "FAIL"
+               echo -n "Removing rc.d symlink for pbr-iptables... "
+               /etc/init.d/pbr disable && echo "OK" || echo "FAIL"
+       fi
+       exit 0
+endef
+
+define Package/pbr-netifd/postinst
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               echo -n "Installing rc.d symlink for pbr-netifd... "
+               /etc/init.d/pbr enable && echo "OK" || echo "FAIL"
+       fi
+       exit 0
+endef
+
+define Package/pbr-netifd/prerm
+       #!/bin/sh
+       # check if we are on real system
+       if [ -z "$${IPKG_INSTROOT}" ]; then
+               uci -q delete firewall.pbr || true
+               echo "Stopping pbr-netifd service... "
+               /etc/init.d/pbr stop && echo "OK" || echo "FAIL"
+               echo -n "Removing rc.d symlink for pbr... "
+               /etc/init.d/pbr disable && echo "OK" || echo "FAIL"
+       fi
+       exit 0
+endef
+
+$(eval $(call BuildPackage,pbr))
+$(eval $(call BuildPackage,pbr-iptables))
+#$(eval $(call BuildPackage,pbr-netifd))
diff --git a/package/network/config/pbr/files/README.md b/package/network/config/pbr/files/README.md
new file mode 100644 (file)
index 0000000..494a97c
--- /dev/null
@@ -0,0 +1,3 @@
+# README
+
+README is available at [https://docs.openwrt.melmac.net/pbr/](https://docs.openwrt.melmac.net/pbr/).
diff --git a/package/network/config/pbr/files/etc/config/pbr b/package/network/config/pbr/files/etc/config/pbr
new file mode 100644 (file)
index 0000000..857ef1e
--- /dev/null
@@ -0,0 +1,37 @@
+config pbr 'config'
+       option enabled '0'
+       option verbosity '2'
+       option strict_enforcement '1'
+       option resolver_set 'none'
+       option ipv6_enabled '0'
+       list ignored_interface 'vpnserver'
+       list ignored_interface 'wgserver'
+       option boot_timeout '30'
+       option rule_create_option 'add'
+       option procd_reload_delay '1'
+       option webui_show_ignore_target '0'
+       list webui_supported_protocol 'all'
+       list webui_supported_protocol 'tcp'
+       list webui_supported_protocol 'udp'
+       list webui_supported_protocol 'tcp udp'
+       list webui_supported_protocol 'icmp'
+
+config include
+       option path '/usr/share/pbr/pbr.user.aws'
+       option enabled 0
+
+config include
+       option path '/usr/share/pbr/pbr.user.netflix'
+       option enabled 0
+
+config policy
+       option name 'Plex/Emby Local Server'
+       option interface 'wan'
+       option src_port '8096 8920 32400'
+       option enabled '0'
+
+config policy
+       option name 'Plex/Emby Remote Servers'
+       option interface 'wan'
+       option dest_addr 'plex.tv my.plexapp.com emby.media app.emby.media tv.emby.media'
+       option enabled '0'
diff --git a/package/network/config/pbr/files/etc/config/pbr.iptables b/package/network/config/pbr/files/etc/config/pbr.iptables
new file mode 100644 (file)
index 0000000..c627126
--- /dev/null
@@ -0,0 +1,45 @@
+config pbr 'config'
+       option enabled '0'
+       option verbosity '2'
+       option strict_enforcement '1'
+       option resolver_set 'dnsmasq.ipset'
+       option ipv6_enabled '0'
+       list ignored_interface 'vpnserver'
+       list ignored_interface 'wgserver'
+       option boot_timeout '30'
+       option rule_create_option 'add'
+       option procd_reload_delay '1'
+       option webui_show_ignore_target '0'
+       list webui_supported_protocol 'all'
+       list webui_supported_protocol 'tcp'
+       list webui_supported_protocol 'udp'
+       list webui_supported_protocol 'tcp udp'
+       list webui_supported_protocol 'icmp'
+
+config include
+       option path '/usr/share/pbr/pbr.user.aws'
+       option enabled 0
+
+config include
+       option path '/usr/share/pbr/pbr.user.netflix'
+       option enabled 0
+
+config policy
+       option name 'Plex/Emby Local Server'
+       option interface 'wan'
+       option src_port '8096 8920 32400'
+       option enabled '0'
+
+config policy
+       option name 'Plex/Emby Remote Servers'
+       option interface 'wan'
+       option dest_addr 'plex.tv my.plexapp.com emby.media app.emby.media tv.emby.media'
+       option enabled '0'
+
+config policy
+       option name 'WireGuard Server'
+       option interface 'wan'
+       option src_port '51820'
+       option chain 'OUTPUT'
+       option proto 'udp'
+       option enabled '0'
diff --git a/package/network/config/pbr/files/etc/hotplug.d/firewall/70-pbr b/package/network/config/pbr/files/etc/hotplug.d/firewall/70-pbr
new file mode 100755 (executable)
index 0000000..25b7e58
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+[ "$ACTION" = "reload" ] || [ "$ACTION" = "restart" ] || exit 0
+if [ -x /etc/init.d/pbr ] && /etc/init.d/pbr enabled; then
+       logger -t "pbr" "Reloading pbr due to firewall action: $ACTION"
+       /etc/init.d/pbr reload
+fi
diff --git a/package/network/config/pbr/files/etc/hotplug.d/iface/70-pbr b/package/network/config/pbr/files/etc/hotplug.d/iface/70-pbr
new file mode 100644 (file)
index 0000000..bcb0faa
--- /dev/null
@@ -0,0 +1,6 @@
+#!/bin/sh
+# shellcheck disable=SC1091,SC3060
+if [ -x /etc/init.d/pbr ] && /etc/init.d/pbr enabled; then
+       logger -t pbr "Reloading pbr $INTERFACE interface routing due to $ACTION of $INTERFACE ($DEVICE)"
+       /etc/init.d/pbr on_interface_reload "$INTERFACE"
+fi
diff --git a/package/network/config/pbr/files/etc/init.d/pbr.init b/package/network/config/pbr/files/etc/init.d/pbr.init
new file mode 100755 (executable)
index 0000000..b8c9c3d
--- /dev/null
@@ -0,0 +1,2528 @@
+#!/bin/sh /etc/rc.common
+# Copyright 2020-2022 Stan Grishin (stangri@melmac.ca)
+# shellcheck disable=SC1091,SC2018,SC2019,SC3043,SC3057,SC3060
+
+# sysctl net.ipv4.conf.default.rp_filter=1
+# sysctl net.ipv4.conf.all.rp_filter=1
+
+# shellcheck disable=SC2034
+START=94
+# shellcheck disable=SC2034
+USE_PROCD=1
+
+if type extra_command >/dev/null 2>&1; then
+       extra_command 'status' "Generates output required to troubleshoot routing issues
+               Use '-d' option for more detailed output
+               Use '-p' option to automatically upload data under VPR paste.ee account
+                       WARNING: while paste.ee uploads are unlisted, they are still publicly available
+               List domain names after options to include their lookup in report"
+       extra_command 'version' 'Show version information'
+       extra_command 'on_firewall_reload' '    Run service on firewall reload'
+       extra_command 'on_interface_reload' '   Run service on indicated interface reload'
+else
+# shellcheck disable=SC2034
+       EXTRA_COMMANDS='on_firewall_reload on_interface_reload status version'
+# shellcheck disable=SC2034
+       EXTRA_HELP="    status  Generates output required to troubleshoot routing issues
+               Use '-d' option for more detailed output
+               Use '-p' option to automatically upload data under VPR paste.ee account
+                       WARNING: while paste.ee uploads are unlisted, they are still publicly available
+               List domain names after options to include their lookup in report"
+fi
+
+readonly PKG_VERSION='dev-test'
+readonly packageName='pbr'
+readonly serviceName="$packageName $PKG_VERSION"
+readonly serviceTrapSignals='exit SIGHUP SIGQUIT SIGKILL'
+readonly packageConfigFile="/etc/config/${packageName}"
+readonly packageLockFile="/var/run/${packageName}.lock"
+readonly nftTempFile="/var/run/${packageName}.nft"
+#readonly nftPermFile="/etc/nftables.d/table-post/30-pbr.nft"
+readonly dnsmasqFile="/var/dnsmasq.d/${packageName}"
+readonly _OK_='\033[0;32m\xe2\x9c\x93\033[0m'
+readonly _FAIL_='\033[0;31m\xe2\x9c\x97\033[0m'
+readonly __OK__='\033[0;32m[\xe2\x9c\x93]\033[0m'
+readonly __FAIL__='\033[0;31m[\xe2\x9c\x97]\033[0m'
+readonly _ERROR_='\033[0;31mERROR\033[0m'
+readonly _WARNING_='\033[0;33mWARNING\033[0m'
+readonly ip_full='/usr/libexec/ip-full'
+# shellcheck disable=SC2155
+readonly ip_bin="$(command -v ip)"
+readonly ipTablePrefix='pbr'
+# shellcheck disable=SC2155
+readonly iptables="$(command -v iptables)"
+# shellcheck disable=SC2155
+readonly ip6tables="$(command -v ip6tables)"
+# shellcheck disable=SC2155
+readonly ipset="$(command -v ipset)"
+readonly ipsPrefix='pbr'
+readonly iptPrefix='PBR'
+# shellcheck disable=SC2155
+readonly agh="$(command -v AdGuardHome)"
+readonly aghConfigFile='/etc/adguardhome.yaml'
+readonly aghIpsetFile="/var/run/${packageName}.adguardhome.ipsets"
+# shellcheck disable=SC2155
+readonly nft="$(command -v nft)"
+readonly nftTable="fw4"
+readonly nftPrefix='pbr'
+readonly chainsList='forward input output postrouting prerouting'
+
+# package config options
+boot_timeout=
+enabled=
+fw_mask=
+icmp_interface=
+ignored_interface=
+ipv6_enabled=
+nft_user_set_policy=
+nft_user_set_counter=
+procd_boot_delay=
+procd_reload_delay=
+resolver_set=
+rule_create_option=
+secure_reload=
+strict_enforcement=
+supported_interface=
+verbosity=
+wan_ip_rules_priority=
+wan_mark=
+
+# run-time
+gatewaySummary=
+errorSummary=
+warningSummary=
+wanIface4=
+wanIface6=
+ifaceMark=
+ifaceTableID=
+ifacePriority=
+ifacesAll=
+ifacesSupported=
+firewallWanZone=
+wanGW4=
+wanGW6=
+serviceStartTrigger=
+processPolicyError=
+processPolicyWarning=
+resolver_set_supported=
+nftPrevParam4=
+nftPrevParam6=
+
+get_text() {
+       local r
+       case "$1" in
+               errorConfigValidation) r="Config ($packageConfigFile) validation failure!";;
+               errorNoIpFull) r="ip-full binary cannot be found!";;
+               errorNoIptables) r="iptables binary cannot be found!";;
+               errorNoIpset) r="Resolver set support (${resolver_set}) requires ipset, but ipset binary cannot be found!";;
+               errorNoNft) r="Resolver set support (${resolver_set}) requires nftables, but nft binary cannot be found!";;
+               errorResolverNotSupported) r="Resolver set (${resolver_set}) is not supported on this system!";;
+               errorServiceDisabled) r="The ${packageName} service is currently disabled!";;
+               errorNoWanGateway) r="The ${serviceName} service failed to discover WAN gateway!";;
+               errorIpsetNameTooLong) r="The ipset name '%s' is longer than allowed 31 characters!";;
+               errorNftsetNameTooLong) r="The nft set name '%s' is longer than allowed 31 characters!";;
+               errorUnexpectedExit) r="Unexpected exit or service termination: '%s'!";;
+               errorPolicyNoSrcDest) r="Policy '%s' has no source/destination parameters!";;
+               errorPolicyNoInterface) r="Policy '%s' has no assigned interface!";;
+               errorPolicyUnknownInterface) r="Policy '%s' has an unknown interface!";;
+               errorPolicyProcessCMD) r="'%s'!";;
+               errorFailedSetup) r="Failed to set up '%s'!";;
+               errorFailedReload) r="Failed to reload '%s'!";;
+               errorUserFileNotFound) r="Custom user file '%s' not found or empty!";;
+               errorUserFileSyntax) r="Syntax error in custom user file '%s'!";;
+               errorUserFileRunning) r="Error running custom user file '%s'!";;
+               errorUserFileNoCurl) r="Use of 'curl' is detected in custom user file '%s', but 'curl' isn't installed!";;
+               errorNoGateways) r="Failed to set up any gateway!";;
+               errorResolver) r="Resolver '%s'!";;
+               errorPolicyProcessNoIpv6) r="Skipping IPv6 policy '%s' as IPv6 support is disabled!";;
+               errorPolicyProcessUnknownFwmark) r="Unknown packet mark for interface '%s'!";;
+               errorPolicyProcessMismatchFamily) r="Mismatched IP family between in policy '%s'!";;
+               errorPolicyProcessUnknownProtocol) r="Unknown protocol in policy '%s'!";;
+               errorPolicyProcessInsertionFailed) r="Insertion failed for both IPv4 and IPv6 for policy '%s'!";;
+               errorPolicyProcessInsertionFailedIpv4) r="Insertion failed for IPv4 for policy '%s'!";;
+               errorInterfaceRoutingEmptyValues) r="Received empty tid/mark or interface name when setting up routing!";;
+               errorFailedToResolve) r="Failed to resolve '%s'!";;
+               warningInvalidOVPNConfig) r="Invalid OpenVPN config for '%s' interface.";;
+               warningResolverNotSupported) r="Resolver set (${resolver_set}) is not supported on this system.";;
+               warningAGHVersionTooLow) r="Installed AdGuardHome ('%s') doesn't support 'ipset_file' option.";;
+               warningPolicyProcessCMD) r="'%s'";;
+               warningTorUnsetParams) r="Please unset 'src_addr', 'src_port' and 'dest_port' for policy '%s'.";;
+               warningTorUnsetProto) r="Please unset 'proto' or set 'proto' to 'all' for policy '%s'.";;
+               warningTorUnsetChainIpt) r="Please unset 'chain' or set 'chain' to 'PREROUTING' for policy '%s'.";;
+               warningTorUnsetChainNft) r="Please unset 'chain' or set 'chain' to 'prerouting' for policy '%s'.";;
+               warningOutdatedWebUIApp) r="The WebUI application is outdated (version %s), please update it.";;
+       esac
+       echo "$r"
+}
+
+version() { echo "$PKG_VERSION"; }
+output_ok() { output 1 "$_OK_"; output 2 "$__OK__\\n"; }
+output_okn() { output 1 "$_OK_\\n"; output 2 "$__OK__\\n"; }
+output_fail() { s=1; output 1 "$_FAIL_"; output 2 "$__FAIL__\\n"; }
+output_failn() { output 1 "$_FAIL_\\n"; output 2 "$__FAIL__\\n"; }
+# shellcheck disable=SC2317
+str_replace() { printf "%b" "$1" | sed -e "s/$(printf "%b" "$2")/$(printf "%b" "$3")/g"; }
+str_replace() { echo "${1//$2/$3}"; }
+str_contains() { [ -n "$1" ] && [ -n "$2" ] && [ "${1//$2}" != "$1" ]; }
+is_greater() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" != "$1"; }
+is_greater_or_equal() { test "$(printf '%s\n' "$@" | sort -V | head -n 1)" = "$2"; }
+str_contains_word() { echo "$1" | grep -q -w "$2"; }
+str_to_lower() { echo "$1" | tr 'A-Z' 'a-z'; }
+str_to_upper() { echo "$1" | tr 'a-z' 'A-Z'; }
+str_extras_to_underscore() { echo "$1" | tr '[\. ~`!@#$%^&*()\+/,<>?//;:]' '_'; }
+str_extras_to_space() { echo "$1" | tr ';{}' ' '; }
+debug() { local i j; for i in "$@"; do eval "j=\$$i"; echo "${i}: ${j} "; done; }
+output() {
+# Can take a single parameter (text) to be output at any verbosity
+# Or target verbosity level and text to be output at specifc verbosity
+       local msg memmsg logmsg
+       local sharedMemoryOutput="/dev/shm/$packageName-output"
+       verbosity="${verbosity:-2}"
+       if [ "$#" -ne 1 ]; then
+               if [ $((verbosity & $1)) -gt 0 ] || [ "$verbosity" = "$1" ]; then shift; else return 0; fi
+       fi
+       [ -t 1 ] && printf "%b" "$1"
+       msg="${1//$serviceName /service }";
+       if [ "$(printf "%b" "$msg" | wc -l)" -gt 0 ]; then
+               [ -s "$sharedMemoryOutput" ] && memmsg="$(cat "$sharedMemoryOutput")"
+               logmsg="$(printf "%b" "${memmsg}${msg}" | sed 's/\x1b\[[0-9;]*m//g')"
+               logger -t "${packageName:-service}" "$(printf "%b" "$logmsg")"
+               rm -f "$sharedMemoryOutput"
+       else
+               printf "%b" "$msg" >> "$sharedMemoryOutput"
+       fi
+}
+is_present() { command -v "$1" >/dev/null 2>&1; }
+is_installed() { [ -s "/usr/lib/opkg/info/${1}.control" ]; }
+is_variant_installed() { [ "$(echo /usr/lib/opkg/info/"${1}"*.control)" != "/usr/lib/opkg/info/${1}*.control" ]; }
+is_nft() { [ -x "$nft" ] && ! str_contains "$resolver_set" 'ipset' && "$nft" list chains inet | grep -q "${nftPrefix}_prerouting"; }
+_find_firewall_wan_zone() { [ "$(uci -q get "firewall.${1}.name")" = "wan" ] && firewallWanZone="$1"; }
+_build_ifaces_all() { ifacesAll="${ifacesAll}${1} "; }
+_build_ifaces_supported() { is_supported_interface "$1" && ! str_contains "$ifacesSupported" "$1" && ifacesSupported="${ifacesSupported}${1} "; }
+pbr_find_iface() {
+       local iface i param="$2"
+       [ "$param" = 'wan6' ] || param='wan'
+       "network_find_${param}" iface
+       is_tunnel "$iface" && unset iface
+       if [ -z "$iface" ]; then
+               for i in $ifacesAll; do
+                       if "is_${param}" "$i"; then break; else unset i; fi
+               done
+       fi
+       eval "$1"='${iface:-$i}'
+}
+pbr_get_gateway() {
+       local iface="$2" dev="$3" gw
+       network_get_gateway gw "$iface" true
+       if [ -z "$gw" ] || [ "$gw" = '0.0.0.0' ]; then
+#              gw="$(ubus call "network.interface.${iface}" status | jsonfilter -e "@.route[0].nexthop")"
+               gw="$($ip_bin -4 a list dev "$dev" 2>/dev/null | grep inet | awk '{print $2}' | awk -F "/" '{print $1}')"
+       fi
+       eval "$1"='$gw'
+}
+pbr_get_gateway6() {
+       local iface="$2" dev="$3" gw
+       network_get_gateway6 gw "$iface" true
+       if [ -z "$gw" ] || [ "$gw" = '::/0' ] || [ "$gw" = '::0/0' ] || [ "$gw" = '::' ]; then
+               gw="$($ip_bin -6 a list dev "$dev" 2>/dev/null | grep inet6 | grep 'scope global' | awk '{print $2}')"
+       fi
+       eval "$1"='$gw'
+}
+is_dslite() { local proto; proto=$(uci -q get network."$1".proto); [ "${proto:0:6}" = "dslite" ]; }
+is_l2tp() { local proto; proto=$(uci -q get network."$1".proto); [ "${proto:0:4}" = "l2tp" ]; }
+is_oc() { local proto; proto=$(uci -q get network."$1".proto); [ "${proto:0:11}" = "openconnect" ]; }
+# is_ovpn() { local dev; network_get_device dev "$1"; [ "${dev:0:3}" = "tun" ] || [ "${dev:0:3}" = "tap" ] || [ -f "/sys/devices/virtual/net/${dev}/tun_flags" ]; }
+is_ovpn() { local dev; dev="$(uci -q get "network.${1}.device")"; [ -z "$dev" ] && dev="$(uci -q get "network.${1}.dev")"; [ "${dev:0:3}" = "tun" ] || [ "${dev:0:3}" = "tap" ] || [ -f "/sys/devices/virtual/net/${dev}/tun_flags" ]; }
+is_valid_ovpn() { local dev_net dev_ovpn; dev_net="$(uci -q get "network.${1}.device")"; [ -z "$dev_net" ] && dev_net="$(uci -q get "network.${1}.dev")"; dev_ovpn="$(uci -q get "openvpn.${1}.dev")"; [ -n "$dev_net" ] && [ -n "$dev_ovpn" ] && [ "$dev_net" = "$dev_ovpn" ]; }
+is_pptp() { local proto; proto=$(uci -q get network."$1".proto); [ "${proto:0:4}" = "pptp" ]; }
+is_softether() { local dev; network_get_device dev "$1"; [ "${dev:0:4}" = "vpn_" ]; }
+is_tor() { [ "$(str_to_lower "$1")" = "tor" ]; }
+is_tor_running() {
+       local ret=0
+       if [ -s "/etc/tor/torrc" ]; then
+               json_load "$(ubus call service list "{ 'name': 'tor' }")"
+               json_select 'tor'; json_select 'instances'; json_select 'instance1';
+               json_get_var ret 'running'; json_cleanup
+       fi
+       if [ "$ret" = "0" ]; then return 1; else return 0; fi
+}
+is_wg() { local proto; proto=$(uci -q get network."$1".proto); [ "${proto:0:9}" = "wireguard" ]; }
+is_tunnel() { is_dslite "$1" || is_l2tp "$1" || is_oc "$1" || is_ovpn "$1" || is_pptp "$1" || is_softether "$1" || is_tor "$1" || is_wg "$1"; }
+is_wan() { [ "$1" = "$wanIface4" ] || { [ "${1##wan}" != "$1" ] && [ "${1##wan6}" = "$1" ]; } || [ "${1%%wan}" != "$1" ]; }
+is_wan6() { [ -n "$wanIface6" ] && [ "$1" = "$wanIface6" ] || [ "${1/#wan6}" != "$1" ] || [ "${1/%wan6}" != "$1" ]; }
+is_ignored_interface() { str_contains_word "$ignored_interface" "$1"; }
+is_supported_interface() { str_contains_word "$supported_interface" "$1" || { ! is_ignored_interface "$1" && { is_wan "$1" || is_wan6 "$1" || is_tunnel "$1"; }; } || is_ignore_target "$1"; }
+is_ignore_target() { [ "$(str_to_lower "$1")" = 'ignore' ]; }
+is_mac_address() { expr "$1" : '[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]:[0-9a-fA-F][0-9a-fA-F]$' >/dev/null; }
+is_ipv4() { expr "$1" : '[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*\.[0-9][0-9]*$' >/dev/null; }
+is_ipv6() { ! is_mac_address "$1" && str_contains "$1" ":"; }
+is_family_mismatch() { ( is_netmask "${1//!}" && is_ipv6 "${2//!}" ) || ( is_ipv6 "${1//!}" && is_netmask "${2//!}" ); }
+is_ipv6_link_local() { [ "${1:0:4}" = "fe80" ]; }
+is_ipv6_unique_local() { [ "${1:0:2}" = "fc" ] || [ "${1:0:2}" = "fd" ]; }
+is_ipv6_global() { [ "${1:0:4}" = "2001" ]; }
+# is_ipv6_global() { is_ipv6 "$1" && ! is_ipv6_link_local "$1" && ! is_ipv6_link_local "$1"; }
+is_list() { str_contains "$1" "," || str_contains "$1" " "; }
+is_netmask() { local ip="${1%/*}"; [ "$ip" != "$1" ] && is_ipv4 "$ip"; }
+is_domain() { ! is_ipv6 "$1" && str_contains "$1" '[a-zA-Z]'; }
+is_phys_dev() { [ "${1:0:1}" = "@" ] && ip l show | grep -E -q "^\\d+\\W+${1:1}"; }
+dnsmasq_kill() { killall -q -s HUP dnsmasq; }
+dnsmasq_restart() { output 3 'Restarting dnsmasq '; if /etc/init.d/dnsmasq restart >/dev/null 2>&1; then output_okn; else output_failn; fi; }
+is_default_dev() { [ "$1" = "$($ip_bin -4 r | grep -m1 'dev' | grep -Eso 'dev [^ ]*' | awk '{print $2}')" ]; }
+is_supported_iface_dev() { local n dev; for n in $ifacesSupported; do network_get_device dev "$n"; [ "$1" = "$dev" ] && return 0; done; return 1; }
+is_supported_protocol() { grep -o '^[^#]*' /etc/protocols | grep -w -v '0' | grep . | awk '{print $1}' | grep -q "$1"; }
+is_service_running_iptables() { [ -x "$iptables" ] && "$iptables" -t mangle -L | grep -q "${iptPrefix}_PREROUTING" >/dev/null 2>&1; }
+is_service_running_nft() { [ -x "$nft" ] && [ -n "$(get_mark_nft_chains)" ]; }
+# atomic
+# is_service_running_nft() { [ -x "$nft" ] && [ -s "$nftPermFile" ]; }
+is_service_running() { if is_nft; then is_service_running_nft; else is_service_running_iptables; fi; }
+is_netifd_table() { local iface="$1"; [ "$(uci -q get "network.${iface}.ip4table")" = "${packageName}_${iface%6}" ]; }
+get_rt_tables_id() { local iface="$1"; grep "${ipTablePrefix}_${iface}\$" '/etc/iproute2/rt_tables' | awk '{print $1;}'; }
+get_rt_tables_next_id() { echo "$(($(sort -r -n '/etc/iproute2/rt_tables' | grep -o -E -m 1 "^[0-9]+")+1))"; }
+_check_config() { local en; config_get_bool en "$1" 'enabled' 1; [ "$en" -gt 0 ] && _cfg_enabled=0; }
+is_config_enabled() {
+       local cfg="$1" _cfg_enabled=1
+       [ -n "$1" ] || return 1
+       config_load "$packageName"
+       config_foreach _check_config "$cfg"
+       return "$_cfg_enabled"
+}
+# shellcheck disable=SC2016
+resolveip_to_ipt() { resolveip "$@" | sed -n 'H;${x;s/\n/,/g;s/^,//;p;};d'; }
+resolveip_to_ipt4() { resolveip_to_ipt -4 "$@"; }
+resolveip_to_ipt6() { [ -n "$ipv6_enabled" ] && resolveip_to_ipt -6 "$@"; }
+# shellcheck disable=SC2016
+resolveip_to_nftset() { resolveip "$@" | sed -n 'H;${x;s/\n/,/g;s/^,//;p;};d' | tr '\n' ' '; }
+resolveip_to_nftset4() { resolveip_to_nftset -4 "$@"; }
+resolveip_to_nftset6() { [ -n "$ipv6_enabled" ] && resolveip_to_nftset -6 "$@"; }
+# shellcheck disable=SC2016
+ipv4_leases_to_nftset() { [ -s '/tmp/dhcp.leases' ] || return 1; grep "$1" '/tmp/dhcp.leases' | awk '{print $3}' | sed -n 'H;${x;s/\n/,/g;s/^,//;p;};d' | tr '\n' ' '; }
+# shellcheck disable=SC2016
+ipv6_leases_to_nftset() { [ -s '/tmp/hosts/odhcpd' ] || return 1; grep -v '^\#' '/tmp/hosts/odhcpd' | grep "$1" | awk '{print $1}' | sed -n 'H;${x;s/\n/,/g;s/^,//;p;};d' | tr '\n' ' '; }
+# shellcheck disable=SC3037
+ports_to_nftset() { echo -ne "$value"; }
+get_mark_ipt_chains() { [ -n "$(command -v iptables-save)" ] && iptables-save | grep ":${iptPrefix}_MARK_" | awk '{ print $1 }' | sed 's/://'; }
+get_mark_nft_chains() { [ -x "$nft" ] && "$nft" list table inet "$nftTable" 2>/dev/null | grep chain | grep "${nftPrefix}_mark_" | awk '{ print $2 }'; }
+get_ipsets() { [ -x "$(command -v ipset)" ] && ipset list | grep "${ipsPrefix}_" | awk '{ print $2 }'; }
+get_nft_sets() { [ -x "$nft" ] && "$nft" list table inet "$nftTable" 2>/dev/null | grep 'set' | grep "${nftPrefix}_" | awk '{ print $2 }'; }
+is_ipset_type_supported() { ipset help hash:"$1" >/dev/null 2>&1; }
+ubus_get_status() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@.${packageName}.instances.main.data.status.${1}"; }
+ubus_get_iface() { ubus call service list "{ 'name': '$packageName' }" | jsonfilter -e "@.${packageName}.instances.main.data.interfaces[@.name='${1}']${2:+.$2}"; }
+opkg_get_version() { grep -m1 -A1 "Package: $1$" '/usr/lib/opkg/status' | grep -m1 'Version: ' | sed 's|Version: \(.*\)|\1|'; }
+
+load_package_config() {
+       config_load "$packageName"
+       config_get      boot_timeout             'config' 'boot_timeout' '30'
+       config_get_bool enabled                  'config' 'enabled' '0'
+       config_get      fw_mask                  'config' 'fw_mask' 'ff0000'
+       config_get      icmp_interface           'config' 'icmp_interface'
+       config_get      ignored_interface        'config' 'ignored_interface'
+       config_get_bool ipv6_enabled             'config' 'ipv6_enabled' '0'
+       config_get      nft_user_set_policy      'config' 'nft_user_set_policy' 'memory'
+       config_get_bool nft_user_set_counter     'config' 'nft_user_set_counter' '0'
+       config_get      procd_boot_delay         'config' 'procd_boot_delay' '0'
+       config_get      resolver_set             'config' 'resolver_set'
+       config_get      rule_create_option       'config' 'rule_create_option' 'add'
+       config_get_bool secure_reload            'config' 'secure_reload' '1'
+       config_get_bool strict_enforcement       'config' 'strict_enforcement' '0'
+       config_get      supported_interface      'config' 'supported_interface'
+       config_get      verbosity                'config' 'verbosity' '2'
+       config_get      wan_ip_rules_priority    'config' 'wan_ip_rules_priority' '30000'
+       config_get      wan_mark                 'config' 'wan_mark' '010000'
+       fw_mask="0x${fw_mask}"
+       wan_mark="0x${wan_mark}"
+       [ -n "$ipv6_enabled" ] && [ "$ipv6_enabled" -eq 0 ] && unset ipv6_enabled
+       . /lib/functions/network.sh
+       . /usr/share/libubox/jshn.sh
+       mkdir -p "${dnsmasqFile%/*}"
+       if is_nft; then
+               fw_maskXor="$(printf '%#x' "$((fw_mask ^ 0xffffffff))")"
+               fw_maskXor="${fw_maskXor:-0xff00ffff}"
+               if [ "$nft_user_set_counter" -eq '0' ]; then
+                       unset nft_user_set_counter
+               fi
+       else
+               case $rule_create_option in
+                       insert|-i|-I) rule_create_option='-I';;
+                       add|-a|-A|*) rule_create_option='-A';;
+               esac
+       fi
+}
+
+load_environment() {
+       local param="$1" validation_result="$2"
+       load_package_config
+       case "$param" in
+               on_start)
+                       if [ -n "$validation_result" ] && [ "$validation_result" != '0' ]; then
+                               output "${_ERROR_}: The $packageName config validation failed!\\n"
+                               output "Please check if the '$packageConfigFile' contains correct values for config options.\\n"
+                               state add 'errorSummary' 'errorConfigValidation'
+                               return 1
+                       fi
+                       if [ "$enabled" -eq 0 ]; then
+                               state add 'errorSummary' 'errorServiceDisabled'
+                               return 1
+                       fi
+                       if [ ! -x "$ip_bin" ]; then
+                               state add 'errorSummary' 'errorNoIpFull'
+                               return 1
+                       fi
+                       if ! is_nft; then
+                               if [ -z "$iptables" ] || [ ! -x "$iptables" ]; then
+                                       state add 'errorSummary' 'errorNoIptables'
+                                       return 1
+                               fi
+                       fi
+                       rm -f "$packageLockFile"
+                       resolver 'check_support'
+               ;;
+               on_stop)
+                       touch "$packageLockFile"
+               ;;
+       esac
+       load_network "$param"
+}
+
+load_network() {
+       local i
+       config_load 'network'
+       [ -z "$ifacesAll" ] && config_foreach _build_ifaces_all 'interface'
+       if [ -z "$ifacesSupported" ]; then
+               config_load 'firewall'
+               config_foreach _find_firewall_wan_zone 'zone'
+               for i in $(uci -q get "firewall.${firewallWanZone}.network"); do
+                       is_supported_interface "$i" && ! str_contains "$ifacesSupported" "$1" && ifacesSupported="${ifacesSupported}${i} "
+               done
+               config_load 'network'
+               config_foreach _build_ifaces_supported 'interface'
+       fi
+       pbr_find_iface wanIface4 'wan'
+       [ -n "$ipv6_enabled" ] && pbr_find_iface wanIface6 'wan6'
+       [ -n "$wanIface4" ] && network_get_gateway wanGW4 "$wanIface4"
+       [ -n "$wanIface6" ] && network_get_gateway6 wanGW6 "$wanIface6"
+       wanGW="${wanGW4:-$wanGW6}"
+}
+
+is_wan_up() {
+       local sleepCount='1'
+       load_network
+       while [ -z "$wanGW" ] ; do
+               load_network
+               if [ $((sleepCount)) -gt $((boot_timeout)) ] || [ -n "$wanGW" ]; then break; fi
+               output "$serviceName waiting for wan gateway...\\n"
+               sleep 1
+               network_flush_cache
+               sleepCount=$((sleepCount+1))
+       done
+       if [ -n "$wanGW" ]; then
+               return 0
+       else
+               state add 'errorSummary' 'errorNoWanGateway'
+               return 1
+       fi
+}
+
+# shellcheck disable=SC2086
+ipt4() {
+       local d
+       [ -x "$iptables" ] || return 1
+       for d in "${*//-A/-D}" "${*//-I/-D}" "${*//-N/-F}" "${*//-N/-X}"; do 
+               [ "$d" != "$*" ] && "$iptables" $d >/dev/null 2>&1
+       done
+       d="$*"; "$iptables" $d >/dev/null 2>&1
+}
+
+# shellcheck disable=SC2086
+ipt6() {
+       local d
+       [ -n "$ipv6_enabled" ] || return 0
+       [ -x "$ip6tables" ] || return 1
+       for d in "${*//-A/-D}" "${*//-I/-D}" "${*//-N/-F}" "${*//-N/-X}"; do 
+               [ "$d" != "$*" ] && "$ip6tables" $d >/dev/null 2>&1
+       done
+       d="$*"
+       "$ip6tables" $d >/dev/null 2>&1
+}
+
+# shellcheck disable=SC2086
+ipt() {
+       local d failFlagIpv4=1 failFlagIpv6=1
+       [ -x "$iptables" ] || return 1
+       for d in "${*//-A/-D}" "${*//-I/-D}" "${*//-N/-F}" "${*//-N/-X}"; do 
+               if [ "$d" != "$*" ]; then
+                       "$iptables" $d >/dev/null 2>&1
+                       [ -x "$ip6tables" ] && "$ip6tables" $d >/dev/null 2>&1
+               fi
+       done
+       d="$*"; "$iptables" $d >/dev/null 2>&1 && failFlagIpv4=0;
+       if [ -n "$ipv6_enabled" ] && [ -x "$ip6tables" ]; then
+               "$ip6tables" $d >/dev/null 2>&1 && failFlagIpv6=0
+       fi
+       [ "$failFlagIpv4" -eq 0 ] || [ "$failFlagIpv6" -eq 0 ]
+}
+
+# shellcheck disable=SC2086
+ips4() { [ -x "$ipset" ] && "$ipset" "$@" >/dev/null 2>&1; }
+ips6() { [ -x "$ipset" ] && { if [ -n "$ipv6_enabled" ] && [ -n "$*" ]; then "$ipset" "$@" >/dev/null 2>&1; else return 1; fi; }; }
+ips() {
+       local command="$1" iface="$2" target="${3:-dst}" type="${4:-ip}" uid="$5" comment="$6" param="$7" mark="$7"
+       local ipset4 ipset6 i
+       local ipv4_error=1 ipv6_error=1
+       ipset4="${ipsPrefix}${iface:+_$iface}_4${target:+_$target}${type:+_$type}${uid:+_$uid}"
+       ipset6="${ipsPrefix}${iface:+_$iface}_6${target:+_$target}${type:+_$type}${uid:+_$uid}"
+
+       [ -x "$ipset" ] || return 1
+
+       if [ "${#ipset4}" -gt 31 ]; then 
+               state add 'errorSummary' 'errorIpsetNameTooLong' "$ipset4"
+               return 1
+       fi
+
+       case "$command" in
+               add)
+                       ips4 -q -! add "$ipset4" ["$param"] comment "$comment" && ipv4_error=0
+                       ips6 -q -! add "$ipset6" ["$param"] comment "$comment" && ipv6_error=0
+               ;;
+               add_agh_element)
+                       [ -n "$ipv6_enabled" ] || unset ipset6
+                       echo "${param}/${ipset4}${ipset6:+,$ipset6}" >> "$aghIpsetFile" && ipv4_error=0
+               ;;
+               add_dnsmasq_element)
+                       [ -n "$ipv6_enabled" ] || unset ipset6
+                       echo "ipset=/${param}/${ipset4}${ipset6:+,$ipset6} # $comment" >> "$dnsmasqFile" && ipv4_error=0
+               ;;
+               create)
+                       ips4 -q -! create "$ipset4" "hash:$type" comment && ipv4_error=0
+                       ips6 -q -! create "$ipset6" "hash:$type" comment family inet6 && ipv6_error=0
+               ;;
+               create_agh_set)
+                       ips4 -q -! create "$ipset4" "hash:$type" comment && ipv4_error=0
+                       ips6 -q -! create "$ipset6" "hash:$type" comment family inet6 && ipv6_error=0
+               ;;
+               create_dnsmasq_set)
+                       ips4 -q -! create "$ipset4" "hash:$type" comment && ipv4_error=0
+                       ips6 -q -! create "$ipset6" "hash:$type" comment family inet6 && ipv6_error=0
+               ;;
+               create_user_set)
+                       case "$type" in
+                               ip|net)
+                                       ips4 -q -! create "$ipset4" "hash:$type" comment && ipv4_error=0
+                                       ips6 -q -! create "$ipset6" "hash:$type" comment family inet6 && ipv6_error=0
+                                       case "$target" in
+                                               dst)
+                                                       ipt4 -t mangle -A "${iptPrefix}_PREROUTING" -m set --match-set "$ipset4" dst -g "${iptPrefix}_MARK_${mark}" && ipv4_error=0
+                                                       ipt6 -t mangle -A "${iptPrefix}_PREROUTING" -m set --match-set "$ipset6" dst -g "${iptPrefix}_MARK_${mark}" && ipv6_error=0
+                                               ;;
+                                               src)
+                                                       ipt4 -t mangle -A "${iptPrefix}_PREROUTING" -m set --match-set "$ipset4" src -g "${iptPrefix}_MARK_${mark}" && ipv4_error=0
+                                                       ipt6 -t mangle -A "${iptPrefix}_PREROUTING" -m set --match-set "$ipset6" src -g "${iptPrefix}_MARK_${mark}" && ipv6_error=0
+                                       ;;
+                                       esac
+                               ;;
+                               mac)
+                                       ips4 -q -! create "$ipset4" "hash:$type" comment && ipv4_error=0
+                                       ips6 -q -! create "$ipset6" "hash:$type" comment family inet6 && ipv4_error=0
+                                       ipt4 -t mangle -A "${iptPrefix}_PREROUTING" -m set --match-set "$ipset4" src -g "${iptPrefix}_MARK_${mark}" && ipv4_error=0
+                                       ipt6 -t mangle -A "${iptPrefix}_PREROUTING" -m set --match-set "$ipset6" src -g "${iptPrefix}_MARK_${mark}" && ipv6_error=0
+                               ;;
+                               esac
+               ;;
+               delete|destroy)
+                       ips4 -q -! destroy "$ipset4" && ipv4_error=0
+                       ips6 -q -! destroy "$ipset6" && ipv6_error=0
+               ;;
+               delete_user_set)
+                       ips4 -q -! destroy "$ipset4" && ipv4_error=0
+                       ips6 -q -! destroy "$ipset6" family inet6 && ipv6_error=0
+                       case "$type" in
+                               ip|net)
+                                       case "$target" in
+                                               dst)
+                                                       ipt4 -t mangle -D "${iptPrefix}_PREROUTING" -m set --match-set "$ipset4" dst -g "${iptPrefix}_MARK_${mark}" && ipv4_error=0
+                                                       ipt6 -t mangle -D "${iptPrefix}_PREROUTING" -m set --match-set "$ipset6" dst -g "${iptPrefix}_MARK_${mark}" && ipv6_error=0
+                                               ;;
+                                               src)
+                                                       ipt4 -t mangle -D "${iptPrefix}_PREROUTING" -m set --match-set "$ipset4" src -g "${iptPrefix}_MARK_${mark}" && ipv4_error=0
+                                                       ipt6 -t mangle -D "${iptPrefix}_PREROUTING" -m set --match-set "$ipset6" src -g "${iptPrefix}_MARK_${mark}" && ipv6_error=0
+                                       ;;
+                                       esac
+                               ;;
+                               mac)
+                                       ipt4 -t mangle -D "${iptPrefix}_PREROUTING" -m set --match-set "$ipset4" src -g "${iptPrefix}_MARK_${mark}" && ipv4_error=0
+                                       ipt6 -t mangle -D "${iptPrefix}_PREROUTING" -m set --match-set "$ipset6" src -g "${iptPrefix}_MARK_${mark}" && ipv6_error=0
+                               ;;
+                               esac
+               ;;
+               flush|flush_user_set)
+                       ips4 -q -! flush "$ipset4" && ipv4_error=0
+                       ips6 -q -! flush "$ipset6" && ipv6_error=0
+               ;;
+       esac
+       if [ "$ipv4_error" -eq '0' ] || [ "$ipv6_error" -eq '0' ]; then
+               return 0
+       else
+               return 1
+       fi
+}
+
+# atomic
+#nfta() { echo "$@" >> "$nftTempFile"; }
+#nfta4() { echo "$@" >> "$nftTempFile"; }
+#nfta6() { [ -z "$ipv6_enabled" ] || echo "$@" >> "$nftTempFile"; }
+#nft() { nfta "$@"; [ -x "$nft" ] && "$nft" "$@" >/dev/null 2>&1; }
+#nft4() { nfta "$@"; [ -x "$nft" ] && "$nft" "$@" >/dev/null 2>&1; }
+#nft6() { nfta "$@"; [ -n "$ipv6_enabled" ] || return 0; [ -x "$nft" ] && [ -n "$*" ] && "$nft" "$@" >/dev/null 2>&1; }
+nft() { [ -x "$nft" ] && "$nft" "$@" >/dev/null 2>&1; }
+nft4() { [ -x "$nft" ] && "$nft" "$@" >/dev/null 2>&1; }
+nft6() { [ -n "$ipv6_enabled" ] || return 0; [ -x "$nft" ] && [ -n "$*" ] && "$nft" "$@" >/dev/null 2>&1; }
+nftset() {
+       local command="$1" iface="$2" target="${3:-dst}" type="${4:-ip}" uid="$5" comment="$6" param="$7" mark="$7"
+       local nftset4 nftset6 i param4 param6
+       local ipv4_error=1 ipv6_error=1
+       nftset4="${nftPrefix}${iface:+_$iface}_4${target:+_$target}${type:+_$type}${uid:+_$uid}"
+       nftset6="${nftPrefix}${iface:+_$iface}_6${target:+_$target}${type:+_$type}${uid:+_$uid}"
+
+       [ -x "$nft" ] || return 1
+
+       if [ "${#nftset4}" -gt 255 ]; then 
+               state add 'errorSummary' 'errorNftsetNameTooLong' "$nftset4"
+               return 1
+       fi
+
+       case "$command" in
+               add)
+                       if is_netmask "$param" || is_ipv4 "$param" || is_ipv6 "$param" \
+                               || is_mac_address "$param" || is_list "$param"; then
+                               nft4 add element inet "$nftTable" "$nftset4" "{ $param }" && ipv4_error=0
+                               nft6 add element inet "$nftTable" "$nftset6" "{ $param }" && ipv6_error=0
+                       else
+                               if [ "$target" = 'src' ]; then
+                                       param4="$(ipv4_leases_to_nftset "$param")"
+                                       param6="$(ipv6_leases_to_nftset "$param")"
+                               fi
+                               [ -z "$param4" ] &&     param4="$(resolveip_to_nftset4 "$param")"
+                               [ -z "$param6" ] &&     param6="$(resolveip_to_nftset6 "$param")"
+                               if [ -z "$param4" ] && [ -z "$param6" ]; then
+                                       state add 'errorSummary' 'errorFailedToResolve' "$param"
+                               else
+                                       nft4 add element inet "$nftTable" "$nftset4" "{ $param4 }" && ipv4_error=0
+                                       nft6 add element inet "$nftTable" "$nftset6" "{ $param6 }" && ipv6_error=0
+                               fi
+                       fi
+               ;;
+               add_dnsmasq_element)
+                       [ -n "$ipv6_enabled" ] || unset nftset6
+                       echo "nftset=/${param}/4#inet#${nftTable}#${nftset4}${nftset6:+,6#inet#${nftTable}#$nftset6} # $comment" >> "$dnsmasqFile" && ipv4_error=0
+               ;;
+               create)
+                       case "$type" in
+                               ip|net)
+                                       nft4 add set inet "$nftTable" "$nftset4" "{ type ipv4_addr; counter; flags interval; auto-merge; comment \"$comment\"; }" && ipv4_error=0
+                                       nft6 add set inet "$nftTable" "$nftset6" "{ type ipv6_addr; counter; flags interval; auto-merge; comment \"$comment\"; }" && ipv6_error=0
+                                       ;;
+                               mac)
+                                       nft4 add set inet "$nftTable" "$nftset4" "{ type ether_addr; counter; flags interval; auto-merge; comment \"$comment\"; }" && ipv4_error=0
+                                       nft6 add set inet "$nftTable" "$nftset6" "{ type ether_addr; counter; flags interval; auto-merge; comment \"$comment\"; }" && ipv6_error=0
+                                       ;;
+                               esac
+               ;;
+               create_dnsmasq_set)
+                       nft4 add set inet "$nftTable" "$nftset4" "{ type ipv4_addr; counter; flags interval; auto-merge; comment \"$comment\"; }" && ipv4_error=0
+                       nft6 add set inet "$nftTable" "$nftset6" "{ type ipv6_addr; counter; flags interval; auto-merge; comment \"$comment\"; }" && ipv6_error=0
+               ;;
+               create_user_set)
+                       case "$type" in
+                               ip|net)
+                                       nft4 add set inet "$nftTable" "$nftset4" "{ type ipv4_addr; ${nft_user_set_counter:+counter;} flags interval; auto-merge; policy $nft_user_set_policy; comment \"$comment\"; }" && ipv4_error=0
+                                       nft6 add set inet "$nftTable" "$nftset6" "{ type ipv6_addr; ${nft_user_set_counter:+counter;} flags interval; auto-merge; policy $nft_user_set_policy; comment \"$comment\"; }" && ipv6_error=0
+                                       case "$target" in
+                                               dst)
+                                                       nft add rule inet "$nftTable" "${nftPrefix}_prerouting" ip daddr "@${nftset4}" goto "${nftPrefix}_mark_${mark}" && ipv4_error=0
+                                                       nft add rule inet "$nftTable" "${nftPrefix}_prerouting" ip daddr "@${nftset6}" goto "${nftPrefix}_mark_${mark}" && ipv6_error=0
+                                               ;;
+                                               src)
+                                                       nft add rule inet "$nftTable" "${nftPrefix}_prerouting" ip saddr "@${nftset4}" goto "${nftPrefix}_mark_${mark}" && ipv4_error=0
+                                                       nft add rule inet "$nftTable" "${nftPrefix}_prerouting" ip saddr "@${nftset6}" goto "${nftPrefix}_mark_${mark}" && ipv6_error=0
+                                               ;;
+                                       esac
+                                       ;;
+                               mac)
+                                       nft4 add set inet "$nftTable" "$nftset4" "{ type ether_addr; ${nft_user_set_counter:+counter;} flags interval; auto-merge; policy $nft_user_set_policy; comment \"$comment\"; }" && ipv4_error=0
+                                       nft6 add set inet "$nftTable" "$nftset6" "{ type ether_addr; ${nft_user_set_counter:+counter;} flags interval; auto-merge; policy $nft_user_set_policy; comment \"$comment\"; }" && ipv6_error=0
+                                       nft add rule inet "$nftTable" "${nftPrefix}_prerouting" ether saddr "@${nftset4}" goto "${nftPrefix}_mark_${mark}" && ipv4_error=0
+                                       nft add rule inet "$nftTable" "${nftPrefix}_prerouting" ether saddr "@${nftset6}" goto "${nftPrefix}_mark_${mark}" && ipv6_error=0
+                                       ;;
+                               esac
+               ;;
+               delete|destroy)
+                       nft delete set inet "$nftTable" "$nftset4" && ipv4_error=0
+                       nft delete set inet "$nftTable" "$nftset6" && ipv6_error=0
+               ;;
+               delete_user_set)
+                       nft delete set inet "$nftTable" "$nftset4" && ipv4_error=0
+                       nft delete set inet "$nftTable" "$nftset6" && ipv6_error=0
+                       case "$type" in
+                               ip|net)
+                                       case "$target" in
+                                               dst)
+                                                       nft delete rule inet "$nftTable" "${nftPrefix}_prerouting" ip daddr "@${nftset4}" goto "${nftPrefix}_mark_${mark}" && ipv4_error=0
+                                                       nft delete rule inet "$nftTable" "${nftPrefix}_prerouting" ip daddr "@${nftset6}" goto "${nftPrefix}_mark_${mark}" && ipv6_error=0
+                                               ;;
+                                               src)
+                                                       nft delete rule inet "$nftTable" "${nftPrefix}_prerouting" ip saddr "@${nftset4}" goto "${nftPrefix}_mark_${mark}" && ipv4_error=0
+                                                       nft delete rule inet "$nftTable" "${nftPrefix}_prerouting" ip saddr "@${nftset6}" goto "${nftPrefix}_mark_${mark}" && ipv6_error=0
+                                               ;;
+                                       esac
+                                       ;;
+                               mac)
+                                       nft delete rule inet "$nftTable" "${nftPrefix}_prerouting" ether saddr "@${nftset4}" goto "${nftPrefix}_mark_${mark}" && ipv4_error=0
+                                       nft delete rule inet "$nftTable" "${nftPrefix}_prerouting" ether saddr "@${nftset6}" goto "${nftPrefix}_mark_${mark}" && ipv6_error=0
+                                       ;;
+                               esac
+               ;;
+               flush|flush_user_set)
+                       nft flush set inet "$nftTable" "$nftset4" && ipv4_error=0
+                       nft flush set inet "$nftTable" "$nftset6" && ipv6_error=0
+               ;;
+       esac
+# nft6 returns true if IPv6 support is not enabled
+       [ -z "$ipv6_enabled" ] && ipv6_error='1'
+       if [ "$ipv4_error" -eq '0' ] || [ "$ipv6_error" -eq '0' ]; then
+               return 0
+       else
+               return 1
+       fi
+}
+
+cleanup_rt_tables() { sed -i '/pbr_/d' '/etc/iproute2/rt_tables'; sync; }
+cleanup_dnsmasq() { [ -s "$dnsmasqFile" ] && resolverStoredHash="$(md5sum $dnsmasqFile | awk '{ print $1; }')" && rm "$dnsmasqFile" >/dev/null 2>&1; }
+
+cleanup_main_chains() {
+       local i
+       for i in $chainsList; do
+               i="$(str_to_lower "$i")"
+               nft flush chain inet "$nftTable" "${nftPrefix}_${i}"
+       done
+       for i in $chainsList; do
+               i="$(str_to_upper "$i")"
+               ipt -t mangle -D "${i}" -m mark --mark "0x0/${fw_mask}" -j "${iptPrefix}_${i}"
+               ipt -t mangle -F "${iptPrefix}_${i}"
+               ipt -t mangle -X "${iptPrefix}_${i}"
+       done
+}
+
+cleanup_marking_chains() {
+       local i
+       for i in $(get_mark_nft_chains); do
+               nft flush chain inet "$nftTable" "$i"
+               nft delete chain inet "$nftTable" "$i"
+       done
+       for i in $(get_mark_ipt_chains); do
+               ipt -t mangle -F "$i"
+               ipt -t mangle -X "$i"
+       done
+}
+
+cleanup_sets() {
+       local i
+       for i in $(get_nft_sets); do
+               nft flush set inet "$nftTable" "$i"
+               nft delete set inet "$nftTable" "$i"
+       done
+       for i in $(get_ipsets); do
+               ipset -q -! flush "$i" >/dev/null 2>&1
+               ipset -q -! destroy "$i" >/dev/null 2>&1
+       done
+}
+
+state() {
+       local action="$1" param="$2" value="${3//#/_}"
+       shift 3
+# shellcheck disable=SC2124
+       local extras="$@"
+       local line error_id error_extra label
+       case "$action" in
+               add)
+                       line="$(eval echo "\$$param")"
+                       eval "$param"='${line:+$line#}${value}${extras:+ $extras}'
+               ;;
+               json)
+                       json_init
+                       json_add_object "$packageName"
+                       case "$param" in
+                               errorSummary)
+                                       json_add_array 'errors';;
+                               warningSummary)
+                                       json_add_array 'warnings';;
+                       esac
+                       if [ -n "$(eval echo "\$$param")" ]; then
+                               while read -r line; do
+                                       if str_contains "$line" ' '; then
+                                               error_id="${line% *}"
+                                               error_extra="${line#* }"
+                                       else
+                                               error_id="$line"
+                                       fi
+                                       json_add_object
+                                       json_add_string 'id' "$error_id"
+                                       json_add_string 'extra' "$error_extra"
+                                       json_close_object
+                               done <<EOF
+$(eval echo "\$$param" | tr \# \\n)
+EOF
+                       fi
+                       json_close_array
+                       json_close_object
+                       json_dump
+               ;;
+               print)
+                       [ -z "$(eval echo "\$$param")" ] && return 0
+                       case "$param" in
+                               errorSummary)
+                                       label="${_ERROR_}:";;
+                               warningSummary)
+                                       label="${_WARNING_}:";;
+                       esac
+                               while read -r line; do
+                                       if str_contains "$line" ' '; then
+                                               error_id="${line% *}"
+                                               error_extra="${line#* }"
+                                               printf "%b $(get_text "$error_id")\\n" "$label" "$error_extra"
+                                       else
+                                               error_id="$line"
+                                               printf "%b $(get_text "$error_id")\\n" "$label"
+                                       fi
+                               done <<EOF
+$(eval echo "\$$param" | tr \# \\n)
+EOF
+               ;;
+               set)
+                       eval "$param"='${value}${extras:+ $extras}'
+               ;;
+       esac
+}
+
+resolver() {
+       local agh_version
+       local param="$1"
+       shift
+
+       if [ "$param" = 'cleanup_all' ]; then
+               sed -i "/ipset_file: ${aghIpsetFile}/d" "$aghConfigFile" >/dev/null 2>&1
+               rm -f "$aghIpsetFile"
+               rm -f "$dnsmasqFile"
+               return 0
+       fi
+
+       case "$resolver_set" in
+               ''|none)
+                       case "$param" in
+                               add_resolver_element) return 1;;
+                               create_resolver_set) return 1;;
+                               check_support) return 0;;
+                               cleanup) return 0;;
+                               configure) return 0;;
+                               init) return 0;;
+                               init_end) return 0;;
+                               kill) return 0;;
+                               reload) return 0;;
+                               restart) return 0;;
+                               compare_hash) return 0;;
+                               store_hash) return 0;;
+                       esac
+               ;;
+               adguardhome.ipset)
+                       case "$param" in
+                               add_resolver_element)
+                                       [ -n "$resolver_set_supported" ] && ips 'add_agh_element' "$@";;
+                               create_resolver_set)
+                                       [ -n "$resolver_set_supported" ] && ips 'create_agh_set' "$@";;
+                               check_support)
+                                       if [ ! -x "$ipset" ]; then
+                                               state add 'errorSummary' 'errorNoIpset'
+                                               return 1
+                                       fi
+                                       if [ -n "$agh" ] && [ -s "$aghConfigFile" ]; then
+                                               agh_version="$($agh --version | sed 's|AdGuard Home, version v\(.*\)|\1|' | sed 's|-.*||')"
+                                               if is_greater_or_equal "$agh_version" '0.107.13'; then
+                                                       resolver_set_supported='true'
+                                                       return 0
+                                               else
+                                                       state add 'warningSummary' 'warningAGHVersionTooLow' "$agh_version"
+                                                       return 1
+                                               fi
+                                       else
+                                               state add 'warningSummary' 'warningResolverNotSupported'
+                                               return 1
+                                       fi
+                               ;;
+                               cleanup)
+                                       [ -z "$resolver_set_supported" ] && return 0
+                                       rm -f "$aghIpsetFile"
+                                       sed -i "/ipset_file: ${aghIpsetFile}/d" "$aghConfigFile" >/dev/null 2>&1
+                                       ;;
+                               configure)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       mkdir -p "${aghIpsetFile%/*}"
+                                       touch "$aghIpsetFile"
+                                       sed -i '/ipset_file/d' "$aghConfigFile" >/dev/null 2>&1
+                                       sed -i "/  ipset:/a \ \ ipset_file: $aghIpsetFile" "$aghConfigFile"
+                               ;;
+                               init) :;;
+                               init_end) :;;
+                               kill)
+                                       [ -n "$resolver_set_supported" ] && [ -n "$agh" ] && killall -q -s HUP "$agh";;
+                               reload)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       output 3 'Reloading adguardhome '
+                                       if /etc/init.d/adguardhome reload >/dev/null 2>&1; then
+                                               output_okn
+                                               return 0
+                                       else
+                                               output_failn
+                                               return 1
+                                       fi
+                               ;;
+                               restart)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       output 3 'Restarting adguardhome '
+                                       if /etc/init.d/adguardhome restart >/dev/null 2>&1; then
+                                               output_okn
+                                               return 0
+                                       else
+                                               output_failn
+                                               return 1
+                                       fi
+                               ;;
+                               compare_hash)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       local resolverNewHash
+                                       if [ -s "$aghIpsetFile" ]; then
+                                               resolverNewHash="$(md5sum $aghIpsetFile | awk '{ print $1; }')"
+                                       fi
+                                       [ "$resolverNewHash" != "$resolverStoredHash" ]
+                               ;;
+                               store_hash)
+                                       [ -s "$aghIpsetFile" ] && resolverStoredHash="$(md5sum $aghIpsetFile | awk '{ print $1; }')";;
+                       esac
+               ;;
+               dnsmasq.ipset)
+                       case "$param" in
+                               add_resolver_element)
+                                       [ -n "$resolver_set_supported" ] && ips 'add_dnsmasq_element' "$@";;
+                               create_resolver_set)
+                                       [ -n "$resolver_set_supported" ] && ips 'create_dnsmasq_set' "$@";;
+                               check_support)
+                                       if [ ! -x "$ipset" ]; then
+                                               state add 'errorSummary' 'errorNoIpset'
+                                               return 1
+                                       fi
+                                       if ! dnsmasq -v 2>/dev/null | grep -q 'no-ipset' && dnsmasq -v 2>/dev/null | grep -q 'ipset'; then
+                                               resolver_set_supported='true'
+                                               return 0
+                                       else
+                                               state add 'warningSummary' 'warningResolverNotSupported'
+                                               return 1
+                                       fi
+                               ;;
+                               cleanup)
+                                       [ -n "$resolver_set_supported" ] && rm -f "$dnsmasqFile";;
+                               configure)
+                                       [ -n "$resolver_set_supported" ] && mkdir -p "${dnsmasqFile%/*}";;
+                               init) :;;
+                               init_end) :;;
+                               kill)
+                                       [ -n "$resolver_set_supported" ] && killall -q -s HUP dnsmasq;;
+                               reload)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       output 3 'Reloading dnsmasq '
+                                       if /etc/init.d/dnsmasq reload >/dev/null 2>&1; then
+                                               output_okn
+                                               return 0
+                                       else
+                                               output_failn
+                                               return 1
+                                       fi
+                               ;;
+                               restart)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       output 3 'Restarting dnsmasq '
+                                       if /etc/init.d/dnsmasq restart >/dev/null 2>&1; then
+                                               output_okn
+                                               return 0
+                                       else
+                                               output_failn
+                                               return 1
+                                       fi
+                               ;;
+                               compare_hash)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       local resolverNewHash
+                                       if [ -s "$dnsmasqFile" ]; then
+                                               resolverNewHash="$(md5sum $dnsmasqFile | awk '{ print $1; }')"
+                                       fi
+                                       [ "$resolverNewHash" != "$resolverStoredHash" ]
+                               ;;
+                               store_hash)
+                                       [ -s "$dnsmasqFile" ] && resolverStoredHash="$(md5sum $dnsmasqFile | awk '{ print $1; }')";;
+                       esac
+               ;;
+               dnsmasq.nftset)
+                       case "$param" in
+                               add_resolver_element)
+                                       [ -n "$resolver_set_supported" ] && nftset 'add_dnsmasq_element' "$@";;
+                               create_resolver_set)
+                                       [ -n "$resolver_set_supported" ] && nftset 'create_dnsmasq_set' "$@";;
+                               check_support)
+                                       if [ ! -x "$nft" ]; then
+                                               state add 'errorSummary' 'errorNoNft'
+                                               return 1
+                                       fi
+                                       if ! dnsmasq -v 2>/dev/null | grep -q 'no-nftset' && dnsmasq -v 2>/dev/null | grep -q 'nftset'; then
+                                               resolver_set_supported='true'
+                                               return 0
+                                       else
+                                               state add 'warningSummary' 'warningResolverNotSupported'
+                                               return 1
+                                       fi
+                               ;;
+                               cleanup)
+                                       [ -n "$resolver_set_supported" ] && rm -f "$dnsmasqFile";;
+                               configure)
+                                       [ -n "$resolver_set_supported" ] && mkdir -p "${dnsmasqFile%/*}";;
+                               init) :;;
+                               init_end) :;;
+                               kill)
+                                       [ -n "$resolver_set_supported" ] && killall -q -s HUP dnsmasq;;
+                               reload)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       output 3 'Reloading dnsmasq '
+                                       if /etc/init.d/dnsmasq reload >/dev/null 2>&1; then
+                                               output_okn
+                                               return 0
+                                       else
+                                               output_failn
+                                               return 1
+                                       fi
+                               ;;
+                               restart)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       output 3 'Restarting dnsmasq '
+                                       if /etc/init.d/dnsmasq restart >/dev/null 2>&1; then
+                                               output_okn
+                                               return 0
+                                       else
+                                               output_failn
+                                               return 1
+                                       fi
+                               ;;
+                               compare_hash)
+                                       [ -z "$resolver_set_supported" ] && return 1
+                                       local resolverNewHash
+                                       if [ -s "$dnsmasqFile" ]; then
+                                               resolverNewHash="$(md5sum $dnsmasqFile | awk '{ print $1; }')"
+                                       fi
+                                       [ "$resolverNewHash" != "$resolverStoredHash" ]
+                               ;;
+                               store_hash)
+                                       [ -s "$dnsmasqFile" ] && resolverStoredHash="$(md5sum $dnsmasqFile | awk '{ print $1; }')";;
+                       esac
+               ;;
+               unbound.ipset)
+                       case "$param" in
+                               add_resolver_element) :;;
+                               create_resolver_set) :;;
+                               check_support) :;;
+                               cleanup) :;;
+                               configure) :;;
+                               init) :;;
+                               init_end) :;;
+                               kill) :;;
+                               reload) :;;
+                               restart) :;;
+                               compare_hash) :;;
+                               store_hash) :;;
+                       esac
+               ;;
+               unbound.nftset)
+                       case "$param" in
+                               add_resolver_element) :;;
+                               create_resolver_set) :;;
+                               check_support) :;;
+                               cleanup) :;;
+                               configure) :;;
+                               init) :;;
+                               init_end) :;;
+                               kill) :;;
+                               reload) :;;
+                               restart) :;;
+                               compare_hash) :;;
+                               store_hash) :;;
+                       esac
+               ;;
+       esac
+}
+
+trap_process() {
+       output "\\n"
+       output "Unexpected exit or service termination: '${1}'!\\n"
+       state add 'errorSummary' 'errorUnexpectedExit' "$1"
+       traffic_killswitch 'remove'
+}
+
+traffic_killswitch() {
+       local s=0
+       case "$1" in
+               insert)
+                       local lan_subnet wan_device
+                       [ "$secure_reload" -ne 0 ] || return 0
+                       for i in $serviceTrapSignals; do
+# shellcheck disable=SC2064
+                               trap "trap_process $i" "$i"
+                       done
+                       output 3 'Activating traffic killswitch '
+                       network_get_subnet lan_subnet 'lan'
+                       network_get_physdev wan_device 'wan'
+                       if is_nft; then
+                               nft add chain inet "$nftTable" "${nftPrefix}_killswitch" '{ type filter hook forward priority 0; policy accept; }' || s=1
+                               nft add rule inet "$nftTable" "${nftPrefix}_killswitch" oifname "$wan_device" ip saddr "$lan_subnet" counter reject || s=1
+                       else
+                               ipt -N "${iptPrefix}_KILLSWITCH" || s=1
+                               ipt -A "${iptPrefix}_KILLSWITCH" -s "$lan_subnet" -o "$wan_device" -j REJECT || s=1
+                               ipt -I FORWARD -j "${iptPrefix}_KILLSWITCH" || s=1
+                       fi
+                       if [ "$s" -eq 0 ]; then
+                               output_okn
+                       else
+                               output_failn
+                       fi
+               ;;
+               remove)
+                       if [ "$secure_reload" -ne 0 ]; then
+                               output 3 'Deactivating traffic killswitch '
+                       fi
+                       if is_nft; then
+                               nft flush chain inet "$nftTable" "${nftPrefix}_killswitch" || s=1
+                               nft delete chain inet "$nftTable" "${nftPrefix}_killswitch" || s=1
+                       else
+                               ipt -D FORWARD -j "${iptPrefix}_KILLSWITCH" || s=1
+                               ipt -F "${iptPrefix}_KILLSWITCH" || s=1
+                               ipt -X "${iptPrefix}_KILLSWITCH" || s=1
+                       fi
+                       if [ "$secure_reload" -ne 0 ]; then
+                               if [ "$s" -eq 0 ]; then
+                                       output_okn
+                               else
+                                       output_failn
+                               fi
+                       fi
+# shellcheck disable=SC2086
+                       trap - $serviceTrapSignals
+               ;;
+       esac
+}
+
+policy_routing_tor() { if is_nft; then policy_routing_tor_nft "$@"; else policy_routing_tor_iptables "$@"; fi; }
+policy_routing_tor_iptables() {
+       local comment="$1" iface="$2" src_addr="$3" src_port="$4" dest_addr="$5" dest_port="$6" proto chain uid="$9"
+       proto="$(str_to_lower "$7")"
+       chain="$(str_to_upper "$8")"
+       chain="${chain:-PREROUTING}"
+       if [ -n "${src_addr}${src_port}${dest_port}" ]; then
+               state add 'warningSummary' 'warningTorUnsetParams' "$comment"
+       fi
+       if [ -n "$proto" ] && [ "$proto" != "all" ]; then
+               state add 'warningSummary' 'warningTorUnsetProto' "$comment"
+       fi
+       if [ "$chain" != "PREROUTING" ]; then
+               state add 'warningSummary' 'warningTorUnsetChainIpt' "$comment"
+       fi
+       if ! resolver 'add_resolver_element' "$iface" 'dst' 'ip' '' "${comment}: $dest_addr" "$dest_addr"; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorResolver' "'add_resolver_element' '$iface' 'dst' 'ip' '${comment}: $dest_addr' '$dest_addr'"
+               return 1
+       fi
+       return 0
+}
+policy_routing_tor_nft() {
+       local comment="$1" iface="$2" src_addr="$3" src_port="$4" dest_addr="$5" dest_port="$6" proto chain uid="$9"
+       proto="$(str_to_lower "$7")"
+       chain="$(str_to_lower "$8")"
+       chain="${chain:-prerouting}"
+       if [ -n "${src_addr}${src_port}${dest_port}" ]; then
+               state add 'warningSummary' 'warningTorUnsetParams' "$comment"
+       fi
+       if [ -n "$proto" ] && [ "$proto" != "all" ]; then
+               state add 'warningSummary' 'warningTorUnsetProto' "$comment"
+       fi
+       if [ "$chain" != "prerouting" ]; then
+               state add 'warningSummary' 'warningTorUnsetChainNft' "$comment"
+       fi
+       if ! resolver 'add_resolver_element' "$iface" 'dst' 'ip' '' "${comment}: $dest_addr" "$dest_addr"; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorResolver' "'add_resolver_element' '$iface' 'dst' 'ip' '${comment}: $dest_addr' '$dest_addr'"
+               return 1
+       fi
+       return 0
+}
+
+policy_routing() { if is_nft; then policy_routing_nft "$@"; else policy_routing_iptables "$@"; fi; }
+policy_routing_iptables() {
+       local mark param4 param6 i negation value dest ipInsertOption="-A"
+       local ip4error='1' ip6error='1'
+       local name="$1" iface="$2" laddr="$3" lport="$4" raddr="$5" rport="$6" proto chain uid="$9"
+       proto="$(str_to_lower "$7")"
+       chain="$(str_to_upper "$8")"
+       chain="${chain:-PREROUTING}"
+       mark=$(eval echo "\$mark_${iface//-/_}")
+
+       if [ -n "$ipv6_enabled" ] && { is_ipv6 "$laddr" || is_ipv6 "$raddr"; }; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessNoIpv6' "$name"
+               return 1
+       fi
+
+       if [ -n "$mark" ]; then
+               dest="-g ${iptPrefix}_MARK_${mark}"
+       elif [ "$iface" = "ignore" ]; then
+               dest="-j RETURN"
+       else
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessUnknownFwmark' "$iface"
+               return 1
+       fi
+
+       if is_family_mismatch "$laddr" "$raddr"; then 
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessMismatchFamily' "${name}: '$laddr' '$raddr'"
+               return 1
+       fi
+
+       if [ -z "$proto" ]; then
+               if [ -n "${lport}${rport}" ]; then 
+                       proto='tcp udp'
+               else
+                       proto='all'
+               fi
+       fi
+
+       for i in $proto; do
+               if [ "$i" = 'all' ]; then
+                       param4="-t mangle ${ipInsertOption} ${iptPrefix}_${chain} $dest"
+                       param6="-t mangle ${ipInsertOption} ${iptPrefix}_${chain} $dest"
+               elif ! is_supported_protocol "$i"; then
+                       processPolicyError='true'
+                       state add 'errorSummary' 'errorPolicyProcessUnknownProtocol' "${name}: '$i'"
+                       return 1
+               else
+                       param4="-t mangle ${ipInsertOption} ${iptPrefix}_${chain} $dest -p $i"
+                       param6="-t mangle ${ipInsertOption} ${iptPrefix}_${chain} $dest -p $i"
+               fi
+
+               if [ -n "$laddr" ]; then
+                       if [ "${laddr:0:1}" = "!" ]; then
+                               negation='!'; value="${laddr:1}"
+                       else
+                               unset negation; value="$laddr";
+                       fi
+                       if is_phys_dev "$value"; then
+                               param4="$param4 $negation -m physdev --physdev-in ${value:1}"
+                               param6="$param6 $negation -m physdev --physdev-in ${value:1}"
+                       elif is_netmask "$value"; then
+                               local target='src' type='net'
+                               if ips 'create' "$iface" "$target" "$type" "$uid" "${name}: $laddr" && \
+                                       ips 'add' "$iface" "$target" "$type" "$uid" "${name}: $laddr" "$value"; then
+                                       param4="$param4 -m set $negation --match-set ${ipsPrefix}_${iface}_4_${target}_${type}_${uid} $target"
+                                       param6="$param6 -m set $negation --match-set ${ipsPrefix}_${iface}_6_${target}_${type}_${uid} $target"
+                               else
+                                       param4="$param4 $negation -s $value"
+                                       param6="$param6 $negation -s $value"
+                               fi
+                       elif is_mac_address "$value"; then
+                               local target='src' type='mac'
+                               if ips 'create' "$iface" "$target" "$type" "$uid" "${name}: $laddr" && \
+                                       ips 'add' "$iface" "$target" "$type" "$uid" "${name}: $laddr" "$value"; then
+                                       param4="$param4 -m set $negation --match-set ${ipsPrefix}_${iface}_4_${target}_${type}_${uid} $target"
+                                       param6="$param6 -m set $negation --match-set ${ipsPrefix}_${iface}_6_${target}_${type}_${uid} $target"
+                               else
+                                       param4="$param4 -m mac $negation --mac-source $value"
+                                       param6="$param6 -m mac $negation --mac-source $value"
+                               fi
+                       else
+                               local target='src' type='ip'
+                               if ips 'create' "$iface" "$target" "$type" "$uid" "${name}: $laddr" && \
+                                       ips 'add' "$iface" "$target" "$type" "$uid" "${name}: $laddr" "$value"; then
+                                       param4="$param4 -m set $negation --match-set ${ipsPrefix}_${iface}_4_${target}_${type}_${uid} $target"
+                                       param6="$param6 -m set $negation --match-set ${ipsPrefix}_${iface}_6_${target}_${type}_${uid} $target"
+                               else
+                                       local resolvedIP4 resolvedIP6
+                                       resolvedIP4="$(resolveip_to_ipt4 "$value")"
+                                       resolvedIP6="$(resolveip_to_ipt6 "$value")"
+                                       if [ -z "$resolvedIP4" ] && [ -z "$resolvedIP6" ]; then
+                                               state add 'errorSummary' 'errorFailedToResolve' "$value"
+                                       fi
+                                       param4="$param4 $negation -s $resolvedIP4"
+                                       param6="$param6 $negation -s $resolvedIP6"
+                               fi
+                       fi
+               fi
+
+               if [ -n "$lport" ]; then
+                       if [ "${lport:0:1}" = "!" ]; then
+                               negation='!'; value="${lport:1}"
+                       else
+                               unset negation; value="$lport";
+                       fi
+                       param4="$param4 -m multiport $negation --sport ${value//-/:}"
+                       param6="$param6 -m multiport $negation --sport ${value//-/:}"
+               fi
+
+               if [ -n "$raddr" ]; then 
+                       if [ "${raddr:0:1}" = "!" ]; then
+                               negation='!'; value="${raddr:1}"
+                       else
+                               unset negation; value="$raddr";
+                       fi
+                       if is_netmask "$value"; then
+                               local target='dst' type='net'
+                               if ips 'create' "$iface" "$target" "$type" "$uid" "${name}: $raddr" && \
+                                       ips 'add' "$iface" "$target" "$type" "$uid" "${name}: $raddr" "$value"; then
+                                       param4="$param4 -m set $negation --match-set ${ipsPrefix}_${iface}_4_${target}_${type}_${uid} $target"
+                                       param6="$param6 -m set $negation --match-set ${ipsPrefix}_${iface}_6_${target}_${type}_${uid} $target"
+                               else
+                                       param4="$param4 $negation -d $value"
+                                       param6="$param6 $negation -d $value"
+                               fi
+                       elif is_domain "$value"; then
+                               local target='dst' type='ip'
+                               if resolver 'create_resolver_set' "$iface" "$target" "$type" "$uid" "${name}: $raddr" && \
+                                       resolver 'add_resolver_element' "$iface" "$target" "$type" "$uid" "${name}: $raddr" "$value"; then
+                                       param4="$param4 -m set $negation --match-set ${ipsPrefix}_${iface}_4_${target}_${type}_${uid} $target"
+                                       param6="$param6 -m set $negation --match-set ${ipsPrefix}_${iface}_6_${target}_${type}_${uid} $target"
+                               elif ips 'create' "$iface" "$target" "$type" "$uid" "${name}: $raddr" && \
+                                       ips 'add' "$iface" "$target" "$type" "$uid" "${name}: $raddr" "$value"; then
+                                       param4="$param4 -m set $negation --match-set ${ipsPrefix}_${iface}_4_${target}_${type}_${uid} $target"
+                                       param6="$param6 -m set $negation --match-set ${ipsPrefix}_${iface}_6_${target}_${type}_${uid} $target"
+                               else
+                                       local resolvedIP4 resolvedIP6
+                                       resolvedIP4="$(resolveip_to_ipt4 "$value")"
+                                       resolvedIP6="$(resolveip_to_ipt6 "$value")"
+                                       if [ -z "$resolvedIP4" ] && [ -z "$resolvedIP6" ]; then
+                                               state add 'errorSummary' 'errorFailedToResolve' "$value"
+                                       fi
+                                       param4="$param4 $negation -d $resolvedIP4"
+                                       param6="$param6 $negation -d $resolvedIP6"
+                               fi
+                       else
+                               local target='dst' type='ip'
+                               if ips 'create' "$iface" "$target" "$type" "$uid" "${name}: $raddr" && \
+                                       ips 'add' "$iface" "$target" "$type" "$uid" "${name}: $raddr" "$value"; then
+                                       param4="$param4 -m set $negation --match-set ${ipsPrefix}_${iface}_4_${target}_${type}_${uid} $target"
+                                       param6="$param6 -m set $negation --match-set ${ipsPrefix}_${iface}_6_${target}_${type}_${uid} $target"
+                               else
+                                       param4="$param4 $negation -d $value"
+                                       param6="$param6 $negation -d $value"
+                               fi
+                       fi
+               fi
+
+               if [ -n "$rport" ]; then
+                       if [ "${rport:0:1}" = "!" ]; then
+                               negation='!'; value="${rport:1}"
+                       else
+                               unset negation; value="$rport";
+                       fi
+                       param4="$param4 -m multiport $negation --dport ${value//-/:}"
+                       param6="$param6 -m multiport $negation --dport ${value//-/:}"
+               fi
+
+               if [ -n "$name" ]; then
+                       param4="$param4 -m comment --comment $(str_extras_to_underscore "$name")"
+                       param6="$param6 -m comment --comment $(str_extras_to_underscore "$name")"
+               fi
+
+               local ipv4_error='0' ipv6_error='0'
+               if [ "$param4" = "$param6" ]; then
+                       ipt4 "$param4" || ipv4_error='1'
+               else
+                       ipt4 "$param4" || ipv4_error='1'
+                       ipt6 "$param6" || ipv6_error='1'
+               fi
+
+       if [ -n "$ipv6_enabled" ] && [ "$ipv4_error" -eq '1' ] && [ "$ipv6_error" -eq '1' ]; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessInsertionFailed' "$name"
+               state add 'errorSummary' 'errorPolicyProcessCMD' "iptables $param4"
+               state add 'errorSummary' 'errorPolicyProcessCMD' "iptables $param6"
+               logger -t "$packageName" "ERROR: iptables $param4"
+               logger -t "$packageName" "ERROR: iptables $param6"
+       elif [ -z "$ipv6_enabled" ] && [ "$ipv4_error" -eq '1' ]; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessInsertionFailedIpv4' "$name"
+               state add 'errorSummary' 'errorPolicyProcessCMD' "iptables $param4"
+               logger -t "$packageName" "ERROR: iptables $param4"
+       fi
+
+       done
+}
+policy_routing_nft() {
+       local mark i nftInsertOption='add'
+       local param4 param6 proto_i negation value dest
+       local ip4Flag='ip' ip6Flag='ip6'
+       local name="$1" iface="$2" laddr="$3" lport="$4" raddr="$5" rport="$6" proto chain uid="$9"
+       proto="$(str_to_lower "$7")"
+       chain="$(str_to_lower "$8")"
+       chain="${chain:-prerouting}"
+       mark=$(eval echo "\$mark_${iface//-/_}")
+
+       if [ -z "$ipv6_enabled" ] && { is_ipv6 "$src_addr" || is_ipv6 "$dest_addr"; }; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessNoIpv6' "$name"
+               return 1
+       fi
+
+       if [ -n "$mark" ]; then
+               dest="goto ${nftPrefix}_mark_${mark}"
+       elif [ "$iface" = "ignore" ]; then
+               dest="return"
+       else
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessUnknownFwmark' "$iface"
+               return 1
+       fi
+
+       if is_family_mismatch "$src_addr" "$dest_addr"; then 
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessMismatchFamily' "${name}: '$laddr' '$raddr'"
+               return 1
+       fi
+
+       if [ -z "$proto" ]; then
+               if [ -n "${src_port}${dest_port}" ]; then 
+                       proto='tcp udp'
+               else
+                       proto='all'
+               fi
+       fi
+
+       for proto_i in $proto; do
+               unset param4
+               unset param6
+               if [ "$proto_i" = 'all' ]; then
+                       unset proto_i
+               elif ! is_supported_protocol "$proto_i"; then
+                       processPolicyError='true'
+                       state add 'errorSummary' 'errorPolicyProcessUnknownProtocol' "${name}: '$proto_i'"
+                       return 1
+               fi
+
+               if [ -n "$src_addr" ]; then
+                       if [ "${src_addr:0:1}" = "!" ]; then
+                               negation='!='; value="${src_addr:1}"
+                       else
+                               unset negation; value="$src_addr";
+                       fi
+                       if is_phys_dev "$value"; then
+                               param4="$param4 iifname $negation ${value:1}"
+                               param6="$param6 iifname $negation ${value:1}"
+                       elif is_mac_address "$value"; then
+                               local target='src' type='mac'
+                               if nftset 'create' "$iface" "$target" "$type" "$uid" "$name" && \
+                                       nftset 'add' "$iface" "$target" "$type" "$uid" "$name" "$value"; then
+                                       param4="$param4 ether saddr $negation @${nftPrefix}_${iface}_4_${target}_${type}_${uid}"
+                                       param6="$param6 ether saddr $negation @${nftPrefix}_${iface}_6_${target}_${type}_${uid}"
+                               else
+                                       param4="$param4 ether saddr $negation $value"
+                                       param6="$param6 ether saddr $negation $value"
+                               fi
+                       else
+                               local target='src' type='ip'
+                               if nftset 'create' "$iface" "$target" "$type" "$uid" "$name" && \
+                                       nftset 'add' "$iface" "$target" "$type" "$uid" "$name" "$value"; then
+                                       param4="$param4 $ip4Flag saddr $negation @${nftPrefix}_${iface}_4_${target}_${type}_${uid}"
+                                       param6="$param6 $ip6Flag saddr $negation @${nftPrefix}_${iface}_6_${target}_${type}_${uid}"
+                               else
+                                       param4="$param4 $ip4Flag saddr $negation $value"
+                                       param6="$param6 $ip6Flag saddr $negation $value"
+                               fi
+                       fi
+               fi
+
+               if [ -n "$dest_addr" ]; then 
+                       if [ "${dest_addr:0:1}" = "!" ]; then
+                               negation='!='; value="${dest_addr:1}"
+                       else
+                               unset negation; value="$dest_addr";
+                       fi
+                       if is_phys_dev "$value"; then
+                               param4="$param4 oifname $negation ${value:1}"
+                               param6="$param6 oifname $negation ${value:1}"
+                       elif is_domain "$value"; then
+                               local target='dst' type='ip'
+                               if resolver 'create_resolver_set' "$iface" "$target" "$type" "$uid" "$name" && \
+                                       resolver 'add_resolver_element' "$iface" "$target" "$type" "$uid" "$name" "$value"; then
+                                       param4="$param4 $ip4Flag daddr $negation @${nftPrefix}_${iface}_4_${target}_${type}_${uid}"
+                                       param6="$param6 $ip6Flag daddr $negation @${nftPrefix}_${iface}_6_${target}_${type}_${uid}"
+                               elif nftset 'create' "$iface" "$target" "$type" "$uid" "$name" && \
+                                       nftset 'add' "$iface" "$target" "$type" "$uid" "$name" "$value"; then
+                                       param4="$param4 $ip4Flag daddr $negation @${nftPrefix}_${iface}_4_${target}_${type}_${uid}"
+                                       param6="$param6 $ip6Flag daddr $negation @${nftPrefix}_${iface}_6_${target}_${type}_${uid}"
+                               else
+                                       local resolvedIP4 resolvedIP6
+                                       resolvedIP4="$(resolveip_to_nftset4 "$value")"
+                                       resolvedIP6="$(resolveip_to_nftset6 "$value")"
+                                       if [ -z "$resolvedIP4" ] && [ -z "$resolvedIP6" ]; then
+                                               state add 'errorSummary' 'errorFailedToResolve' "$value"
+                                       fi
+                                       param4="$param4 $ip4Flag daddr $negation { $resolvedIP4 }"
+                                       param6="$param6 $ip6Flag daddr $negation { $resolvedIP6 }"
+                               fi
+                       else
+                               local target='dst' type='ip'
+                               if nftset 'create' "$iface" "$target" "$type" "$uid" "$name" && \
+                                       nftset 'add' "$iface" "$target" "$type" "$uid" "$name" "$value"; then
+                                       param4="$param4 $ip4Flag daddr $negation @${nftPrefix}_${iface}_4_${target}_${type}_${uid}"
+                                       param6="$param6 $ip6Flag daddr $negation @${nftPrefix}_${iface}_6_${target}_${type}_${uid}"
+                               else
+                                       param4="$param4 $ip4Flag daddr $negation $value"
+                                       param6="$param6 $ip6Flag daddr $negation $value"
+                               fi
+                       fi
+               fi
+
+               if [ -n "$src_port" ]; then
+                       if [ "${src_port:0:1}" = "!" ]; then
+                               negation='!='; value="${src_port:1}"
+                       else
+                               unset negation; value="$src_port";
+                       fi
+                       param4="$param4 ${proto_i:+$proto_i }sport $negation {$(ports_to_nftset "$value")}"
+                       param6="$param6 ${proto_i:+$proto_i }sport $negation {$(ports_to_nftset "$value")}"
+               fi
+
+               if [ -n "$dest_port" ]; then
+                       if [ "${dest_port:0:1}" = "!" ]; then
+                               negation='!='; value="${dest_port:1}"
+                       else
+                               unset negation; value="$dest_port";
+                       fi
+                       param4="$param4 ${proto_i:+$proto_i }dport $negation {$(ports_to_nftset "$value")}"
+                       param6="$param6 ${proto_i:+$proto_i }dport $negation {$(ports_to_nftset "$value")}"
+               fi
+
+               param4="$nftInsertOption rule inet $nftTable ${nftPrefix}_${chain} $param4 $dest comment \"$name\""
+               param6="$nftInsertOption rule inet $nftTable ${nftPrefix}_${chain} $param6 $dest comment \"$name\""
+
+               local ipv4_error='0' ipv6_error='0'
+               if [ "$nftPrevParam4" != "$param4" ]; then
+                       nft4 "$param4" || ipv4_error='1'
+                       nftPrevParam4="$param4"
+               fi
+               if [ "$nftPrevParam6" != "$param6" ]; then
+                       nft6 "$param6" || ipv6_error='1'
+                       nftPrevParam6="$param6"
+               fi
+
+       if [ -n "$ipv6_enabled" ] && [ "$ipv4_error" -eq '1' ] && [ "$ipv6_error" -eq '1' ]; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessInsertionFailed' "$name"
+               state add 'errorSummary' 'errorPolicyProcessCMD' "nft $param4"
+               state add 'errorSummary' 'errorPolicyProcessCMD' "nft $param6"
+               logger -t "$packageName" "ERROR: nft $param4"
+               logger -t "$packageName" "ERROR: nft $param6"
+       elif [ -z "$ipv6_enabled" ] && [ "$ipv4_error" -eq '1' ]; then
+               processPolicyError='true'
+               state add 'errorSummary' 'errorPolicyProcessInsertionFailedIpv4' "$name"
+               state add 'errorSummary' 'errorPolicyProcessCMD' "nft $param4"
+               logger -t "$packageName" "ERROR: nft $param4"
+       fi
+
+       done
+}
+
+policy_process() {
+       local i j uid="$9"
+       if [ -z "$uid" ]; then # first non-recursive call
+               [ "$enabled" -gt 0 ] || return 0
+               unset processPolicyError
+               uid="$1"
+               if is_nft; then
+                       chain="$(str_to_lower "$chain")"
+               else
+                       chain="$(str_to_upper "$chain")"
+               fi
+               proto="$(str_to_lower "$proto")"
+               [ "$proto" = 'auto' ] && unset proto
+               [ "$proto" = 'all' ] && unset proto
+               output 2 "Routing '$name' via $interface "
+               if [ -z "${src_addr}${src_port}${dest_addr}${dest_port}" ]; then
+                       state add 'errorSummary' 'errorPolicyNoSrcDest' "$name"
+                       output_fail; return 1;
+               fi
+               if [ -z "$interface" ]; then
+                       state add 'errorSummary' 'errorPolicyNoInterface' "$name"
+                       output_fail; return 1;
+               fi
+               if ! is_supported_interface "$interface"; then
+                       state add 'errorSummary' 'errorPolicyUnknownInterface' "$name"
+                       output_fail; return 1;
+               fi
+               src_port="${src_port//  / }"; src_port="${src_port// /,}"; src_port="${src_port//,\!/ !}"; 
+               dest_port="${dest_port//  / }"; dest_port="${dest_port// /,}"; dest_port="${dest_port//,\!/ !}";
+#              if is_nft; then
+#                      nftset 'flush' "$interface" "dst" "ip" "$uid"
+#                      nftset 'flush' "$interface" "src" "ip" "$uid"
+#                      nftset 'flush' "$interface" "src" "mac" "$uid"
+#              else
+#                      ips 'flush' "$interface" "dst" "ip" "$uid"
+#                      ips 'flush' "$interface" "src" "ip" "$uid"
+#                      ips 'flush' "$interface" "src" "mac" "$uid"
+#              fi
+               policy_process "$name" "$interface" "$src_addr" "$src_port" "$dest_addr" "$dest_port" "$proto" "$chain" "$uid"
+               if [ -n "$processPolicyError" ]; then
+                       output_fail
+               else
+                       output_ok
+               fi
+       else # recursive call, get options from passed variables
+               local name="$1" interface="$2" src_addr="$3" src_port="$4" dest_addr="$5" dest_port="$6" proto="$7" chain="$8"
+               if str_contains "$src_addr" '[ ;\{\}]'; then
+                       for i in $(str_extras_to_space "$src_addr"); do [ -n "$i" ] && policy_process "$name" "$interface" "$i" "$src_port" "$dest_addr" "$dest_port" "$proto" "$chain" "$uid"; done
+               elif str_contains "$src_port" '[ ;\{\}]'; then
+                       for i in $(str_extras_to_space "$src_port"); do [ -n "$i" ] && policy_process "$name" "$interface" "$src_addr" "$i" "$dest_addr" "$dest_port" "$proto" "$chain" "$uid"; done
+               elif str_contains "$dest_addr" '[ ;\{\}]'; then
+                       for i in $(str_extras_to_space "$dest_addr"); do [ -n "$i" ] && policy_process "$name" "$interface" "$src_addr" "$src_port" "$i" "$dest_port" "$proto" "$chain" "$uid"; done
+               elif str_contains "$dest_port" '[ ;\{\}]'; then
+                       for i in $(str_extras_to_space "$dest_port"); do [ -n "$i" ] && policy_process "$name" "$interface" "$src_addr" "$src_port" "$dest_addr" "$i" "$proto" "$chain" "$uid"; done
+               elif str_contains "$proto" '[ ;\{\}]'; then
+                       for i in $(str_extras_to_space "$proto"); do [ -n "$i" ] && policy_process "$name" "$interface" "$src_addr" "$src_port" "$dest_addr" "$dest_port" "$i" "$chain" "$uid"; done
+               else
+                       if is_tor "$interface"; then
+                               policy_routing_tor "$name" "$interface" "$src_addr" "$src_port" "$dest_addr" "$dest_port" "$proto" "$chain" "$uid"
+                       else
+                               policy_routing "$name" "$interface" "$src_addr" "$src_port" "$dest_addr" "$dest_port" "$proto" "$chain" "$uid"
+                       fi
+               fi
+       fi
+}
+
+interface_process_tor() { if is_nft; then interface_process_tor_nft "$@"; else interface_process_tor_iptables "$@"; fi; }
+interface_process_tor_iptables() {
+       local s=0 iface="$1" action="$2"
+       local displayText set_name4 set_name6
+       local dnsPort trafficPort
+       case "$action" in
+               reload)
+                       displayText="${iface}/53->${dnsPort}/80,443->${trafficPort}"
+                       gatewaySummary="${gatewaySummary}${displayText}\\n"
+                       ;;
+               destroy)
+                       for i in $chainsList; do
+                               i="$(str_to_upper "$i")"
+                               ipt -t nat -D "${i}" -m mark --mark "0x0/${fw_mask}" -j "${iptPrefix}_${i}"
+                               ipt -t nat -F "${iptPrefix}_${i}"; ipt -t nat -X "${iptPrefix}_${i}";
+                       done
+                       ;;
+               create)
+                       output 2 "Creating TOR redirects "
+                       dnsPort="$(grep -m1 DNSPort /etc/tor/torrc | awk -F: '{print $2}')"
+                       trafficPort="$(grep -m1 TransPort /etc/tor/torrc | awk -F: '{print $2}')"
+                       dnsPort="${dnsPort:-9053}"; trafficPort="${trafficPort:-9040}"; 
+                       for i in $chainsList; do
+                               i="$(str_to_upper "$i")"
+                               ipt -t nat -N "${iptPrefix}_${i}"
+                               ipt -t nat -A "$i" -m mark --mark "0x0/${fw_mask}" -j "${iptPrefix}_${i}"
+                       done
+                       if resolver 'create_resolver_set' "$iface" 'dst' 'ip' && ips 'flush' "$iface" 'dst' 'ip'; then
+                               set_name4="${ipsPrefix}_${iface}_4_dst_ip"
+                               for i in $chainsList; do
+                                       i="$(str_to_upper "$i")"
+                                       ipt -t nat -I "${iptPrefix}_${i}" -p udp -m udp --dport 53 -m set --match-set "${set_name4}" dst -j REDIRECT --to-ports "$dnsPort" -m comment --comment "TorDNS-UDP" || s=1
+                                       ipt -t nat -I "${iptPrefix}_${i}" -p tcp -m tcp --dport 80 -m set --match-set "${set_name4}" dst -j REDIRECT --to-ports "$trafficPort" -m comment --comment "TorHTTP-TCP" || s=1
+                                       ipt -t nat -I "${iptPrefix}_${i}" -p udp -m udp --dport 80 -m set --match-set "${set_name4}" dst -j REDIRECT --to-ports "$trafficPort" -m comment --comment "TorHTTP-UDP" || s=1
+                                       ipt -t nat -I "${iptPrefix}_${i}" -p tcp -m tcp --dport 443 -m set --match-set "${set_name4}" dst -j REDIRECT --to-ports "$trafficPort" -m comment --comment "TorHTTPS-TCP" || s=1
+                                       ipt -t nat -I "${iptPrefix}_${i}" -p udp -m udp --dport 443 -m set --match-set "${set_name4}" dst -j REDIRECT --to-ports "$trafficPort" -m comment --comment "TorHTTPS-UDP" || s=1
+                               done
+                       else
+                               s=1
+                       fi
+                       displayText="${iface}/53->${dnsPort}/80,443->${trafficPort}"
+                       if [ "$s" -eq 0 ]; then
+                               gatewaySummary="${gatewaySummary}${displayText}\\n"
+                               output_ok
+                       else
+                               state add 'errorSummary' 'errorFailedSetup' "$displayText"
+                               output_fail
+                       fi
+                       ;;
+       esac
+       return $s
+}
+interface_process_tor_nft() {
+       local s=0 iface="$1" action="$2"
+       local displayText set_name4 set_name6
+       local dnsPort trafficPort
+       case "$action" in
+               reload)
+                       displayText="${iface}/53->${dnsPort}/80,443->${trafficPort}"
+                       gatewaySummary="${gatewaySummary}${displayText}\\n"
+                       ;;
+               destroy)
+                       ;;
+               create)
+                       output 2 "Creating TOR redirects "
+                       dnsPort="$(grep -m1 DNSPort /etc/tor/torrc | awk -F: '{print $2}')"
+                       trafficPort="$(grep -m1 TransPort /etc/tor/torrc | awk -F: '{print $2}')"
+                       dnsPort="${dnsPort:-9053}"; trafficPort="${trafficPort:-9040}"; 
+                       if resolver 'create_resolver_set' "$iface" 'dst' 'ip' && nftset 'flush' "$iface" 'dst' 'ip'; then
+                               set_name4="${nftPrefix}_${iface}_4_dst_ip"
+                               set_name6="${nftPrefix}_${iface}_6_dst_ip"
+                               nft add rule inet "$nftTable" dstnat meta nfproto ipv4 ip daddr "@${set_name4}" udp dport 53 counter redirect to :"$dnsPort" comment "Tor-DNS-UDP-ipv4" || s=1
+                               nft add rule inet "$nftTable" dstnat meta nfproto ipv4 ip daddr "@${set_name4}" tcp dport 80 counter redirect to :"$trafficPort" comment "Tor-HTTP-TCP-ipv4" || s=1
+                               nft add rule inet "$nftTable" dstnat meta nfproto ipv4 ip daddr "@${set_name4}" udp dport 80 counter redirect to :"$trafficPort" comment "Tor-HTTP-UDP-ipv4" || s=1
+                               nft add rule inet "$nftTable" dstnat meta nfproto ipv4 ip daddr "@${set_name4}" tcp dport 443 counter redirect to :"$trafficPort" comment "Tor-HTTPS-TCP-ipv4" || s=1
+                               nft add rule inet "$nftTable" dstnat meta nfproto ipv4 ip daddr "@${set_name4}" udp dport 443 counter redirect to :"$trafficPort" comment "Tor-HTTPS-UDP-ipv4" || s=1
+                               nft6 add rule inet "$nftTable" dstnat meta nfproto ipv6 ip6 daddr "@${set_name6}" udp dport 53 counter redirect to :"$dnsPort" comment "Tor-DNS-UDP-ipv6" || s=1
+                               nft6 add rule inet "$nftTable" dstnat meta nfproto ipv6 ip6 daddr "@${set_name6}" tcp dport 80 counter redirect to :"$trafficPort" comment "Tor-HTTP-TCP-ipv6" || s=1
+                               nft6 add rule inet "$nftTable" dstnat meta nfproto ipv6 ip6 daddr "@${set_name6}" udp dport 80 counter redirect to :"$trafficPort" comment "Tor-HTTP-UDP-ipv6" || s=1
+                               nft6 add rule inet "$nftTable" dstnat meta nfproto ipv6 ip6 daddr "@${set_name6}" tcp dport 443 counter redirect to :"$trafficPort" comment "Tor-HTTPS-TCP-ipv6" || s=1
+                               nft6 add rule inet "$nftTable" dstnat meta nfproto ipv6 ip6 daddr "@${set_name6}" udp dport 443 counter redirect to :"$trafficPort" comment "Tor-HTTPS-UDP-ipv6" || s=1
+                       else
+                               s=1
+                       fi
+                       displayText="${iface}/53->${dnsPort}/80,443->${trafficPort}"
+                       if [ "$s" -eq 0 ]; then
+                               gatewaySummary="${gatewaySummary}${displayText}\\n"
+                               output_ok
+                       else
+                               state add 'errorSummary' 'errorFailedSetup' "$displayText"
+                               output_fail
+                       fi
+                       ;;
+       esac
+       return $s
+}
+
+interface_routing() {
+       local action="$1" tid="$2" mark="$3" iface="$4" gw4="$5" dev="$6" gw6="$7" dev6="$8" priority="$9"
+       local dscp s=0 i ipv4_error=1 ipv6_error=1
+       if [ -z "$tid" ] || [ -z "$mark" ] || [ -z "$iface" ]; then
+               state add 'errorSummary' 'errorInterfaceRoutingEmptyValues'
+               return 1
+       fi
+       case "$action" in
+               create)
+                       if is_netifd_table "$iface"; then
+                               ipv4_error=0
+                               $ip_bin rule del table "$tid" >/dev/null 2>&1
+                               $ip_bin -4 rule add fwmark "${mark}/${fw_mask}" table "$tid" priority "$priority" || ipv4_error=1
+                               if is_nft; then
+                                       nft add chain inet "$nftTable" "${nftPrefix}_mark_${mark}" || ipv4_error=1 
+                                       nft add rule inet "$nftTable" "${nftPrefix}_mark_${mark} counter mark set mark and ${fw_maskXor} xor ${mark}" || ipv4_error=1
+                                       nft add rule inet "$nftTable" "${nftPrefix}_mark_${mark} return" || ipv4_error=1
+                               else
+                                       ipt -t mangle -N "${iptPrefix}_MARK_${mark}" || ipv4_error=1
+                                       ipt -t mangle -A "${iptPrefix}_MARK_${mark}" -j MARK --set-xmark "${mark}/${fw_mask}" || ipv4_error=1
+                                       ipt -t mangle -A "${iptPrefix}_MARK_${mark}" -j RETURN || ipv4_error=1
+                               fi
+                               if [ -n "$ipv6_enabled" ]; then
+                                       ipv6_error=0
+                                       $ip_bin -6 rule add fwmark "${mark}/${fw_mask}" table "$tid" priority "$priority" || ipv6_error=1
+                               fi
+                       else
+                               if ! grep -q "$tid ${ipTablePrefix}_${iface}" '/etc/iproute2/rt_tables'; then
+                                       sed -i "/${ipTablePrefix}_${iface}/d" '/etc/iproute2/rt_tables'
+                                       sync
+                                       echo "$tid ${ipTablePrefix}_${iface}" >> '/etc/iproute2/rt_tables'
+                                       sync
+                               fi
+                               $ip_bin rule del table "$tid" >/dev/null 2>&1
+                               $ip_bin route flush table "$tid" >/dev/null 2>&1
+                               if [ -n "$gw4" ] || [ "$strict_enforcement" -ne 0 ]; then
+                                       ipv4_error=0
+                                       if [ -z "$gw4" ]; then
+                                               $ip_bin -4 route add unreachable default table "$tid" >/dev/null 2>&1 || ipv4_error=1
+                                       else
+                                               $ip_bin -4 route add default via "$gw4" dev "$dev" table "$tid" >/dev/null 2>&1 || ipv4_error=1
+                                       fi
+# shellcheck disable=SC2086
+                                       while read -r i; do
+                                               i="$(echo "$i" | sed 's/ linkdown$//')"
+                                               i="$(echo "$i" | sed 's/ onlink$//')"
+                                               idev="$(echo "$i" | grep -Eso 'dev [^ ]*' | awk '{print $2}')"
+                                               if ! is_supported_iface_dev "$idev"; then
+                                                       $ip_bin -4 route add $i table "$tid" >/dev/null 2>&1 || ipv4_error=1
+                                               fi
+                                       done << EOF
+                                       $($ip_bin -4 route list table main)
+EOF
+                                       $ip_bin -4 rule add fwmark "${mark}/${fw_mask}" table "$tid" priority "$priority" || ipv4_error=1
+                                       if is_nft; then
+                                               nft add chain inet "$nftTable" "${nftPrefix}_mark_${mark}" || ipv4_error=1 
+                                               nft add rule inet "$nftTable" "${nftPrefix}_mark_${mark} counter mark set mark and ${fw_maskXor} xor ${mark}" || ipv4_error=1
+                                               nft add rule inet "$nftTable" "${nftPrefix}_mark_${mark} return" || ipv4_error=1
+                                       else
+                                               ipt -t mangle -N "${iptPrefix}_MARK_${mark}" || ipv4_error=1
+                                               ipt -t mangle -A "${iptPrefix}_MARK_${mark}" -j MARK --set-xmark "${mark}/${fw_mask}" || ipv4_error=1
+                                               ipt -t mangle -A "${iptPrefix}_MARK_${mark}" -j RETURN || ipv4_error=1
+                                       fi
+                               fi
+                               if [ -n "$ipv6_enabled" ]; then
+                                       ipv6_error=0
+                                       if { [ -n "$gw6" ] && [ "$gw6" != "::/0" ]; } || [ "$strict_enforcement" -ne 0 ]; then
+                                               if [ -z "$gw6" ] || [ "$gw6" = "::/0" ]; then
+                                                       $ip_bin -6 route add unreachable default table "$tid" >/dev/null 2>&1 || ipv6_error=1
+                                               elif $ip_bin -6 route list table main | grep -q " dev $dev6 "; then
+                                                       while read -r i; do
+                                                               i="$(echo "$i" | sed 's/ linkdown$//')"
+                                                               i="$(echo "$i" | sed 's/ onlink$//')"
+                                                               # shellcheck disable=SC2086
+                                                               $ip_bin -6 route add $i table "$tid" >/dev/null 2>&1 || ipv6_error=1
+                                                       done << EOF
+                                                       $($ip_bin -6 route list table main | grep " dev $dev6 ")
+EOF
+                                               else
+                                                       $ip_bin -6 route add "$($ip_bin -6 -o a show "$dev6" | awk '{print $4}')" dev "$dev6" table "$tid" >/dev/null 2>&1 || ipv6_error=1
+                                                       $ip_bin -6 route add default dev "$dev6" table "$tid" >/dev/null 2>&1 || ipv6_error=1
+                                               fi
+                                       fi
+                                       $ip_bin -6 rule add fwmark "${mark}/${fw_mask}" table "$tid" priority "$priority" >/dev/null 2>&1 || ipv6_error=1
+                               fi
+                       fi
+                       if [ "$ipv4_error" -eq 0 ] || [ "$ipv6_error" -eq 0 ]; then
+                               dscp="$(uci -q get "${packageName}".config."${iface}"_dscp)"
+                               if is_nft; then
+                                       if [ "${dscp:-0}" -ge 1 ] && [ "${dscp:-0}" -le 63 ]; then
+                                               nft add rule inet "$nftTable" "${nftPrefix}_prerouting ip dscp ${dscp} goto ${nftPrefix}_mark_${mark}" || s=1
+                                       fi
+                                       if [ "$iface" = "$icmp_interface" ]; then
+                                               nft add rule inet "$nftTable" "${nftPrefix}_output ip protocol icmp goto ${nftPrefix}_mark_${mark}" || s=1
+                                       fi
+                               else
+                                       if [ "${dscp:-0}" -ge 1 ] && [ "${dscp:-0}" -le 63 ]; then
+                                               ipt -t mangle -I "${iptPrefix}_PREROUTING" -m dscp --dscp "${dscp}" -g "${iptPrefix}_MARK_${mark}" || s=1
+                                       fi
+                                       if [ "$iface" = "$icmp_interface" ]; then
+                                               ipt -t mangle -I "${iptPrefix}_OUTPUT" -p icmp -g "${iptPrefix}_MARK_${mark}" || s=1
+                                       fi
+                               fi
+                       else
+                               s=1
+                       fi
+                       return "$s"
+               ;;
+               create_user_set)
+                       if is_nft; then
+                               nftset 'create_user_set' "$iface" 'dst' 'ip' 'user' '' "$mark" || s=1
+                               nftset 'create_user_set' "$iface" 'src' 'ip' 'user' '' "$mark" || s=1
+                               nftset 'create_user_set' "$iface" 'src' 'mac' 'user' '' "$mark" || s=1
+                       else
+                               ips 'create_user_set' "$iface" 'dst' 'ip' 'user' '' "$mark" || s=1
+                               ips 'create_user_set' "$iface" 'src' 'ip' 'user' '' "$mark" || s=1
+                               ips 'create_user_set' "$iface" 'dst' 'net' 'user' '' "$mark" || s=1
+                               ips 'create_user_set' "$iface" 'src' 'net' 'user' '' "$mark" || s=1
+                               ips 'create_user_set' "$iface" 'src' 'mac' 'user' '' "$mark" || s=1
+                       fi
+                       return "$s"
+               ;;
+               delete|destroy)
+                       $ip_bin rule del table "$tid" >/dev/null 2>&1
+                       if ! is_netifd_table "$iface"; then
+                               $ip_bin route flush table "$tid" >/dev/null 2>&1
+                               sed -i "/${ipTablePrefix}_${iface}\$/d" '/etc/iproute2/rt_tables'
+                               sync
+                       fi
+                       return "$s"
+               ;;
+               reload_interface)
+                       is_netifd_table "$iface" && return 0;
+                       ipv4_error=0
+                       $ip_bin rule del table "$tid" >/dev/null 2>&1
+                       if ! is_netifd_table "$iface"; then
+                               $ip_bin route flush table "$tid" >/dev/null 2>&1
+                       fi
+                       if [ -n "$gw4" ] || [ "$strict_enforcement" -ne 0 ]; then
+                               if [ -z "$gw4" ]; then
+                                       $ip_bin -4 route add unreachable default table "$tid" >/dev/null 2>&1 || ipv4_error=1
+                               else
+                                       $ip_bin -4 route add default via "$gw4" dev "$dev" table "$tid" >/dev/null 2>&1 || ipv4_error=1
+                               fi
+                               $ip_bin rule add fwmark "${mark}/${fw_mask}" table "$tid" priority "$priority" || ipv4_error=1
+                       fi
+                       if [ -n "$ipv6_enabled" ]; then
+                               ipv6_error=0
+                               if { [ -n "$gw6" ] && [ "$gw6" != "::/0" ]; } || [ "$strict_enforcement" -ne 0 ]; then
+                                       if [ -z "$gw6" ] || [ "$gw6" = "::/0" ]; then
+                                               $ip_bin -6 route add unreachable default table "$tid" || ipv6_error=1
+                                       elif $ip_bin -6 route list table main | grep -q " dev $dev6 "; then
+                                               while read -r i; do
+                                                       # shellcheck disable=SC2086
+                                                       $ip_bin -6 route add $i table "$tid" >/dev/null 2>&1 || ipv6_error=1
+                                               done << EOF
+                                               $($ip_bin -6 route list table main | grep " dev $dev6 ")
+EOF
+                                       else
+                                               $ip_bin -6 route add "$($ip_bin -6 -o a show "$dev6" | awk '{print $4}')" dev "$dev6" table "$tid" >/dev/null 2>&1 || ipv6_error=1
+                                               $ip_bin -6 route add default dev "$dev6" table "$tid" >/dev/null 2>&1 || ipv6_error=1
+                                       fi
+                               fi
+                               $ip_bin -6 rule add fwmark "${mark}/${fw_mask}" table "$tid" priority "$priority" || ipv6_error=1
+                       fi
+                       if [ "$ipv4_error" -eq 0 ] || [ "$ipv6_error" -eq 0 ]; then
+                               s=0
+                       else
+                               s=1
+                       fi
+                       return "$s"
+               ;;
+       esac
+}
+
+json_add_gateway() {
+       local action="$1" tid="$2" mark="$3" iface="$4" gw4="$5" dev4="$6" gw6="$7" dev6="$8" priority="$9" default="${10}"
+       json_add_object ''
+       json_add_string name "$iface"
+       json_add_string device_ipv4 "$dev4"
+       json_add_string gateway_ipv4 "$gw4"
+       json_add_string device_ipv6 "$dev6"
+       json_add_string gateway_ipv6 "$gw6"
+       if [ -n "$default" ]; then
+               json_add_boolean default true
+       else
+               json_add_boolean default false
+       fi
+       json_add_string action "$action"
+       json_add_string table_id "$tid"
+       json_add_string mark "$mark"
+       json_add_string priority "$priority"
+       json_close_object
+}
+
+interface_process() {
+       local gw4 gw6 dev dev6 s=0 dscp iface="$1" action="$2" reloadedIface="$3"
+       local displayText dispDev dispGw4 dispGw6 dispStatus
+
+       if [ "$iface" = 'all' ] && [ "$action" = 'prepare' ]; then
+               config_load 'network'
+               ifaceMark="$(printf '0x%06x' "$wan_mark")"
+               ifacePriority="$wan_ip_rules_priority"
+               return 0
+       fi
+
+       is_supported_interface "$iface" || return 0
+       is_wan6 "$iface" && return 0
+       [ $((ifaceMark)) -gt $((fw_mask)) ] && return 1
+
+       if is_ovpn "$iface" && ! is_valid_ovpn "$iface"; then
+               : || state add 'warningSummary' 'warningInvalidOVPNConfig' "$iface"
+       fi
+
+       network_get_device dev "$iface"
+       [ -z "$dev" ] && network_get_physdev dev "$iface"
+       if is_wan "$iface" && [ -n "$wanIface6" ] && str_contains "$wanIface6" "$iface"; then
+               network_get_device dev6 "$wanIface6"
+               [ -z "$dev6" ] && network_get_physdev dev6 "$wanIface6"
+       fi
+
+       [ -z "$dev6" ] && dev6="$dev"
+       [ -z "$ifaceMark" ] && ifaceMark="$(printf '0x%06x' "$wan_mark")"
+       [ -z "$ifacePriority" ] && ifacePriority="$wan_ip_rules_priority"
+
+       ifaceTableID="$(get_rt_tables_id "$iface")"
+       [ -z "$ifaceTableID" ] && ifaceTableID="$(get_rt_tables_next_id)"
+       eval "mark_${iface//-/_}"='$ifaceMark'
+       eval "tid_${iface//-/_}"='$ifaceTableID'
+       pbr_get_gateway gw4 "$iface" "$dev"
+       pbr_get_gateway6 gw6 "$iface" "$dev6"
+       dispGw4="${gw4:-0.0.0.0}"
+       dispGw6="${gw6:-::/0}"
+       [ "$iface" != "$dev" ] && dispDev="$dev"
+       is_default_dev "$dev" && dispStatus="${__OK__}"
+       displayText="${iface}/${dispDev:+$dispDev/}${dispGw4}${ipv6_enabled:+/$dispGw6}"
+
+       case "$action" in
+               create)
+                       output 2 "Setting up routing for '$displayText' "
+                       if interface_routing 'create' "$ifaceTableID" "$ifaceMark" "$iface" "$gw4" "$dev" "$gw6" "$dev6" "$ifacePriority"; then
+                               json_add_gateway 'create' "$ifaceTableID" "$ifaceMark" "$iface" "$gw4" "$dev" "$gw6" "$dev6" "$ifacePriority" "$dispStatus"
+                               gatewaySummary="${gatewaySummary}${displayText}${dispStatus:+ $dispStatus}\\n"
+                               output_ok
+                       else
+                               state add 'errorSummary' 'errorFailedSetup' "$displayText"
+                               output_fail
+                       fi
+               ;;
+               create_user_set)
+                       interface_routing 'create_user_set' "$ifaceTableID" "$ifaceMark" "$iface" "$gw4" "$dev" "$gw6" "$dev6" "$ifacePriority"
+               ;;
+               destroy)
+                       displayText="${iface}/${dispDev:+$dispDev/}${dispGw4}${ipv6_enabled:+/$dispGw6}"
+                       output 2 "Removing routing for '$displayText' "
+                       interface_routing 'destroy' "${ifaceTableID}" "${ifaceMark}" "${iface}"
+                       output_ok
+               ;;
+               reload)
+                       gatewaySummary="${gatewaySummary}${displayText}${dispStatus:+ $dispStatus}\\n"
+               ;;
+               reload_interface)
+                       if [ "$iface" = "$reloadedIface" ]; then
+                               output 2 "Reloading routing for '$displayText' "
+                               if interface_routing 'reload_interface' "$ifaceTableID" "$ifaceMark" "$iface" "$gw4" "$dev" "$gw6" "$dev6" "$ifacePriority"; then
+                                       json_add_gateway 'reload_interface' "$ifaceTableID" "$ifaceMark" "$iface" "$gw4" "$dev" "$gw6" "$dev6" "$ifacePriority" "$dispStatus"
+                                       gatewaySummary="${gatewaySummary}${displayText}${dispStatus:+ $dispStatus}\\n"
+                                       output_ok
+                               else
+                                       state add 'errorSummary' 'errorFailedReload' "$displayText"
+                                       output_fail
+                               fi
+                       else
+                               gatewaySummary="${gatewaySummary}${displayText}${dispStatus:+ $dispStatus}\\n"
+                       fi
+               ;;
+       esac
+#      ifaceTableID="$((ifaceTableID + 1))"
+       ifaceMark="$(printf '0x%06x' $((ifaceMark + wan_mark)))"
+       ifacePriority="$((ifacePriority + 1))"
+       return $s
+}
+
+user_file_process() {
+       local shellBin="${SHELL:-/bin/ash}"
+       [ "$enabled" -gt 0 ] || return 0
+       if [ ! -s "$path" ]; then
+               state add 'errorSummary' 'errorUserFileNotFound' "$path"
+               output_fail
+               return 1
+       fi
+       if ! $shellBin -n "$path"; then
+               state add 'errorSummary' 'errorUserFileSyntax' "$path"
+               output_fail
+               return 1
+       fi
+       output 2 "Running $path "
+# shellcheck disable=SC1090
+       if ! . "$path"; then
+               state add 'errorSummary' 'errorUserFileRunning' "$path"
+               if grep -q -w 'curl' "$path" && ! is_present 'curl'; then
+                       state add 'errorSummary' 'errorUserFileNoCurl' "$path"
+               fi
+               output_fail
+               return 1
+       else
+               output_ok
+               return 0
+       fi
+}
+
+boot() {
+       ubus -t 30 wait_for network.interface 2>/dev/null
+       rc_procd start_service 'on_boot'
+}
+
+on_firewall_reload() { 
+       if [ -e "$packageLockFile" ]; then # service is stopped, do not start it on firewall reload
+               logger -t "$packageName" "Reload on firewall action aborted: service is stopped."
+               return 0
+       else
+               rc_procd start_service 'on_firewall_reload' "$1"
+       fi
+}
+on_interface_reload() { 
+       if [ -e "$packageLockFile" ]; then # service is stopped, do not start it on interface change
+               logger -t "$packageName" "Reload on interface change aborted: service is stopped."
+               return 0
+       else
+               rc_procd start_service 'on_interface_reload' "$1"
+       fi
+}
+
+start_service() {
+       local resolverStoredHash resolverNewHash i param="$1" reloadedIface
+
+       load_environment 'on_start' "$(load_validate_config)" || return 1
+       is_wan_up || return 1
+       rm -f "$nftTempFile"
+
+       case "$param" in
+               on_boot)
+                       serviceStartTrigger='on_start'
+               ;;
+               on_firewall_reload)
+                       serviceStartTrigger='on_start'
+               ;;
+               on_interface_reload)
+                       reloadedIface="$2"
+                       if is_ovpn "$reloadedIface"; then
+                               logger -t "$packageName" "Updated interface is an OpenVPN tunnel, restarting."
+                               serviceStartTrigger='on_start'
+                               unset reloadedIface
+                       else
+                               serviceStartTrigger='on_interface_reload'
+                       fi
+               ;;
+               on_reload)
+                       serviceStartTrigger='on_reload'
+               ;;
+               on_restart)
+                       serviceStartTrigger='on_start'
+               ;;
+       esac
+
+       if [ -n "$reloadedIface" ] && ! is_supported_interface "$reloadedIface"; then
+               return 0
+       fi
+
+       if [ -n "$(ubus_get_status error)" ] || [ -n "$(ubus_get_status warning)" ]; then
+               serviceStartTrigger='on_start'
+               unset reloadedIface
+       elif ! is_service_running; then
+               serviceStartTrigger='on_start'
+               unset reloadedIface
+       elif [ -z "$(ubus_get_status gateway)" ]; then
+               serviceStartTrigger='on_start'
+               unset reloadedIface
+       elif [ "$serviceStartTrigger" = 'on_interface_reload' ] && \
+                        [ -z "$(ubus_get_interface "$reloadedIface" 'gateway_4')" ] && \
+                        [ -z "$(ubus_get_interface "$reloadedIface" 'gateway_6')" ]; then
+               serviceStartTrigger='on_start'
+               unset reloadedIface
+       else
+               serviceStartTrigger="${serviceStartTrigger:-on_start}"
+       fi
+
+       procd_open_instance "main"
+       procd_set_param command /bin/true
+       procd_set_param stdout 1
+       procd_set_param stderr 1
+       procd_open_data
+
+       case $serviceStartTrigger in
+               on_interface_reload)
+                       output 1 "Reloading Interface: $reloadedIface "
+                       json_add_array 'gateways'
+                       interface_process 'all' 'prepare'
+                       config_foreach interface_process 'interface' 'reload_interface' "$reloadedIface"
+                       json_close_array
+                       output 1 '\n'
+               ;;
+               on_reload)
+                       traffic_killswitch 'insert'
+                       resolver 'store_hash'
+                       resolver 'cleanup_all'
+                       resolver 'configure'
+                       resolver 'init'
+                       cleanup_main_chains
+                       cleanup_sets
+                       if ! is_nft; then
+                               for i in $chainsList; do
+                                       i="$(str_to_upper "$i")"
+                                       ipt -t mangle -N "${iptPrefix}_${i}"
+                                       ipt -t mangle "$rule_create_option" "$i" -m mark --mark "0x0/${fw_mask}" -j "${iptPrefix}_${i}"
+                               done
+                       fi
+                       json_add_array 'gateways'
+                       interface_process 'all' 'prepare'
+                       config_foreach interface_process 'interface' 'reload'
+                       interface_process_tor 'tor' 'destroy'
+                       is_tor_running && interface_process_tor 'tor' 'reload'
+                       json_close_array
+                       if is_config_enabled 'policy'; then
+                               output 1 'Processing policies '
+                               config_load "$packageName"
+                               config_foreach load_validate_policy 'policy' policy_process
+                               output 1 '\n'
+                       fi
+                       if is_config_enabled 'include'; then
+                               interface_process 'all' 'prepare'
+                               config_foreach interface_process 'interface' 'create_user_set'
+                               output 1 'Processing user file(s) '
+                               config_load "$packageName"
+                               config_foreach load_validate_include 'include' user_file_process
+                               output 1 '\n'
+                       fi
+                       resolver 'init_end'
+                       resolver 'compare_hash' && resolver 'restart'
+                       traffic_killswitch 'remove'
+               ;;
+               on_start|*)
+                       traffic_killswitch 'insert'
+                       resolver 'store_hash'
+                       resolver 'cleanup_all'
+                       resolver 'configure'
+                       resolver 'init'
+                       cleanup_main_chains
+                       cleanup_sets
+                       cleanup_marking_chains
+                       cleanup_rt_tables
+                       if ! is_nft; then
+                               for i in $chainsList; do
+                                       i="$(str_to_upper "$i")"
+                                       ipt -t mangle -N "${iptPrefix}_${i}"
+                                       ipt -t mangle "$rule_create_option" "$i" -m mark --mark "0x0/${fw_mask}" -j "${iptPrefix}_${i}"
+                               done
+                       fi
+                       output 1 'Processing interfaces '
+                       json_add_array 'gateways'
+                       interface_process 'all' 'prepare'
+                       config_foreach interface_process 'interface' 'create'
+                       interface_process_tor 'tor' 'destroy'
+                       is_tor_running && interface_process_tor 'tor' 'create'
+                       json_close_array
+                       ip route flush cache
+                       output 1 '\n'
+                       if is_config_enabled 'policy'; then
+                               output 1 'Processing policies '
+                               config_load "$packageName"
+                               config_foreach load_validate_policy 'policy' policy_process
+                               output 1 '\n'
+                       fi
+                       if is_config_enabled 'include'; then
+                               interface_process 'all' 'prepare'
+                               config_foreach interface_process 'interface' 'create_user_set'
+                               output 1 'Processing user file(s) '
+                               config_load "$packageName"
+                               config_foreach load_validate_include 'include' user_file_process
+                               output 1 '\n'
+                       fi
+                       resolver 'init_end'
+                       resolver 'compare_hash' && resolver 'restart'
+                       traffic_killswitch 'remove'
+               ;;
+       esac
+
+       if [ -z "$gatewaySummary" ]; then
+               state add 'errorSummary' 'errorNoGateways'
+       fi
+       json_add_object 'status'
+       [ -n "$gatewaySummary" ] && json_add_string 'gateways' "$gatewaySummary"
+       [ -n "$errorSummary" ] && json_add_string 'errors' "$errorSummary"
+       [ -n "$warningSummary" ] && json_add_string 'warnings' "$warningSummary"
+       if [ "$strict_enforcement" -ne 0 ] && str_contains "$gatewaySummary" '0.0.0.0'; then
+               json_add_string 'mode' "strict"
+       fi
+       json_close_object
+       procd_close_data
+       procd_close_instance
+}
+
+service_started() {
+       if is_nft; then
+               [ -n "$gatewaySummary" ] && output "$serviceName (nft) started with gateways:\\n${gatewaySummary}"
+       else
+               [ -n "$gatewaySummary" ] && output "$serviceName (iptables) started with gateways:\\n${gatewaySummary}"
+       fi
+       state print 'errorSummary'
+       state print 'warningSummary'
+       if [ -n "$errorSummary" ]; then
+               return 2
+       elif [ -n "$warningSummary" ]; then
+               return 1
+       else
+               return 0
+       fi
+}
+
+service_triggers() {
+       local n
+       load_environment 'on_triggers'
+# shellcheck disable=SC2034
+       PROCD_RELOAD_DELAY=$(( procd_reload_delay * 1000 ))
+       procd_open_validate
+               load_validate_config
+               load_validate_policy
+               load_validate_include
+       procd_close_validate
+       procd_open_trigger
+               procd_add_reload_trigger 'openvpn'
+               procd_add_config_trigger "config.change" "${packageName}" /etc/init.d/${packageName} reload
+               for n in $ifacesSupported; do 
+                       procd_add_interface_trigger "interface.*" "$n" /etc/init.d/${packageName} on_interface_reload "$n"
+               done
+       procd_close_trigger
+       if [ "$serviceStartTrigger" = 'on_start' ]; then
+               output 3 "$serviceName monitoring interfaces: ${ifacesSupported}\\n"
+       fi
+}
+
+stop_service() {
+       local i
+       load_environment 'on_stop'
+       is_service_running || return 0
+       traffic_killswitch 'insert'
+       cleanup_main_chains
+       cleanup_sets
+       cleanup_marking_chains
+       output 1 'Resetting interfaces '
+       config_load 'network'
+       config_foreach interface_process 'interface' 'destroy'
+       interface_process_tor 'tor' 'destroy'
+       cleanup_rt_tables
+       output 1 "\\n"
+       ip route flush cache
+       unset ifaceMark
+       unset ifaceTableID
+       resolver 'store_hash'
+       resolver 'cleanup_all'
+       resolver 'compare_hash' && resolver 'restart'
+       traffic_killswitch 'remove'
+       if [ "$enabled" -ne 0 ]; then
+               if is_nft; then
+                       output "$serviceName (nft) stopped "; output_okn;
+               else
+                       output "$serviceName (iptables) stopped "; output_okn;
+               fi
+       fi
+}
+
+status_service() {
+       local _SEPARATOR_='============================================================'
+       load_environment 'on_status'
+       if is_nft; then
+               status_service_nft "$@"
+       else
+               status_service_iptables "$@"
+       fi
+}
+
+status_service_nft() {
+       local i dev dev6 wan_tid
+
+       json_load "$(ubus call system board)"; json_select release; json_get_var dist distribution; json_get_var vers version
+       if [ -n "$wanIface4" ]; then
+               network_get_gateway wanGW4 "$wanIface4"
+               network_get_device dev "$wanIface4"
+       fi
+       if [ -n "$wanIface6" ]; then
+               network_get_device dev6 "$wanIface6"
+               wanGW6=$($ip_bin -6 route show | grep -m1 " dev $dev6 " | awk '{print $1}')
+               [ "$wanGW6" = "default" ] && wanGW6=$($ip_bin -6 route show | grep -m1 " dev $dev6 " | awk '{print $3}')
+       fi
+       while [ "${1:0:1}" = "-" ]; do param="${1//-/}"; eval "set_$param=1"; shift; done
+       [ -e "/var/${packageName}-support" ] && rm -f "/var/${packageName}-support"
+       status="$serviceName running on $dist $vers."
+       [ -n "$wanIface4" ] && status="$status WAN (IPv4): ${wanIface4}/${dev}/${wanGW4:-0.0.0.0}."
+       [ -n "$wanIface6" ] && status="$status WAN (IPv6): ${wanIface6}/${dev6}/${wanGW6:-::/0}."
+
+       echo "$_SEPARATOR_"
+       echo "$packageName - environment"
+       echo "$status"
+       echo "$_SEPARATOR_"
+       dnsmasq --version 2>/dev/null | sed '/^$/,$d'
+       echo "$_SEPARATOR_"
+       echo "$packageName chains - policies"
+       for i in forward input output prerouting postrouting; do
+               "$nft" -a list table inet "$nftTable" | sed -n "/chain ${nftPrefix}_${i} {/,/\t}/p"
+       done
+       echo "$_SEPARATOR_"
+       echo "$packageName chains - marking"
+       for i in $(get_mark_nft_chains); do
+               "$nft" -a list table inet "$nftTable" | sed -n "/chain ${i} {/,/\t}/p"
+       done
+       echo "$_SEPARATOR_"
+       echo "$packageName nft sets"
+       for i in $(get_nft_sets); do
+               "$nft" -a list table inet "$nftTable" | sed -n "/set ${i} {/,/\t}/p"
+       done
+       if [ -s "$dnsmasqFile" ]; then
+               echo "$_SEPARATOR_"
+               echo "dnsmasq sets"
+               cat "$dnsmasqFile"
+       fi
+#      echo "$_SEPARATOR_"
+#      ip rule list | grep "${packageName}_"
+       echo "$_SEPARATOR_"
+       tableCount="$(grep -c "${packageName}_" /etc/iproute2/rt_tables)" || tableCount=0
+       wan_tid=$(($(get_rt_tables_next_id)-tableCount))
+       i=0; while [ $i -lt "$tableCount" ]; do 
+               echo "IPv4 table $((wan_tid + i)) route: $($ip_bin -4 route show table $((wan_tid + i)) | grep default)"
+               echo "IPv4 table $((wan_tid + i)) rule(s):"
+               $ip_bin -4 rule list table "$((wan_tid + i))"
+               if [ -n "$ipv6_enabled" ]; then
+                       echo "IPv6 table $((wan_tid + i)) route: $($ip_bin -6 route show table $((wan_tid + i)) | grep default)"
+                       echo "IPv6 table $((wan_tid + i)) rule(s):"
+                       $ip_bin -6 route show table $((wan_tid + i))
+               fi
+               i=$((i + 1))
+       done
+}
+
+status_service_iptables() {
+       local dist vers out id s param status set_d set_p tableCount i=0 dev dev6 j wan_tid
+
+       json_load "$(ubus call system board)"; json_select release; json_get_var dist distribution; json_get_var vers version
+       if [ -n "$wanIface4" ]; then
+               network_get_gateway wanGW4 "$wanIface4"
+               network_get_device dev "$wanIface4"
+       fi
+       if [ -n "$wanIface6" ]; then
+               network_get_device dev6 "$wanIface6"
+               wanGW6=$($ip_bin -6 route show | grep -m1 " dev $dev6 " | awk '{print $1}')
+               [ "$wanGW6" = "default" ] && wanGW6=$($ip_bin -6 route show | grep -m1 " dev $dev6 " | awk '{print $3}')
+       fi
+       while [ "${1:0:1}" = "-" ]; do param="${1//-/}"; eval "set_$param=1"; shift; done
+       [ -e "/var/${packageName}-support" ] && rm -f "/var/${packageName}-support"
+       status="$serviceName running on $dist $vers."
+       [ -n "$wanIface4" ] && status="$status WAN (IPv4): ${wanIface4}/${dev}/${wanGW4:-0.0.0.0}."
+       [ -n "$wanIface6" ] && status="$status WAN (IPv6): ${wanIface6}/${dev6}/${wanGW6:-::/0}."
+       {
+               echo "$status"
+               echo "$_SEPARATOR_"
+               dnsmasq --version 2>/dev/null | sed '/^$/,$d'
+               if [ -n "$1" ]; then
+                       echo "$_SEPARATOR_"
+                       echo "Resolving domains"
+                       for i in $1; do
+                               echo "$i: $(resolveip "$i" | tr '\n' ' ')"
+                       done
+               fi
+
+               echo "$_SEPARATOR_"
+               echo "Routes/IP Rules"
+               tableCount="$(grep -c "${packageName}_" /etc/iproute2/rt_tables)" || tableCount=0
+               if [ -n "$set_d" ]; then route; else route | grep '^default'; fi
+               if [ -n "$set_d" ]; then ip rule list; fi
+               wan_tid=$(($(get_rt_tables_next_id)-tableCount))
+               i=0; while [ $i -lt "$tableCount" ]; do 
+                       echo "IPv4 table $((wan_tid + i)) route: $($ip_bin -4 route show table $((wan_tid + i)) | grep default)"
+                       echo "IPv4 table $((wan_tid + i)) rule(s):"
+                       $ip_bin -4 rule list table "$((wan_tid + i))"
+                       i=$((i + 1))
+               done
+
+               if [ -n "$ipv6_enabled" ]; then
+                       i=0; while [ $i -lt "$tableCount" ]; do
+                               $ip_bin -6 route show table $((wan_tid + i)) | while read -r param; do
+                                       echo "IPv6 Table $((wan_tid + i)): $param"
+                               done
+                               i=$((i + 1))
+                       done
+               fi
+
+               for j in Mangle NAT; do
+                       if [ -z "$set_d" ]; then
+                               for i in $chainsList; do
+                                       i="$(str_to_upper "$i")"
+                                       if iptables -v -t "$(str_to_lower $j)" -S "${iptPrefix}_${i}" >/dev/null 2>&1; then
+                                               echo "$_SEPARATOR_"
+                                               echo "$j IP Table: $i"
+                                               iptables -v -t "$(str_to_lower $j)" -S "${iptPrefix}_${i}"
+                                               if [ -n "$ipv6_enabled" ]; then
+                                                       echo "$_SEPARATOR_"
+                                                       echo "$j IPv6 Table: $i"
+                                                       iptables -v -t "$(str_to_lower $j)" -S "${iptPrefix}_${i}"
+                                               fi
+                                       fi
+                               done
+                       else
+                               echo "$_SEPARATOR_"
+                               echo "$j IP Table"
+                               iptables -L -t "$(str_to_lower $j)"
+                               if [ -n "$ipv6_enabled" ]; then
+                                       echo "$_SEPARATOR_"
+                                       echo "$j IPv6 Table"
+                                       iptables -L -t "$(str_to_lower $j)"
+                               fi
+                       fi
+                       i=0; ifaceMark="$wan_mark";
+                       while [ $i -lt "$tableCount" ]; do
+                               if iptables -v -t "$(str_to_lower $j)" -S "${iptPrefix}_MARK_${ifaceMark}" >/dev/null 2>&1; then
+                                       echo "$_SEPARATOR_"
+                                       echo "$j IP Table MARK Chain: ${iptPrefix}_MARK_${ifaceMark}"
+                                       iptables -v -t "$(str_to_lower $j)" -S "${iptPrefix}_MARK_${ifaceMark}"
+                                       ifaceMark="$(printf '0x%06x' $((ifaceMark + wan_mark)))";
+                               fi
+                               i=$((i + 1))
+                       done
+               done
+
+               echo "$_SEPARATOR_"
+               echo "Current ipsets"
+               ipset save
+               if [ -s "$dnsmasqFile" ]; then
+                       echo "$_SEPARATOR_"
+                       echo "DNSMASQ sets"
+                       cat "$dnsmasqFile"
+               fi
+               if [ -s "$aghIpsetFile" ]; then
+                       echo "$_SEPARATOR_"
+                       echo "AdGuardHome sets"
+                       cat "$aghIpsetFile"
+               fi
+               echo "$_SEPARATOR_"
+       } | tee -a /var/${packageName}-support
+       if [ -n "$set_p" ]; then
+               printf "%b" "Pasting to paste.ee... "
+               if is_present 'curl' && is_variant_installed 'libopenssl' && is_installed 'ca-bundle'; then
+                       json_init; json_add_string "description" "${packageName}-support"
+                       json_add_array "sections"; json_add_object '0'
+                       json_add_string "name" "$(uci -q get system.@system[0].hostname)"
+                       json_add_string "contents" "$(cat /var/${packageName}-support)"
+                       json_close_object; json_close_array; payload=$(json_dump)
+                       out=$(curl -s -k "https://api.paste.ee/v1/pastes" -X "POST" -H "Content-Type: application/json" -H "X-Auth-Token:uVOJt6pNqjcEWu7qiuUuuxWQafpHhwMvNEBviRV2B" -d "$payload")
+                       json_load "$out"; json_get_var id id; json_get_var s success
+                       [ "$s" = "1" ] && printf "%b" "https://paste.ee/p/$id $__OK__\\n" || printf "%b" "$__FAIL__\\n"
+                       [ -e "/var/${packageName}-support" ] && rm -f "/var/${packageName}-support"
+               else
+                       printf "%b" "${__FAIL__}\\n"
+                       printf "%b" "${_ERROR_}: The curl, libopenssl or ca-bundle packages were not found!\\nRun 'opkg update; opkg install curl libopenssl ca-bundle' to install them.\\n"
+               fi
+       else
+               printf "%b" "Your support details have been logged to '/var/${packageName}-support'. $__OK__\\n"
+       fi
+}
+
+# shellcheck disable=SC2120
+load_validate_config() {
+       uci_load_validate "$packageName" "$packageName" "$1" "${2}${3:+ $3}" \
+               'enabled:bool:0' \
+               'procd_boot_delay:integer:0' \
+               'strict_enforcement:bool:1' \
+               'secure_reload:bool:0' \
+               'ipv6_enabled:bool:0' \
+               'resolver_set:or("", "none", "dnsmasq.ipset", "dnsmasq.nftset")' \
+               'verbosity:range(0,2):1' \
+               "wan_mark:regex('0x[A-Fa-f0-9]{8}'):0x010000" \
+               "fw_mask:regex('0x[A-Fa-f0-9]{8}'):0xff0000" \
+               'icmp_interface:or("", "tor", uci("network", "@interface"))' \
+               'ignored_interface:list(or("tor", uci("network", "@interface")))' \
+               'supported_interface:list(or("tor", uci("network", "@interface")))' \
+               'boot_timeout:integer:30' \
+               'wan_ip_rules_priority:uinteger:30000' \
+               'rule_create_option:or("", "add", "insert"):add' \
+               'procd_reload_delay:integer:0' \
+               'webui_supported_protocol:list(string)' \
+               'nft_user_set_policy:or("", "memory", "performance")'\
+               'nft_user_set_counter:bool:0'
+}
+
+# shellcheck disable=SC2120
+load_validate_policy() {
+       local name
+       local enabled
+       local interface
+       local proto
+       local chain
+       local src_addr
+       local src_port
+       local dest_addr
+       local dest_port
+       uci_load_validate "$packageName" 'policy' "$1" "${2}${3:+ $3}" \
+               'name:string:Untitled' \
+               'enabled:bool:1' \
+               'interface:or("ignore", "tor", uci("network", "@interface")):wan' \
+               'proto:or(string)' \
+               'chain:or("", "forward", "input", "output", "prerouting", "postrouting", "FORWARD", "INPUT", "OUTPUT", "PREROUTING", "POSTROUTING"):prerouting' \
+               'src_addr:list(neg(or(host,network,macaddr,string)))' \
+               'src_port:list(neg(or(portrange,string)))' \
+               'dest_addr:list(neg(or(host,network,string)))' \
+               'dest_port:list(neg(or(portrange,string)))'
+}
+
+# shellcheck disable=SC2120
+load_validate_include() {
+       local path=
+       local enabled=
+       uci_load_validate "$packageName" 'include' "$1" "${2}${3:+ $3}" \
+               'path:file' \
+               'enabled:bool:0'
+}
diff --git a/package/network/config/pbr/files/etc/uci-defaults/90-pbr b/package/network/config/pbr/files/etc/uci-defaults/90-pbr
new file mode 100644 (file)
index 0000000..95fe377
--- /dev/null
@@ -0,0 +1,41 @@
+#!/bin/sh
+# shellcheck disable=SC1091,SC3037,SC3043
+
+readonly __OK__='\033[0;32m[\xe2\x9c\x93]\033[0m'
+
+# Transition from vpn-policy-routing
+if [ -s '/etc/config/vpn-policy-routing' ] && [ ! -s '/etc/config/pbr-opkg' ]; then
+       if [ -x '/etc/init.d/vpn-policy-routing' ]; then
+               echo "Stopping and disabling vpn-policy-routing."
+               /etc/init.d/vpn-policy-routing stop
+               /etc/init.d/vpn-policy-routing disable
+       fi
+       echo "Migrating vpn-policy-routing config file."
+       mv '/etc/config/pbr' '/etc/config/pbr-opkg'
+       sed 's/vpn-policy-routing/pbr/g' /etc/config/vpn-policy-routing > /etc/config/pbr
+       uci set vpn-policy-routing.config.enabled=0; uci commit vpn-policy-routing;
+fi
+
+# Transition from older versions of pbr
+sed -i 's/resolver_ipset/resolver_set/g' /etc/config/pbr
+sed -i 's/iptables_rule_option/rule_create_option/g' /etc/config/pbr
+sed -i "s/'FORWARD'/'forward'/g" /etc/config/pbr
+sed -i "s/'INPUT'/'input'/g" /etc/config/pbr
+sed -i "s/'OUTPUT'/'output'/g" /etc/config/pbr
+sed -i "s/'PREROUTING'/'prerouting'/g" /etc/config/pbr
+sed -i "s/'POSTROUTING'/'postrouting'/g" /etc/config/pbr
+sed -i "s/option fw_mask '0x\(.*\)'/option fw_mask '\1'/g" /etc/config/pbr
+sed -i "s/option wan_mark '0x\(.*\)'/option wan_mark '\1'/g" /etc/config/pbr
+
+if [ -s '/usr/share/pbr/pbr.firewall.include' ]; then
+uci -q batch <<-EOT
+       delete firewall.pbr
+       set firewall.pbr='include'
+       set firewall.pbr.fw4_compatible='1'
+       set firewall.pbr.type='script'
+       set firewall.pbr.path='/usr/share/pbr/pbr.firewall.include'
+       commit firewall
+EOT
+fi
+
+exit 0
diff --git a/package/network/config/pbr/files/etc/uci-defaults/91-pbr b/package/network/config/pbr/files/etc/uci-defaults/91-pbr
new file mode 100644 (file)
index 0000000..1669386
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/sh
+# shellcheck disable=SC1091,SC3037,SC3043
+
+readonly packageName='pbr'
+readonly __OK__='\033[0;32m[\xe2\x9c\x93]\033[0m'
+
+# shellcheck disable=SC2317
+pbr_iface_setup() {
+       local iface="${1}"
+       local proto
+       config_get proto "${iface}" proto
+       case "${iface}" in
+               (lan|loopback) return 0 ;;
+       esac
+       case "${proto}" in
+               (gre*|nebula|relay|vti*|vxlan|xfrm) return 0 ;;
+               (none)
+                       uci -q set "network.${iface}_rt=route"
+                       uci -q set "network.${iface}_rt.interface=${iface}"
+                       uci -q set "network.${iface}_rt.target=0.0.0.0/0"
+                       uci -q set "network.${iface}_rt6=route6"
+                       uci -q set "network.${iface}_rt6.interface=${iface}"
+                       uci -q set "network.${iface}_rt6.target=::/0"
+               ;;
+       esac
+       echo -en "Setting up ${packageName} routing tables for ${iface}... "
+       uci -q set "network.${iface}.ip4table=${packageName}_${iface%6}"
+       uci -q set "network.${iface}.ip6table=${packageName}_${iface%6}"
+       if ! grep -q -E -e "^[0-9]+\s+${packageName}_${iface%6}$" /etc/iproute2/rt_tables; then
+               sed -i -e "\$a $(($(sort -r -n /etc/iproute2/rt_tables | grep -o -E -m 1 "^[0-9]+")+1))\t${packageName}_${iface%6}" \
+                       /etc/iproute2/rt_tables
+       fi
+       echo -e "${__OK__}"
+}
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+config_load network
+config_foreach pbr_iface_setup interface
+network_flush_cache
+network_find_wan iface
+network_find_wan6 iface6
+# shellcheck disable=SC2154
+[ -n "$iface" ] && uci -q batch << EOF
+set network.default='rule'
+set network.default.lookup='${packageName}_${iface%6}'
+set network.default.priority='80000'
+EOF
+[ -n "$iface6" ] && uci -q batch << EOF
+set network.default6='rule6'
+set network.default6.lookup='${packageName}_${iface6%6}'
+set network.default6.priority='80000'
+EOF
+uci commit network
+echo -en "Restarting network... "
+/etc/init.d/network restart
+echo -e "${__OK__}"
+
+exit 0
diff --git a/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_forward/30-pbr.nft b/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_forward/30-pbr.nft
new file mode 100644 (file)
index 0000000..d11ad84
--- /dev/null
@@ -0,0 +1 @@
+jump pbr_forward comment "Jump into pbr forward chain";
diff --git a/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_input/30-pbr.nft b/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_input/30-pbr.nft
new file mode 100644 (file)
index 0000000..b3ce9db
--- /dev/null
@@ -0,0 +1 @@
+jump pbr_input comment "Jump into pbr input chain";
diff --git a/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_output/30-pbr.nft b/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_output/30-pbr.nft
new file mode 100644 (file)
index 0000000..c98514b
--- /dev/null
@@ -0,0 +1 @@
+jump pbr_output comment "Jump into pbr output chain";
diff --git a/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_postrouting/30-pbr.nft b/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_postrouting/30-pbr.nft
new file mode 100644 (file)
index 0000000..cd5d1b4
--- /dev/null
@@ -0,0 +1 @@
+jump pbr_postrouting comment "Jump into pbr postrouting chain";
diff --git a/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_prerouting/30-pbr.nft b/package/network/config/pbr/files/usr/share/nftables.d/chain-post/mangle_prerouting/30-pbr.nft
new file mode 100644 (file)
index 0000000..a4471d3
--- /dev/null
@@ -0,0 +1 @@
+jump pbr_prerouting comment "Jump into pbr prerouting chain";
diff --git a/package/network/config/pbr/files/usr/share/nftables.d/table-post/30-pbr.nft b/package/network/config/pbr/files/usr/share/nftables.d/table-post/30-pbr.nft
new file mode 100644 (file)
index 0000000..4dd9b28
--- /dev/null
@@ -0,0 +1,5 @@
+chain pbr_forward {}
+chain pbr_input {}
+chain pbr_output {}
+chain pbr_prerouting {}
+chain pbr_postrouting {}
diff --git a/package/network/config/pbr/files/usr/share/pbr/pbr.firewall.include b/package/network/config/pbr/files/usr/share/pbr/pbr.firewall.include
new file mode 100644 (file)
index 0000000..36b3cd8
--- /dev/null
@@ -0,0 +1,5 @@
+#!/bin/sh
+if [ -x /etc/init.d/pbr ] && /etc/init.d/pbr enabled; then
+       logger -t "pbr" "Reloading pbr due to firewall action: $ACTION"
+       /etc/init.d/pbr on_firewall_reload "$ACTION"
+fi
diff --git a/package/network/config/pbr/files/usr/share/pbr/pbr.user.aws b/package/network/config/pbr/files/usr/share/pbr/pbr.user.aws
new file mode 100644 (file)
index 0000000..bf398dd
--- /dev/null
@@ -0,0 +1,33 @@
+#!/bin/sh
+# This file is heavily based on code from https://github.com/Xentrk/netflix-vpn-bypass/blob/master/IPSET_Netflix.sh
+
+TARGET_SET='pbr_wan_4_dst_ip_user'
+TARGET_IPSET='pbr_wan_4_dst_net_user'
+TARGET_TABLE='inet fw4'
+TARGET_URL="https://ip-ranges.amazonaws.com/ip-ranges.json"
+TARGET_DL_FILE="/var/pbr_tmp_aws_ip_ranges"
+TARGET_NFT_FILE="/var/pbr_tmp_aws_ip_ranges.nft"
+[ -z "$nft" ] && nft="$(command -v nft)"
+_ret=1
+
+if [ ! -s "$TARGET_DL_FILE" ]; then
+       uclient-fetch --no-check-certificate -qO- "$TARGET_URL" 2>/dev/null | grep "ip_prefix" | sed 's/^.*\"ip_prefix\": \"//; s/\",//' > "$TARGET_DL_FILE"
+fi
+
+if [ -s "$TARGET_DL_FILE" ]; then
+       if ipset -q list "$TARGET_IPSET" >/dev/null 2>&1; then
+               if awk -v ipset="$TARGET_IPSET" '{print "add " ipset " " $1}' "$TARGET_DL_FILE" | ipset restore -!; then
+                       _ret=0
+               fi
+       elif [ -n "$nft" ] && [ -x "$nft" ] && "$nft" list set "$TARGET_TABLE" "$TARGET_SET" >/dev/null 2>&1; then
+               printf "add element %s %s { " "$TARGET_TABLE" "$TARGET_SET" > "$TARGET_NFT_FILE"
+               awk '{printf $1 ", "}' "$TARGET_DL_FILE" >> "$TARGET_NFT_FILE"
+               printf " } " >> "$TARGET_NFT_FILE"
+               if "$nft" -f "$TARGET_NFT_FILE"; then
+                       rm -f "$TARGET_NFT_FILE"
+                       _ret=0
+               fi
+       fi
+fi
+
+return $_ret
diff --git a/package/network/config/pbr/files/usr/share/pbr/pbr.user.netflix b/package/network/config/pbr/files/usr/share/pbr/pbr.user.netflix
new file mode 100644 (file)
index 0000000..54f54e0
--- /dev/null
@@ -0,0 +1,49 @@
+#!/bin/sh
+# This file is heavily based on code from https://github.com/Xentrk/netflix-vpn-bypass/blob/master/IPSET_Netflix.sh
+# Credits to https://forum.openwrt.org/u/dscpl for api.hackertarget.com code.
+# Credits to https://github.com/kkeker and https://github.com/tophirsch for api.bgpview.io code.
+
+TARGET_SET='pbr_wan_4_dst_ip_user'
+TARGET_IPSET='pbr_wan_4_dst_net_user'
+TARGET_TABLE='inet fw4'
+TARGET_ASN='2906'
+TARGET_DL_FILE="/var/pbr_tmp_AS${TARGET_ASN}"
+TARGET_NFT_FILE="/var/pbr_tmp_AS${TARGET_ASN}.nft"
+#DB_SOURCE='ipinfo.io'
+#DB_SOURCE='api.hackertarget.com'
+DB_SOURCE='api.bgpview.io'
+[ -z "$nft" ] && nft="$(command -v nft)"
+_ret=1
+
+if [ ! -s "$TARGET_DL_FILE" ]; then
+       if [ "$DB_SOURCE" = "ipinfo.io" ]; then
+               TARGET_URL="https://ipinfo.io/AS${TARGET_ASN}"
+               uclient-fetch --no-check-certificate -qO- "$TARGET_URL" 2>/dev/null | grep -E "a href.*${TARGET_ASN}\/" | grep -v ":" | sed "s/^.*<a href=\"\/AS${TARGET_ASN}\///; s/\" >//" > "$TARGET_DL_FILE"
+       fi
+       if [ "$DB_SOURCE" = "api.hackertarget.com" ]; then
+               TARGET_URL="https://api.hackertarget.com/aslookup/?q=AS${TARGET_ASN}"
+               uclient-fetch --no-check-certificate -qO- "$TARGET_URL" 2>/dev/null | sed '1d' > "$TARGET_DL_FILE"
+       fi
+       if [ "$DB_SOURCE" = "api.bgpview.io" ]; then
+               TARGET_URL="https://api.bgpview.io/asn/${TARGET_ASN}/prefixes"
+               uclient-fetch --no-check-certificate -qO- "$TARGET_URL" 2>/dev/null | jsonfilter -e '@.data.ipv4_prefixes[*].prefix' > "$TARGET_DL_FILE"
+       fi
+fi
+
+if [ -s "$TARGET_DL_FILE" ]; then
+       if ipset -q list "$TARGET_IPSET" >/dev/null 2>&1; then
+                       if awk -v ipset="$TARGET_IPSET" '{print "add " ipset " " $1}' "$TARGET_DL_FILE" | ipset restore -!; then
+                               _ret=0
+                       fi
+       elif [ -n "$nft" ] && [ -x "$nft" ] && "$nft" list set "$TARGET_TABLE" "$TARGET_SET" >/dev/null 2>&1; then
+               printf "add element %s %s { " "$TARGET_TABLE" "$TARGET_SET" > "$TARGET_NFT_FILE"
+               awk '{printf $1 ", "}' "$TARGET_DL_FILE" >> "$TARGET_NFT_FILE"
+               printf " } " >> "$TARGET_NFT_FILE"
+               if "$nft" -f "$TARGET_NFT_FILE"; then
+                       rm -f "$TARGET_NFT_FILE"
+                       _ret=0
+               fi
+       fi
+fi
+
+return $_ret
diff --git a/package/network/config/pbr/test.sh b/package/network/config/pbr/test.sh
new file mode 100644 (file)
index 0000000..45469ed
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+/etc/init.d/"$1" version 2>&1 | grep "$2"
diff --git a/package/network/config/rpcbind/Makefile b/package/network/config/rpcbind/Makefile
new file mode 100644 (file)
index 0000000..f36abb2
--- /dev/null
@@ -0,0 +1,83 @@
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=rpcbind
+PKG_VERSION:=1.2.6
+PKG_RELEASE:=2
+
+PKG_SOURCE_URL:=@SF/rpcbind
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_HASH:=5613746489cae5ae23a443bb85c05a11741a5f12c8f55d2bb5e83b9defeee8de
+
+PKG_LICENSE:=BSD-3-Clause
+PKG_CPE_ID:=cpe:/a:rpcbind_project:rpcbind
+
+PKG_FIXUP:=autoreconf
+PKG_REMOVE_FILES:=autogen.sh aclocal.m4
+PKG_INSTALL:=1
+
+PKG_CONFIG_DEPENDS:= \
+       CONFIG_RPCBIND_LIBWRAP \
+       CONFIG_RPCBIND_RMTCALLS
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/rpcbind
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libtirpc +RPCBIND_LIBWRAP:libwrap
+  TITLE:=Universal addresses to RPC mapper
+  URL:=http://rpcbind.sourceforge.net/
+  USERID:=rpc=65533:rpc=65533
+endef
+
+define Package/rpcbind/description
+  The rpcbind utility is a server that converts RPC program numbers into universal addresses.
+  It must be running on the host to be able to make RPC calls on a server on that machine.
+
+  Rpcbind replaces portmap for NFS v2/v3. It has more features, like ipv6 support.
+  Note: Nfs4 only configurations can run without it.
+endef
+
+define Package/rpcbind/config
+if PACKAGE_rpcbind
+       config RPCBIND_LIBWRAP
+               bool "Enable libwrap (TCP wrappers) support."
+               default y
+       config RPCBIND_RMTCALLS
+               bool "Enable broadcast discovery support of rpc services."
+               help
+                       Services such as Kodi (via libnfs) use this functionality to discover available NFS shares on the network.
+               default y
+               
+               
+endif
+endef
+
+CONFIGURE_ARGS += \
+       --with-rpcuser=rpc \
+       --without-systemdsystemunitdir \
+       --enable-warmstarts
+
+ifeq ($(CONFIG_RPCBIND_LIBWRAP),y)
+       CONFIGURE_ARGS += --enable-libwrap
+else
+       CONFIGURE_ARGS += --disable-libwrap
+endif
+
+ifeq ($(CONFIG_RPCBIND_RMTCALLS),y)
+       CONFIGURE_ARGS += --enable-rmtcalls
+else
+       CONFIGURE_ARGS += --disable-rmtcalls
+endif
+
+
+define Package/rpcbind/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/rpcinfo $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/rpcbind $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/rpcbind.init $(1)/etc/init.d/rpcbind
+endef
+
+$(eval $(call BuildPackage,rpcbind))
diff --git a/package/network/config/rpcbind/files/rpcbind.init b/package/network/config/rpcbind/files/rpcbind.init
new file mode 100644 (file)
index 0000000..2e8ace0
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh /etc/rc.common
+
+START=19
+STOP=19
+
+USE_PROCD=1
+
+start_service() { 
+       procd_open_instance
+       procd_set_param command /usr/sbin/rpcbind -f -w
+       procd_set_param respawn
+       procd_close_instance
+}
diff --git a/package/network/config/rpcbind/patches/001-CVE-2017-8779-dos-via-memory-consumption.patch b/package/network/config/rpcbind/patches/001-CVE-2017-8779-dos-via-memory-consumption.patch
new file mode 100644 (file)
index 0000000..8986b14
--- /dev/null
@@ -0,0 +1,27 @@
+Submitted By: Ken Moffat <ken at linuxfromscratch dot org>
+Date: 2017-05-29
+Initial Package Version: 0.2.4 (also affects earlier versions)
+Upstream Status: Unknown
+Origin: Guido Vranken
+Description: Fixes CVE-2017-8779 (DOS by remote attackers - memory consumption
+without subsequent free).
+
+--- a/src/rpcb_svc_com.c
++++ b/src/rpcb_svc_com.c
+@@ -48,6 +48,7 @@
+ #include <rpc/rpc.h>
+ #include <rpc/rpcb_prot.h>
+ #include <rpc/svc_dg.h>
++#include <rpc/rpc_com.h>
+ #include <netconfig.h>
+ #include <errno.h>
+ #include <syslog.h>
+@@ -432,7 +433,7 @@ rpcbproc_taddr2uaddr_com(void *arg, stru
+ static bool_t
+ xdr_encap_parms(XDR *xdrs, struct encap_parms *epp)
+ {
+-      return (xdr_bytes(xdrs, &(epp->args), (u_int *) &(epp->arglen), ~0));
++      return (xdr_bytes(xdrs, &(epp->args), (u_int *) &(epp->arglen), RPC_MAXDATASIZE));
+ }
+ /*
diff --git a/package/network/services/acme-acmesh/Makefile b/package/network/services/acme-acmesh/Makefile
new file mode 100644 (file)
index 0000000..5d2f0d7
--- /dev/null
@@ -0,0 +1,69 @@
+#
+# Copyright (C) 2016 Toke Høiland-Jørgensen
+#
+# This is free software, licensed under the GNU General Public License v3 or
+# later.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=acme-acmesh
+PKG_VERSION:=3.0.7
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/acmesh-official/acme.sh/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=abd446d6bd45d0b44dca1dcbd931348797a3f82d1ed6fb171472eaf851a8d849
+PKG_BUILD_DIR:=$(BUILD_DIR)/acme.sh-$(PKG_VERSION)
+
+PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
+PKG_LICENSE:=GPL-3.0-only
+PKG_LICENSE_FILES:=LICENSE.md
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/acme-acmesh
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+acme-common +wget-ssl +ca-bundle +openssl-util +socat
+  TITLE:=ACME client acme.sh wrapper script
+  URL:=https://acme.sh
+  PKGARCH:=all
+  PROVIDES:=acme-client
+endef
+
+define Package/acme-acmesh/description
+A client for issuing ACME (e.g, Letsencrypt) certificates.
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/acme-acmesh/install
+       $(INSTALL_DIR) $(1)/usr/lib/acme/client
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/acme.sh $(1)/usr/lib/acme/client
+       $(INSTALL_BIN) ./files/hook.sh $(1)/usr/lib/acme/hook
+endef
+
+define Package/acme-acmesh-dnsapi
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+acme-acmesh
+  TITLE:=DNS API integration for ACME (Letsencrypt) client
+  PKGARCH:=all
+endef
+
+define Package/acme-acmesh-dnsapi/description
+ This package provides DNS API integration for ACME (Letsencrypt) client.
+endef
+
+define Package/acme-acmesh-dnsapi/install
+       $(INSTALL_DIR) $(1)/usr/lib/acme/client/dnsapi
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/dnsapi/*.sh $(1)/usr/lib/acme/client/dnsapi
+endef
+
+$(eval $(call BuildPackage,acme-acmesh))
+$(eval $(call BuildPackage,acme-acmesh-dnsapi))
diff --git a/package/network/services/acme-acmesh/files/hook.sh b/package/network/services/acme-acmesh/files/hook.sh
new file mode 100644 (file)
index 0000000..de9b7c6
--- /dev/null
@@ -0,0 +1,165 @@
+#!/bin/sh
+set -u
+ACME=/usr/lib/acme/client/acme.sh
+LOG_TAG=acme-acmesh
+# webroot option deprecated, use the exported value directly in the next major version
+WEBROOT=${webroot:-$CHALLENGE_DIR}
+NOTIFY=/usr/lib/acme/notify
+
+# shellcheck source=net/acme/files/functions.sh
+. /usr/lib/acme/functions.sh
+
+# Needed by acme.sh
+export CURL_CA_BUNDLE=/etc/ssl/certs/ca-certificates.crt
+export NO_TIMESTAMP=1
+
+link_certs()
+{
+    local main_domain
+    local domain_dir
+    domain_dir="$1"
+    main_domain="$2"
+
+    (umask 077; cat "$domain_dir/fullchain.cer" "$domain_dir/$main_domain.key" > "$domain_dir/combined.cer")
+
+    if [ ! -e "$CERT_DIR/$main_domain.crt" ]; then
+               ln -s "$domain_dir/$main_domain.cer" "$CERT_DIR/$main_domain.crt"
+    fi
+    if [ ! -e "$CERT_DIR/$main_domain.key" ]; then
+               ln -s "$domain_dir/$main_domain.key" "$CERT_DIR/$main_domain.key"
+    fi
+    if [ ! -e "$CERT_DIR/$main_domain.fullchain.crt" ]; then
+               ln -s "$domain_dir/fullchain.cer" "$CERT_DIR/$main_domain.fullchain.crt"
+    fi
+    if [ ! -e "$CERT_DIR/$main_domain.combined.crt" ]; then
+               ln -s "$domain_dir/combined.cer" "$CERT_DIR/$main_domain.combined.crt"
+    fi
+    if [ ! -e "$CERT_DIR/$main_domain.chain.crt" ]; then
+               ln -s "$domain_dir/ca.cer" "$CERT_DIR/$main_domain.chain.crt"
+    fi
+}
+
+case $1 in
+get)
+       set --
+       [ "$debug" = 1 ] && set -- "$@" --debug
+
+       case $key_type in
+       ec*)
+               keylength=${key_type/ec/ec-}
+               domain_dir="$state_dir/${main_domain}_ecc"
+               set -- "$@" --ecc
+               ;;
+       rsa*)
+               keylength=${key_type#rsa}
+               domain_dir="$state_dir/$main_domain"
+               ;;
+       esac
+
+       log info "Running ACME for $main_domain with validation_method $validation_method"
+
+       if [ -e "$domain_dir" ]; then
+               if [ "$staging" = 0 ] && grep -q "acme-staging" "$domain_dir/$main_domain.conf"; then
+                       mv "$domain_dir" "$domain_dir.staging"
+                       log info "Certificates are previously issued from a staging server, but staging option is disabled, moved to $domain_dir.staging."
+                       staging_moved=1
+               else
+                       set -- "$@" --renew --home "$state_dir" -d "$main_domain"
+                       log info "$ACME $*"
+                       trap '$NOTIFY renew-failed;exit 1' INT
+                       $ACME "$@"
+                       status=$?
+                       trap - INT
+
+                       case $status in
+                       0)
+                                link_certs "$domain_dir" "$main_domain"
+                               $NOTIFY renewed
+                               exit
+                               ;;
+                       2)
+                               # renew skipped, ignore.
+                               exit
+                               ;;
+                       *)
+                               $NOTIFY renew-failed
+                               exit 1
+                               ;;
+                       esac
+               fi
+       fi
+
+       for d in $domains; do
+               set -- "$@" -d "$d"
+       done
+       set -- "$@" --keylength "$keylength" --accountemail "$account_email"
+
+       if [ "$acme_server" ]; then
+               set -- "$@" --server "$acme_server"
+       # default to letsencrypt because the upstream default may change
+       elif [ "$staging" = 1 ]; then
+               set -- "$@" --server letsencrypt_test
+       else
+               set -- "$@" --server letsencrypt
+       fi
+
+       if [ "$days" ]; then
+               set -- "$@" --days "$days"
+       fi
+
+       case "$validation_method" in
+       "dns")
+               set -- "$@" --dns "$dns"
+               if [ "$dalias" ]; then
+                       set -- "$@" --domain-alias "$dalias"
+                       if [ "$calias" ]; then
+                               log err "Both domain and challenge aliases are defined. Ignoring the challenge alias."
+                       fi
+               elif [ "$calias" ]; then
+                       set -- "$@" --challenge-alias "$calias"
+               fi
+               if [ "$dns_wait" ]; then
+                       set -- "$@" --dnssleep "$dns_wait"
+               fi
+               ;;
+       "standalone")
+               set -- "$@" --standalone --listen-v6
+               ;;
+       "webroot")
+               mkdir -p "$WEBROOT"
+               set -- "$@" --webroot "$WEBROOT"
+               ;;
+       *)
+               log err "Unsupported validation_method $validation_method"
+               ;;
+       esac
+
+       set -- "$@" --issue --home "$state_dir"
+
+       log info "$ACME $*"
+       trap '$NOTIFY issue-failed;exit 1' INT
+       "$ACME" "$@" \
+               --pre-hook "$NOTIFY prepare" \
+               --renew-hook "$NOTIFY renewed"
+       status=$?
+       trap - INT
+
+       case $status in
+       0)
+                link_certs "$domain_dir" "$main_domain"
+               $NOTIFY issued
+               ;;
+       *)
+               if [ "$staging_moved" = 1 ]; then
+                       mv "$domain_dir.staging" "$domain_dir"
+                       log err "Staging certificate restored"
+               elif [ -d "$domain_dir" ]; then
+                       failed_dir="$domain_dir.failed-$(date +%s)"
+                       mv "$domain_dir" "$failed_dir"
+                       log err "State moved to $failed_dir"
+               fi
+               $NOTIFY issue-failed
+               ;;
+       esac
+       ;;
+esac
diff --git a/package/network/services/acme-common/Makefile b/package/network/services/acme-common/Makefile
new file mode 100644 (file)
index 0000000..324b742
--- /dev/null
@@ -0,0 +1,62 @@
+#
+# Copyright (C) 2016 Toke Høiland-Jørgensen
+#
+# This is free software, licensed under the GNU General Public License v3 or
+# later.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=acme-common
+PKG_VERSION:=1.0.4
+
+PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
+PKG_LICENSE:=GPL-3.0-only
+PKG_LICENSE_FILES:=LICENSE.md
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/acme-common
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=ACME client wrapper common files
+  PKGARCH:=all
+endef
+
+define Package/acme-common/description
+ACME client wrapper common files.
+endef
+
+define Package/acme-common/conffiles
+/etc/config/acme
+/etc/acme
+/etc/ssl/acme
+endef
+
+define Package/acme-common/install
+       $(INSTALL_DIR) $(1)/etc/acme
+       $(INSTALL_DIR) $(1)/etc/ssl/acme
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/acme.config $(1)/etc/config/acme
+       $(INSTALL_DIR) $(1)/usr/lib/acme
+       $(INSTALL_DATA) ./files/functions.sh $(1)/usr/lib/acme
+       $(INSTALL_BIN) ./files/acme-notify.sh $(1)/usr/lib/acme/notify
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/acme.init $(1)/etc/init.d/acme
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_DATA) ./files/acme.uci-defaults $(1)/etc/uci-defaults/acme
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/acme
+endef
+
+define Package/acme-common/prerm
+#!/bin/sh
+sed -i '\|/etc/init.d/acme|d' /etc/crontabs/root
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+$(eval $(call BuildPackage,acme-common))
diff --git a/package/network/services/acme-common/files/acme-notify.sh b/package/network/services/acme-common/files/acme-notify.sh
new file mode 100644 (file)
index 0000000..4f06f94
--- /dev/null
@@ -0,0 +1,17 @@
+#!/bin/sh
+set -u
+
+event="$1"
+
+# Call hotplug first, giving scripts a chance to modify certificates before
+# reloadaing the services
+ACTION=$event hotplug-call acme
+
+case $event in
+renewed)
+    ubus call service event '{"type":"acme.renew","data":{}}'
+    ;;
+issued)
+    ubus call service event '{"type":"acme.issue","data":{}}'
+    ;;
+esac
diff --git a/package/network/services/acme-common/files/acme.config b/package/network/services/acme-common/files/acme.config
new file mode 100644 (file)
index 0000000..8d1c493
--- /dev/null
@@ -0,0 +1,23 @@
+config acme
+       option account_email 'email@example.org'
+       option debug 0
+
+config cert 'example_wildcard'
+       option enabled 0
+       option staging 1
+       list domains "example.org"
+       list domains "*.example.org"
+       option validation_method "dns"
+       option dns "dns_freedns"
+       list credentials 'FREEDNS_User="ssladmin@example.org"'
+       list credentials 'FREEDNS_Password="1234"'
+       option calias "example.com"
+       option dalias "dalias.example.com"
+
+config cert 'example_subdomain'
+       option enabled 0
+       option staging 1
+       list domains "example.net"
+       list domains "www.example.net"
+       list domains "mail.example.net"
+       option validation_method "webroot"
diff --git a/package/network/services/acme-common/files/acme.init b/package/network/services/acme-common/files/acme.init
new file mode 100644 (file)
index 0000000..a9a5703
--- /dev/null
@@ -0,0 +1,159 @@
+#!/bin/sh /etc/rc.common
+
+USE_PROCD=1
+run_dir=/var/run/acme
+export CHALLENGE_DIR=$run_dir/challenge
+export CERT_DIR=/etc/ssl/acme
+NFT_HANDLE=
+HOOK=/usr/lib/acme/hook
+LOG_TAG=acme
+
+# shellcheck source=net/acme/files/functions.sh
+. "$IPKG_INSTROOT/usr/lib/acme/functions.sh"
+
+cleanup() {
+       log debug "cleaning up"
+       if [ -e $run_dir/lock ]; then
+               rm $run_dir/lock
+       fi
+       if [ "$NFT_HANDLE" ]; then
+               # $NFT_HANDLE contains the string 'handle XX' so pass it unquoted to nft
+               nft delete rule inet fw4 input $NFT_HANDLE
+       fi
+}
+
+load_options() {
+       section=$1
+
+       # compatibility for old option name
+       config_get_bool staging "$section" use_staging
+       if [ -z "$staging" ]; then
+               config_get_bool staging "$section" staging 0
+       fi
+       export staging
+       config_get calias "$section" calias
+       export calias
+       config_get dalias "$section" dalias
+       export dalias
+       config_get domains "$section" domains
+       export domains
+       export main_domain
+       main_domain="$(first_arg $domains)"
+       config_get keylength "$section" keylength
+       if [ "$keylength" ]; then
+               log warn "Option \"keylength\" is deprecated, please use key_type (e.g., ec256, rsa2048) instead."
+               case $keylength in
+               ec-*) key_type=${keylength/-/} ;;
+               *) key_type=rsa$keylength ;;
+               esac
+       else
+               config_get key_type "$section" key_type ec256
+       fi
+       export key_type
+       config_get dns "$section" dns
+       export dns
+       config_get acme_server "$section" acme_server
+       export acme_server
+       config_get days "$section" days
+       export days
+       config_get standalone "$section" standalone
+       [ -n "$standalone" ] && log warn "Option \"standalone\" is deprecated."
+       config_get dns_wait "$section" dns_wait
+       export dns_wait
+       config_get webroot "$section" webroot
+       export webroot
+       if [ "$webroot" ]; then
+               log warn "Option \"webroot\" is deprecated, please remove it and change your web server's config so it serves ACME challenge requests from $CHALLENGE_DIR."
+       fi
+
+       config_get validation_method "$section" validation_method
+       # if validation_method isn't set then guess it
+       if [ -z "$validation_method" ]; then
+               if [ -n "$dns" ]; then
+                       validation_method="dns"
+               elif [ "$standalone" = 1 ]; then
+                       validation_method="standalone"
+               else
+                       validation_method="webroot"
+               fi
+               log warn "Please set \"option validation_method $validation_method\"."
+       fi
+       export validation_method
+}
+
+first_arg() {
+       echo "$1"
+}
+
+get_cert() {
+       section=$1
+
+       config_get_bool enabled "$section" enabled 1
+       [ "$enabled" = 1 ] || return
+
+       load_options "$section"
+       if [ "$validation_method" = "webroot" ]; then
+               mkdir -p "$CHALLENGE_DIR"
+       fi
+
+       if [ "$validation_method" = "standalone" ] && [ -z "$NFT_HANDLE" ]; then
+               if ! NFT_HANDLE=$(nft -a -e insert rule inet fw4 input tcp dport 80 counter accept comment ACME | grep -o 'handle [0-9]\+'); then
+                       return 1
+               fi
+               log debug "added nft rule: $NFT_HANDLE"
+       fi
+
+       load_credentials() {
+               eval export "$1"
+       }
+       config_list_foreach "$section" credentials load_credentials
+
+       "$HOOK" get
+}
+
+load_globals() {
+       section=$1
+
+       config_get account_email "$section" account_email
+       if [ -z "$account_email" ]; then
+               log err "account_email option is required"
+               exit 1
+       fi
+       export account_email
+
+       config_get state_dir "$section" state_dir
+       if [ "$state_dir" ]; then
+               log warn "Option \"state_dir\" is deprecated, please remove it. Certificates now exist in $CERT_DIR."
+               mkdir -p "$state_dir"
+       else
+               state_dir=/etc/acme
+       fi
+       export state_dir
+
+       config_get debug "$section" debug 0
+       export debug
+
+       # only look for the first acme section
+       return 1
+}
+
+start_service() {
+       mkdir -p $run_dir
+       exec 200>$run_dir/lock
+       if ! flock -n 200; then
+               log err "Another ACME instance is already running."
+               exit 1
+       fi
+
+       trap cleanup EXIT
+
+       config_load acme
+       config_foreach load_globals acme
+
+       config_foreach get_cert cert
+}
+
+service_triggers() {
+       procd_add_config_trigger config.change acme \
+               /etc/init.d/acme start
+}
diff --git a/package/network/services/acme-common/files/acme.uci-defaults b/package/network/services/acme-common/files/acme.uci-defaults
new file mode 100644 (file)
index 0000000..206f87e
--- /dev/null
@@ -0,0 +1,4 @@
+#!/bin/sh
+
+grep -q '/etc/init.d/acme' /etc/crontabs/root 2>/dev/null && exit 0
+echo "0 0 * * * /etc/init.d/acme start" >>/etc/crontabs/root
diff --git a/package/network/services/acme-common/files/functions.sh b/package/network/services/acme-common/files/functions.sh
new file mode 100644 (file)
index 0000000..5828a6b
--- /dev/null
@@ -0,0 +1,7 @@
+log() {
+       prio="$1"
+       shift
+       if [ "$prio" != debug ] || [ "$debug" = 1 ]; then
+               logger -t "$LOG_TAG" -s -p "daemon.$prio" -- "$@"
+       fi
+}
diff --git a/package/network/services/acme/Makefile b/package/network/services/acme/Makefile
new file mode 100644 (file)
index 0000000..5f260a9
--- /dev/null
@@ -0,0 +1,41 @@
+#
+# Copyright (C) 2016 Toke Høiland-Jørgensen
+#
+# This is free software, licensed under the GNU General Public License v3 or
+# later.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=acme
+PKG_VERSION:=4.0.0
+
+PKG_MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
+PKG_LICENSE:=GPL-3.0-only
+PKG_LICENSE_FILES:=LICENSE.md
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/acme
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+acme-acmesh
+  TITLE:=Shorthand package for acme-acmesh
+  PKGARCH:=all
+endef
+
+define Package/acme/description
+Shorthand package for acme-acmesh.
+endef
+
+define Package/acme/install
+       :
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+$(eval $(call BuildPackage,acme))
diff --git a/package/network/services/darkstat/Makefile b/package/network/services/darkstat/Makefile
new file mode 100644 (file)
index 0000000..0d1d028
--- /dev/null
@@ -0,0 +1,67 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=darkstat
+PKG_VERSION:=3.0.719
+PKG_RELEASE:=6
+
+PKG_MAINTAINER:=Jean-Michel Lacroix <lacroix@lepine-lacroix.info>
+
+PKG_LICENSE:=GPL-2.0 BSD-ISC
+PKG_LICENSE_FILES:=COPYING.GPL LICENSE
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://unix4lyfe.org/darkstat
+PKG_HASH:=aeaf909585f7f43dc032a75328fdb62114e58405b06a92a13c0d3653236dedd7
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/darkstat
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libpcap +zlib
+  TITLE:=Network bandwidth monitor
+  URL:=http://unix4lyfe.org/darkstat/
+endef
+
+define Package/darkstat/description
+darkstat is a packet sniffer that runs as a background process on a cable/DSL
+router, gathers all sorts of statistics about network usage, and serves them
+over HTTP.
+endef
+
+define Package/darkstat/conffiles
+/etc/config/darkstat
+endef
+
+CONFIGURE_ARGS += \
+       --disable-debug \
+       --with-chroot-dir=/var/empty
+
+CONFIGURE_VARS += \
+       ac_cv_search_setproctitle=no \
+       ac_cv_search_strlcpy=no \
+       ac_cv_search_strlcat=no
+
+define Build/Compile
+       $(HOSTCC) $(PKG_BUILD_DIR)/static/c-ify.c \
+               -o $(PKG_BUILD_DIR)/c-ify
+       $(call Build/Compile/Default)
+endef
+
+define Package/darkstat/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/darkstat $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/darkstat.init $(1)/etc/init.d/darkstat
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/darkstat.config $(1)/etc/config/darkstat
+endef
+
+$(eval $(call BuildPackage,darkstat))
diff --git a/package/network/services/darkstat/files/darkstat.config b/package/network/services/darkstat/files/darkstat.config
new file mode 100644 (file)
index 0000000..ebe5718
--- /dev/null
@@ -0,0 +1,21 @@
+config darkstat
+       option interface        'lan'
+       option syslog           false
+       option verbose          false
+       option no_promisc       false
+       option no_dns           false
+       option no_macs          false
+       option no_lastseen      false
+       option httpaddr         '0.0.0.0'
+#      option httpport         '667'
+#      option network_filter   'not (src net 192.168.1 and dst net 192.168.1)'
+#      option network_netmask  '192.168.1.0/255.255.255.0'
+       option local_only       false
+#      option hosts_max        '1000'
+#      option hosts_keep       '500'
+#      option ports_max        '60'
+#      option ports_keep       '30'
+#      option highest_port     '65534'
+#      option export_file      'darkstat_export.log'
+#      option import_file      'darkstat_export.log'
+#      option daylog_file      'darkstat_daylog.log'
diff --git a/package/network/services/darkstat/files/darkstat.init b/package/network/services/darkstat/files/darkstat.init
new file mode 100755 (executable)
index 0000000..5233220
--- /dev/null
@@ -0,0 +1,99 @@
+#!/bin/sh /etc/rc.common 
+# Copyright (C) 2018 Jean-Michel Lacroix
+
+USE_PROCD=1
+
+START=60
+
+APP=darkstat
+RUN_D=/var/darkstat
+PID_F=$RUN_D/$APP.pid
+CONFIGNAME=darkstat
+USER=nobody
+GROUP=nogroup
+
+CONFIGSTR=""
+FILTERSTR=""
+
+export_bool () {
+       local option="$1"
+       local section="$2"
+       local _keystr="$3"
+       local _loctmp
+       config_get_bool _loctmp "$section" "$option"
+       if [ -n "$_loctmp" ]; then
+               if [ 1 -eq "$_loctmp" ]; then
+                       CONFIGSTR="$CONFIGSTR${_keystr} "
+               fi
+       fi
+}
+
+set_config_string(){
+       mkdir -p $RUN_D
+       . /lib/functions/network.sh
+       config_load $CONFIGNAME
+       config_foreach build_config_string darkstat
+}
+
+build_config_string() {
+       local cfg="$1"                                 
+       config_get interface $cfg interface
+       network_get_device ifname "$interface"       
+       CONFIGSTR=" -i $ifname "
+       export_bool syslog $cfg "--syslog"
+       export_bool verbose $cfg "--verbose"
+       # We need the --no-daemon parameter as with PROCD the process has to run in the background
+       CONFIGSTR="$CONFIGSTR--no-daemon "
+       export_bool no_promisc $cfg "--no-promisc"
+       export_bool no_dns $cfg "--no-dns"
+       export_bool no_macs $cfg "--no-macs"
+       export_bool no_lastseen $cfg "--no-lastseen"
+       config_get httpaddr $cfg httpaddr
+       CONFIGSTR="$CONFIGSTR${httpaddr:+-b "$httpaddr"} "
+       config_get httpport $cfg httpport
+       CONFIGSTR="$CONFIGSTR${httpport:+-p "$httpport"} "
+       config_get network_netmask $cfg network_netmask
+       CONFIGSTR="$CONFIGSTR${network_netmask:+-l "$network_netmask"} "
+       export_bool local_only $cfg "--local-only"
+       config_get hosts_max $cfg hosts_max
+       CONFIGSTR="$CONFIGSTR${hosts_max:+--hosts-max "$hosts_max"} "
+       config_get hosts_keep $cfg hosts_keep
+       CONFIGSTR="$CONFIGSTR${ports_keep:+--ports-keep "$ports_keep"} "
+       config_get highest_port $cfg highest_port
+       CONFIGSTR="$CONFIGSTR${highest_port:+--highest-port "$highest_port"} "
+       config_get export_file $cfg export_file
+       CONFIGSTR="$CONFIGSTR${export_file:+--export "$export_file"} "
+       config_get import_file $cfg import_file
+       CONFIGSTR="$CONFIGSTR${import_file:+--import "$import_file"} "
+       config_get daylog_file $cfg daylog_file
+       CONFIGSTR="$CONFIGSTR${daylog_file:+--daylog "$daylog_file"} "
+       CONFIGSTR="$CONFIGSTR--chroot $RUN_D --pidfile $PID_F"
+       # Now that we have the configuration string (CONFIGSTR), let us get the filter (FILTERSTR)
+       config_get network_filter $cfg network_filter
+       FILTERSTR="${network_filter:+$network_filter}"
+}
+
+service_triggers() {
+       procd_add_reload_trigger $CONFIGNAME
+}
+
+start_service() {
+       set_config_string
+       procd_open_instance
+       procd_set_param command /usr/sbin/$APP
+       procd_append_param command $CONFIGSTR
+       # Let us check if we have a filter string and apply it if we do
+       if [ "$FILTERSTR" != "" ]; then
+               procd_append_param command "-f" "$FILTERSTR"
+       fi
+       procd_close_instance
+}
+
+stop_service() {
+       rm -f $PID_F
+}
+
+reload_service() {
+       stop
+       start
+}
diff --git a/package/network/services/darkstat/patches/100-do-not-use-NI_IDN.patch b/package/network/services/darkstat/patches/100-do-not-use-NI_IDN.patch
new file mode 100644 (file)
index 0000000..7f7eecd
--- /dev/null
@@ -0,0 +1,12 @@
+--- a/dns.c
++++ b/dns.c
+@@ -347,9 +347,6 @@ dns_main(void)
+          reply.addr = ip;
+          flags = NI_NAMEREQD;
+-#  ifdef NI_IDN
+-         flags |= NI_IDN;
+-#  endif
+          switch (ip.family) {
+             case IPv4:
+                sin.sin_family = AF_INET;
diff --git a/package/network/services/darkstat/patches/101-allow-multiple-local-interfaces.patch b/package/network/services/darkstat/patches/101-allow-multiple-local-interfaces.patch
new file mode 100644 (file)
index 0000000..7f2e00f
--- /dev/null
@@ -0,0 +1,70 @@
+--- a/acct.c
++++ b/acct.c
+@@ -37,8 +37,9 @@
+ uint64_t acct_total_packets = 0, acct_total_bytes = 0;
++#define LOCAL_NET_MAX 10
+ static int using_localnet4 = 0, using_localnet6 = 0;
+-static struct addr localnet4, localmask4, localnet6, localmask6;
++static struct addr localnet4[LOCAL_NET_MAX], localmask4[LOCAL_NET_MAX], localnet6[LOCAL_NET_MAX], localmask6[LOCAL_NET_MAX];
+ /* Parse the net/mask specification into two IPs or die trying. */
+ void
+@@ -120,13 +121,19 @@ acct_init_localnet(const char *spec)
+    /* Register the correct netmask and calculate the correct net.  */
+    addr_mask(&localnet, &localmask);
+    if (localnet.family == IPv6) {
+-      using_localnet6 = 1;
+-      localnet6 = localnet;
+-      localmask6 = localmask;
++      if(using_localnet6 >= LOCAL_NET_MAX){
++      errx(1, "Exceeded maximum IPv6 local networks");
++      }
++      localnet6[using_localnet6] = localnet;
++      localmask6[using_localnet6] = localmask;
++      using_localnet6++;
+    } else {
+-      using_localnet4 = 1;
+-      localnet4 = localnet;
+-      localmask4 = localmask;
++      if(using_localnet4 >= LOCAL_NET_MAX){
++      errx(1, "Exceeded maximum IPv4 local networks");
++      }
++      localnet4[using_localnet4] = localnet;
++      localmask4[using_localnet4] = localmask;
++      using_localnet4++;
+    }
+    verbosef("local network address: %s", addr_to_str(&localnet));
+@@ -138,11 +145,15 @@ static int addr_is_local(const struct ad
+    if (is_localip(a, local_ips))
+       return 1;
+    if (a->family == IPv4 && using_localnet4) {
+-      if (addr_inside(a, &localnet4, &localmask4))
+-         return 1;
++      for (int i=0; i < using_localnet4; i++){           
++        if (addr_inside(a, &localnet4[i], &localmask4[i]))
++           return 1;
++      }
+    } else if (a->family == IPv6 && using_localnet6) {
+-      if (addr_inside(a, &localnet6, &localmask6))
+-         return 1;
++      for (int i=0; i < using_localnet6; i++){           
++        if (addr_inside(a, &localnet6[i], &localmask6[i]))
++           return 1;
++      }
+    }
+    return 0;
+ }
+--- a/darkstat.c
++++ b/darkstat.c
+@@ -193,7 +193,7 @@ static struct cmdline_arg cmdline_args[]
+    {"-r",             "capfile",         cb_capfile,      0},
+    {"-p",             "port",            cb_port,         0},
+    {"-b",             "bindaddr",        cb_bindaddr,    -1},
+-   {"-l",             "network/netmask", cb_local,        0},
++   {"-l",             "network/netmask", cb_local,       -1},
+    {"--base",         "path",            cb_base,         0},
+    {"--local-only",   NULL,              cb_local_only,   0},
+    {"--snaplen",      "bytes",           cb_snaplen,      0},
diff --git a/package/network/services/ddns-scripts/Makefile b/package/network/services/ddns-scripts/Makefile
new file mode 100644 (file)
index 0000000..607152a
--- /dev/null
@@ -0,0 +1,706 @@
+#
+# Copyright (C) 2008-2018 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ddns-scripts
+PKG_VERSION:=2.8.2
+PKG_RELEASE:=42
+
+PKG_LICENSE:=GPL-2.0
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/ddns-scripts/Default
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=IP Addresses and Names
+  PKGARCH:=all
+endef
+
+
+define Package/ddns-scripts
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Dynamic DNS Client scripts (with IPv6 support)
+  DEPENDS:=+ddns-scripts-services
+endef
+
+define Package/ddns-scripts/description
+  Dynamic DNS Client scripts (with IPv6 support)
+  A highly configurable set of scripts for doing dynamic dns updates.
+  - IPv6 support
+  - DNS server support
+  - Glue Record support (require BIND host or KNOT host)
+  - DNS requests via TCP
+  - Proxy server support
+  - log file support
+  - support to run once
+  Version: $(PKG_VERSION)-$(PKG_RELEASE)
+  Info   : https://openwrt.org/docs/guide-user/services/ddns/client
+endef
+
+define Package/ddns-scripts/conffiles
+/etc/config/ddns
+endef
+
+
+define Package/ddns-scripts-services
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Common ddns providers
+  PROVIDES:=ddns-scripts_service
+endef
+
+define Package/ddns-scripts-services/description
+  Dynamic DNS Client definitions for supported services
+endef
+
+define Package/ddns-scripts-utils
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Utility scripts for ddns configs
+  DEPENDS:=ddns-scripts
+endef
+
+define Package/ddns-scripts-utils/description
+  Dynamic DNS Client utility scripts for config files
+endef
+
+
+define Package/ddns-scripts-luadns
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for LuaDNS API v1
+  DEPENDS:=ddns-scripts +curl
+endef
+
+define Package/ddns-scripts-luadns/description
+  Dynamic DNS Client scripts extension for LuaDNS API v1 (require curl)
+endef
+
+define Package/ddns-scripts-cloudflare
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for cloudflare.com API v4
+  DEPENDS:=ddns-scripts +curl
+  PROVIDES:=ddns-scripts_cloudflare.com-v4
+endef
+
+define Package/ddns-scripts-cloudflare/description
+  Dynamic DNS Client scripts extension for cloudflare.com API v4 (require curl)
+endef
+
+
+define Package/ddns-scripts-gcp
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for Google Cloud DNS API v1
+  DEPENDS:=ddns-scripts +curl +openssl-util
+endef
+
+define Package/ddns-scripts-gcp/description
+  Dynamic DNS Client scripts extension for Google Cloud DNS API v1 (requires curl)
+endef
+
+
+define Package/ddns-scripts-freedns
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for freedns.42.pl
+  DEPENDS:=ddns-scripts +curl
+  PROVIDES:=ddns-scripts_freedns_42_pl
+endef
+
+define Package/ddns-scripts-freedns/description
+  Dynamic DNS Client scripts extension for "freedns.42.pl".
+endef
+
+
+define Package/ddns-scripts-godaddy
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for godaddy.com API v1
+  DEPENDS:=ddns-scripts +curl
+  PROVIDES:=ddns-scripts_godaddy.com-v1
+endef
+
+define Package/ddns-scripts-godaddy/description
+  Dynamic DNS Client scripts extension for "godaddy.com API v1".
+endef
+
+
+define Package/ddns-scripts-digitalocean
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extention for digitalocean.com API v2
+  DEPENDS:=ddns-scripts +curl
+  PROVIDES:=ddns-scripts_digitalocean.com-v2
+endef
+
+define Package/ddns-scripts-digitalocean/description
+  Dynamic DNS Client scripts extension for "digitalocean.com API v2".
+  The script directly updates a DNS record using the DO API.
+  It requires:
+  "option dns_server" to be set to the server to be used by nsupdate.
+  "option domain" the dns domain to update the record for (eg. A-record: home.<example.com>)
+  "option username" the dns record name to update (eg. A-record: <home>.example.com)
+  "option param_opt" the id of the dns record to update (check using chrome inspector in the DO dns tab)
+  "option password" the api token generated in the DO panel
+endef
+
+
+define Package/ddns-scripts-dnspod
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for dnspod.cn API
+  DEPENDS:=ddns-scripts +curl
+endef
+
+define Package/ddns-scripts-dnspod/description
+  Dynamic DNS Client scripts extension for dnspod.cn API (require curl)
+endef
+
+
+define Package/ddns-scripts-noip
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for no-ip.com
+  DEPENDS:=ddns-scripts
+  PROVIDES:=ddns-scripts_no-ip_com
+endef
+
+define Package/ddns-scripts-noip/description
+  Dynamic DNS Client scripts extension for "no-ip.com".
+endef
+
+define Package/ddns-scripts-ns1
+  $(call Package/ddns-scripts/Default)
+  TITLE:=NS1 API
+  DEPENDS:=ddns-scripts +curl
+endef
+
+define Package/ddns-scripts-ns1/description
+  Dynamic DNS Client scripts extension for "ns1.com".
+  It requires:
+  "option username" to be a valid zone for ns1.com
+  "option password" to be a valid API key for ns1.com
+endef
+
+
+define Package/ddns-scripts-nsupdate
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for using bind nsupdate.
+  DEPENDS:=ddns-scripts +bind-client
+  PROVIDES:=ddns-scripts_nsupdate
+endef
+
+define Package/ddns-scripts-nsupdate/description
+  Dynamic DNS Client scripts extension for direct updates using bind nsupdate
+  The script directly updates a PowerDNS (or maybe bind server) via nsupdate
+  from bind-client package.
+  It requires:
+  "option dns_server" to be set to the server to be used by nsupdate.
+  "option username" should be set to the key name and
+  "option password" to the base64 encoded shared secret.
+endef
+
+
+define Package/ddns-scripts-route53
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for route53 API v1
+  DEPENDS:=ddns-scripts +curl +openssl-util
+  PROVIDES:=ddns-scripts_route53-v1
+endef
+
+define Package/ddns-scripts-route53/description
+  Dynamic DNS Client scripts extension for Amazon AWS "route53 API v1".
+  Note: You must also install ca-certificate or ca-bundle.
+  It requires:
+  "option username" to be a valid AWS access key id
+  "option password" to be the matching AWS secret key id
+  "option domain" to contain the hosted zone ID
+endef
+
+
+define Package/ddns-scripts-cnkuai
+  $(call Package/ddns-scripts/Default)
+  TITLE:=CnKuai API
+  DEPENDS:=ddns-scripts +curl +giflib-utils
+  PROVIDES:=ddns-scripts_cnkuai_cn
+endef
+
+define Package/ddns-scripts-cnkuai/description
+  Dynamic DNS Client scripts extension for "cnkuai.cn".
+  It requires:
+  "option username" to be a valid CnKuai control panel id
+  "option password" to be the matching CnKuai control panel password
+  "option domain" to contain the domain
+endef
+
+
+define Package/ddns-scripts-gandi
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Gandi API
+  DEPENDS:=ddns-scripts +curl
+endef
+
+define Package/ddns-scripts-gandi/description
+  Dynamic DNS Client scripts extension for "gandi.net".
+  It requires:
+  "option username" to be a valid subdomain for gandi.net
+  "option password" to be a valid API key for gandi.net
+endef
+
+
+define Package/ddns-scripts-pdns
+  $(call Package/ddns-scripts/Default)
+  TITLE:=PowerDNS API
+  DEPENDS:=ddns-scripts +curl
+endef
+
+define Package/ddns-scripts-pdns/description
+  Dynamic DNS Client scripts extension for "PowerDNS" via API.
+  It requires:
+  "option param_opt(Optional Parameter)" to be a valid root URL for the PowerDNS webserver
+  "option username" to be a valid subdomain for the PowerDNS domain
+  "option password" to be a valid API key for the PowerDNS webserver
+endef
+
+
+define Package/ddns-scripts-transip
+  $(call Package/ddns-scripts/Default)
+  TITLE:=Extension for TransIP API
+  DEPENDS:=ddns-scripts +curl +openssl-util +!BUSYBOX_CONFIG_MKTEMP:coreutils-mktemp
+endef
+
+define Package/ddns-scripts-transip/description
+  Dynamic DNS Client scripts extension for "transip.nl".
+  Note: You must also install ca-certificate or ca-bundle.
+  It requires:
+  "option username" to be a valid username for transip.nl
+  "option password" to be a valid matching private key
+  "option domain" to contain the base domain
+  "option param_enc" to contain the name of the DNS record to update
+  "option param_opt" to contain the TTL of the DNS record to update
+endef
+
+define Package/ddns-scripts-one
+       $(call Package/ddns-scripts/Default)
+       TITLE:=Extension for one.com Control Panel
+       DEPENDS:=ddns-scripts +curl
+endef
+
+define Package/ddns-scrtips-one/description
+       Dynamic DNS Client scripts extension for "one.com".
+       It requires:
+       "option username" to be a valid Email for one.com Control Panel
+       "option password" to be the matching one.com Control Panel password
+       "option domain" to contain the domain / subdomain
+endef
+
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+
+define Package/ddns-scripts/install
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+       $(INSTALL_DATA) ./files/etc/hotplug.d/iface/ddns \
+               $(1)/etc/hotplug.d/iface/95-ddns
+
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/etc/init.d/ddns \
+               $(1)/etc/init.d/ddns
+
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/etc/config/ddns \
+               $(1)/etc/config/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns
+       echo "$(PKG_VERSION)-$(PKG_RELEASE)" > $(1)/usr/share/ddns/version
+
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_DATA) ./files/usr/lib/ddns/dynamic_dns_functions.sh \
+               $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/dynamic_dns_lucihelper.sh \
+               $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/dynamic_dns_updater.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) ./files/usr/bin/ddns.sh \
+               $(1)/usr/bin/ddns
+endef
+
+define Package/ddns-scripts/postinst
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns enabled
+       /etc/init.d/ddns start
+fi
+exit 0
+endef
+
+define Package/ddns-scripts/prerm
+#!/bin/sh
+if [ -n "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+       /etc/init.d/ddns disable
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-services/install
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/* \
+               $(1)/usr/share/ddns/default
+
+       # Remove special services
+       rm $(1)/usr/share/ddns/default/luadns.com-v1.json
+       rm $(1)/usr/share/ddns/default/cloudflare.com-v4.json
+       rm $(1)/usr/share/ddns/default/cloud.google.com-v1.json
+       rm $(1)/usr/share/ddns/default/freedns.42.pl.json
+       rm $(1)/usr/share/ddns/default/godaddy.com-v1.json
+       rm $(1)/usr/share/ddns/default/digitalocean.com-v2.json
+       rm $(1)/usr/share/ddns/default/dnspod.cn.json
+       rm $(1)/usr/share/ddns/default/no-ip.com.json
+       rm $(1)/usr/share/ddns/default/bind-nsupdate.json
+       rm $(1)/usr/share/ddns/default/route53-v1.json
+       rm $(1)/usr/share/ddns/default/cnkuai.cn.json
+       rm $(1)/usr/share/ddns/default/gandi.net.json
+       rm $(1)/usr/share/ddns/default/pdns.json
+       rm $(1)/usr/share/ddns/default/transip.nl.json
+       rm $(1)/usr/share/ddns/default/ns1.com.json
+       rm $(1)/usr/share/ddns/default/one.com.json
+endef
+
+
+define Package/ddns-scripts-utils/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./samples/slaac_sample.sh \
+               $(1)/usr/lib/ddns/slaac.sh
+       $(INSTALL_BIN) ./samples/getlocalip_sample.sh \
+               $(1)/usr/lib/ddns/getlocalip.sh
+endef
+
+
+define Package/ddns-scripts-luadns/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_luadns_v1.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/luadns.com-v1.json \
+               $(1)/usr/share/ddns/default/
+endef
+
+define Package/ddns-scripts-luadns/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-cloudflare/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_cloudflare_com_v4.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/cloudflare.com-v4.json \
+               $(1)/usr/share/ddns/default/
+endef
+
+define Package/ddns-scripts-cloudflare/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-gcp/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_gcp_v1.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/cloud.google.com-v1.json \
+               $(1)/usr/share/ddns/default/
+endef
+
+define Package/ddns-scripts-gcp/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-freedns/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_freedns_42_pl.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/freedns.42.pl.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-freedns/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-godaddy/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_godaddy_com_v1.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/godaddy.com-v1.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-godaddy/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-digitalocean/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_digitalocean_com_v2.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/digitalocean.com-v2.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-digitalocean/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-dnspod/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_dnspod_cn.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/dnspod.cn.json \
+               $(1)/usr/share/ddns/default/
+endef
+
+define Package/ddns-scripts-dnspod/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-noip/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_no-ip_com.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/no-ip.com.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-noip/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-ns1/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_ns1_com.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/ns1.com.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-ns1/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-nsupdate/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_nsupdate.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/bind-nsupdate.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-nsupdate/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-route53/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_route53_v1.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/route53-v1.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-route53/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-cnkuai/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_cnkuai_cn.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/cnkuai.cn.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-cnkuai/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-gandi/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_gandi_net.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/gandi.net.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-gandi/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-pdns/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_pdns.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/pdns.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-pdns/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-transip/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_transip_nl.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/transip.nl.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-transip/prerm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+define Package/ddns-scripts-one/install
+       $(INSTALL_DIR) $(1)/usr/lib/ddns
+       $(INSTALL_BIN) ./files/usr/lib/ddns/update_one_com.sh \
+               $(1)/usr/lib/ddns
+
+       $(INSTALL_DIR) $(1)/usr/share/ddns/default
+       $(INSTALL_DATA) ./files/usr/share/ddns/default/one.com.json \
+               $(1)/usr/share/ddns/default
+endef
+
+define Package/ddns-scripts-one/prerm
+#!/bin/sh
+if [-z "${IPKG_INSTROOT}" ]; then
+       /etc/init.d/ddns stop
+fi
+exit 0
+endef
+
+
+$(eval $(call BuildPackage,ddns-scripts))
+$(eval $(call BuildPackage,ddns-scripts-services))
+$(eval $(call BuildPackage,ddns-scripts-utils))
+$(eval $(call BuildPackage,ddns-scripts-luadns))
+$(eval $(call BuildPackage,ddns-scripts-cloudflare))
+$(eval $(call BuildPackage,ddns-scripts-gcp))
+$(eval $(call BuildPackage,ddns-scripts-freedns))
+$(eval $(call BuildPackage,ddns-scripts-godaddy))
+$(eval $(call BuildPackage,ddns-scripts-digitalocean))
+$(eval $(call BuildPackage,ddns-scripts-dnspod))
+$(eval $(call BuildPackage,ddns-scripts-noip))
+$(eval $(call BuildPackage,ddns-scripts-nsupdate))
+$(eval $(call BuildPackage,ddns-scripts-route53))
+$(eval $(call BuildPackage,ddns-scripts-cnkuai))
+$(eval $(call BuildPackage,ddns-scripts-gandi))
+$(eval $(call BuildPackage,ddns-scripts-pdns))
+$(eval $(call BuildPackage,ddns-scripts-transip))
+$(eval $(call BuildPackage,ddns-scripts-ns1))
+$(eval $(call BuildPackage,ddns-scripts-one))
diff --git a/package/network/services/ddns-scripts/files/etc/config/ddns b/package/network/services/ddns-scripts/files/etc/config/ddns
new file mode 100644 (file)
index 0000000..b45855f
--- /dev/null
@@ -0,0 +1,32 @@
+#
+# Please read https://openwrt.org/docs/guide-user/base-system/ddns
+#
+config ddns "global"
+       option ddns_dateformat "%F %R"
+#      option ddns_rundir "/var/run/ddns"
+#      option ddns_logdir "/var/log/ddns"
+       option ddns_loglines "250"
+       option upd_privateip "0"
+
+
+config service "myddns_ipv4"
+       option service_name     "dyndns.org"
+       option lookup_host      "yourhost.example.com"
+       option domain           "yourhost.example.com"
+       option username         "your_username"
+       option password         "your_password"
+       option interface        "wan"
+       option ip_source        "network"
+       option ip_network       "wan"
+
+config service "myddns_ipv6"
+       option update_url       "http://[USERNAME]:[PASSWORD]@your.provider.net/nic/update?hostname=[DOMAIN]&myip=[IP]"
+       option lookup_host      "yourhost.example.com"
+       option domain           "yourhost.example.com"
+       option username         "your_username"
+       option password         "your_password"
+       option use_ipv6         "1"
+       option interface        "wan6"
+       option ip_source        "network"
+       option ip_network       "wan6"
+
diff --git a/package/network/services/ddns-scripts/files/etc/hotplug.d/iface/ddns b/package/network/services/ddns-scripts/files/etc/hotplug.d/iface/ddns
new file mode 100644 (file)
index 0000000..9ef172d
--- /dev/null
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+# there are other ACTIONs like ifupdate we don't need
+case "$ACTION" in
+       ifup)                                   # OpenWrt is giving a network not phys. Interface
+               /etc/init.d/ddns enabled && /usr/lib/ddns/dynamic_dns_updater.sh -n "$INTERFACE" -- start
+               ;;
+       ifdown)
+               /usr/lib/ddns/dynamic_dns_updater.sh -n "$INTERFACE" -- stop
+               ;;
+esac
diff --git a/package/network/services/ddns-scripts/files/etc/init.d/ddns b/package/network/services/ddns-scripts/files/etc/init.d/ddns
new file mode 100644 (file)
index 0000000..b2156a6
--- /dev/null
@@ -0,0 +1,27 @@
+#!/bin/sh /etc/rc.common
+START=95
+STOP=10
+
+boot() {
+       return 0
+}
+
+reload() {
+       /usr/lib/ddns/dynamic_dns_updater.sh -- reload
+       return 0
+}
+
+restart() {
+       /usr/lib/ddns/dynamic_dns_updater.sh -- stop
+       sleep 1 # give time to shutdown
+       /usr/lib/ddns/dynamic_dns_updater.sh -- start
+}
+
+start() {
+       /usr/lib/ddns/dynamic_dns_updater.sh -- start
+}
+
+stop() {
+       /usr/lib/ddns/dynamic_dns_updater.sh -- stop
+       return 0
+}
diff --git a/package/network/services/ddns-scripts/files/usr/bin/ddns.sh b/package/network/services/ddns-scripts/files/usr/bin/ddns.sh
new file mode 100644 (file)
index 0000000..921465f
--- /dev/null
@@ -0,0 +1,172 @@
+#!/bin/sh
+#
+# Copyright (C) 2020 TDT AG <development@tdt.de>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See https://www.gnu.org/licenses/gpl-2.0.txt for more information.
+#
+
+. /lib/functions.sh
+
+DDNS_PACKAGE_DIR="/usr/share/ddns"
+URL="https://raw.githubusercontent.com/openwrt/packages/master/net/ddns-scripts/files"
+
+usage() {
+       local code="$1"
+       local msg="$2"
+
+       echo "$msg"
+       echo ""
+       echo "Usage: $(basename "$0") <command> <action> <service>"
+       echo ""
+       echo "Supported ddns <command>:"
+       echo "  service:  Command for custom ddns service providers"
+       echo ""
+       echo "Supported ddns 'service' command <action>:"
+       echo "  update:             Update local custom ddns service list"
+       echo "  list-available:     List all available custom service providers"
+       echo "  list-installed:     List all installed custom service providers"
+       echo "  install <service>:  Install custom service provider"
+       echo "  remove <service>:   Remove custom service provider"
+       echo "  purge:              Remove local custom ddns services"
+
+       exit "$code"
+}
+
+action_update() {
+       local cacert
+
+       config_load ddns
+       config_get url global 'url' "${URL}${DDNS_PACKAGE_DIR}"
+       config_get cacert global 'cacert' "IGNORE"
+       url="${url}/list"
+
+       mkdir -p "${DDNS_PACKAGE_DIR}"
+
+       if [ "$cacert" = "IGNORE" ]; then
+               uclient-fetch \
+                       --no-check-certificate \
+                       "$url" \
+                       -O "${DDNS_PACKAGE_DIR}/list"
+       elif [ -f "$cacert" ]; then
+               uclient-fetch \
+                       --ca-certificate="${cacert}" \
+                       "$url" \
+                       -O "${DDNS_PACKAGE_DIR}/list"
+       elif [ -n "$cacert" ]; then
+               echo "Certification file not found ($cacert)"
+               exit 5
+       fi
+}
+
+action_list_available() {
+       if [ -f "${DDNS_PACKAGE_DIR}/list" ]; then
+               cat "${DDNS_PACKAGE_DIR}/list"
+       else
+               echo "No custom service list file found. Please download first"
+               exit 3
+       fi
+}
+
+action_list_installed() {
+       if [ -d "${DDNS_PACKAGE_DIR}/custom" ]; then
+               ls "${DDNS_PACKAGE_DIR}/custom"
+       else
+               echo "No custom services installed"
+               exit 4
+       fi
+}
+
+action_install() {
+       local service="$1"
+
+       local url cacert
+
+       config_load ddns
+       config_get url global 'url' "${URL}${DDNS_PACKAGE_DIR}/default"
+       config_get cacert global 'cacert' "IGNORE"
+       url="${url}/${service}.json"
+
+       if [ -z "$service" ]; then
+               usage "4" "No custom service specified"
+       fi
+
+       mkdir -p "${DDNS_PACKAGE_DIR}/custom"
+
+       if [ "$cacert" = "IGNORE" ]; then
+               uclient-fetch \
+                       --no-check-certificate \
+                       "${url}" \
+                       -O "${DDNS_PACKAGE_DIR}/custom/${service}.json"
+       elif [ -f "$cacert" ]; then
+               uclient-fetch \
+                       --ca-certifcate="${cacert}" \
+                       "${url}" \
+                       -O "${DDNS_PACKAGE_DIR}/custom/${service}.json"
+       elif [ -n "$cacert" ]; then
+               echo "Certification file not found ($cacert)"
+               exit 5
+       fi
+}
+
+action_remove() {
+       local service="$1"
+       if [ -z "$service" ]; then
+               usage "4" "No custom service specified"
+       fi
+
+       rm "${DDNS_PACKAGE_DIR}/custom/${service}.json"
+}
+
+action_purge() {
+       rm -rf "${DDNS_PACKAGE_DIR}/custom"
+       rm -rf "${DDNS_PACKAGE_DIR}/list"
+}
+
+sub_service() {
+       local action="$1"
+       local service="$2"
+
+       case "$action" in
+               update)
+                       action_update
+                       ;;
+               list-available)
+                       action_list_available
+                       ;;
+               list-installed)
+                       action_list_installed
+                       ;;
+               purge)
+                       action_purge
+                       ;;
+               install)
+                       action_install "$service"
+                       ;;
+               remove)
+                       action_remove "$service"
+                       ;;
+               *)
+                       usage "2" "Action not supported"
+                       ;;
+       esac
+}
+
+main() {
+       local cmd="$1"
+       local action="$2"
+       local service="$3"
+
+       [ "$#" -eq 0 ] && usage "1"
+
+       case "${cmd}" in
+               service)
+                       sub_service "${action}" "${service}"
+                       ;;
+               *)
+                       usage "1" "Command not supported"
+                       ;;
+       esac
+}
+
+main "$@"
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_functions.sh
new file mode 100644 (file)
index 0000000..1747544
--- /dev/null
@@ -0,0 +1,1404 @@
+#!/bin/sh
+# /usr/lib/ddns/dynamic_dns_functions.sh
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+# Original written by Eric Paul Bishop, January 2008
+# (Loosely) based on the script on the one posted by exobyte in the forums here:
+# http://forum.openwrt.org/viewtopic.php?id=14040
+# extended and partial rewritten
+#.2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# function timeout
+# copied from http://www.ict.griffith.edu.au/anthony/software/timeout.sh
+# @author Anthony Thyssen  6 April 2011
+#
+# variables in small chars are read from /etc/config/ddns
+# variables in big chars are defined inside these scripts as global vars
+# variables in big chars beginning with "__" are local defined inside functions only
+# set -vx      #script debugger
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+
+# GLOBAL VARIABLES #
+if [ -f "/usr/share/ddns/version" ]; then
+       VERSION="$(cat "/usr/share/ddns/version")"
+else
+       VERSION="unknown"
+fi
+SECTION_ID=""          # hold config's section name
+VERBOSE=0              # default mode is log to console, but easily changed with parameter
+DRY_RUN=0              # run without actually doing (sending) any changes
+MYPROG=$(basename $0)  # my program call name
+
+LOGFILE=""             # logfile - all files are set in dynamic_dns_updater.sh
+PIDFILE=""             # pid file
+UPDFILE=""             # store UPTIME of last update
+DATFILE=""             # save stdout data of WGet and other external programs called
+ERRFILE=""             # save stderr output of WGet and other external programs called
+IPFILE=""              # store registered IP for read by LuCI status
+TLDFILE=/usr/share/public_suffix_list.dat.gz   # TLD file used by split_FQDN
+
+CHECK_SECONDS=0                # calculated seconds out of given
+FORCE_SECONDS=0                # interval and unit
+RETRY_SECONDS=0                # in configuration
+
+LAST_TIME=0            # holds the uptime of last successful update
+CURR_TIME=0            # holds the current uptime
+NEXT_TIME=0            # calculated time for next FORCED update
+EPOCH_TIME=0           # seconds since 1.1.1970 00:00:00
+
+CURRENT_IP=""          # holds the current IP read from the box
+REGISTERED_IP=""       # holds the IP read from DNS
+
+URL_USER=""            # url encoded $username from config file
+URL_PASS=""            # url encoded $password from config file
+URL_PENC=""            # url encoded $param_enc from config file
+
+UPD_ANSWER=""          # Answer given by service on success
+
+ERR_LAST=0             # used to save $? return code of program and function calls
+RETRY_COUNT=0          # error counter on different current and registered IPs
+
+PID_SLEEP=0            # ProcessID of current background "sleep"
+
+# regular expression to detect IPv4 / IPv6
+# IPv4       0-9   1-3x "." 0-9  1-3x "." 0-9  1-3x "." 0-9  1-3x
+IPV4_REGEX="[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}"
+# IPv6       ( ( 0-9a-f  1-4char ":") min 1x) ( ( 0-9a-f  1-4char   )optional) ( (":" 0-9a-f 1-4char  ) min 1x)
+IPV6_REGEX="\(\([0-9A-Fa-f]\{1,4\}:\)\{1,\}\)\(\([0-9A-Fa-f]\{1,4\}\)\{0,1\}\)\(\(:[0-9A-Fa-f]\{1,4\}\)\{1,\}\)"
+
+# characters that are dangerous to pass to a shell command line
+SHELL_ESCAPE="[\"\'\`\$\!();><{}?|\[\]\*\\\\]"
+
+# dns character set. "-" must be the last character
+DNS_CHARSET="[@a-zA-Z0-9._-]"
+
+# domains can have * for wildcard. "-" must be the last character
+DNS_CHARSET_DOMAIN="[@a-zA-Z0-9._*-]"
+
+# detect if called by ddns-lucihelper.sh script, disable retrys (empty variable == false)
+LUCI_HELPER=$(printf %s "$MYPROG" | grep -i "luci")
+
+# Name Server Lookup Programs
+BIND_HOST=$(command -v host)
+KNOT_HOST=$(command -v khost)
+DRILL=$(command -v drill)
+HOSTIP=$(command -v hostip)
+NSLOOKUP=$(command -v nslookup)
+
+# Transfer Programs
+WGET=$(command -v wget)
+$WGET -V 2>/dev/null | grep -F -q +https && WGET_SSL=$WGET
+
+CURL=$(command -v curl)
+# CURL_SSL not empty then SSL support available
+CURL_SSL=$($CURL -V 2>/dev/null | grep -F "https")
+# CURL_PROXY not empty then Proxy support available
+CURL_PROXY=$(find /lib /usr/lib -name libcurl.so* -exec strings {} 2>/dev/null \; | grep -im1 "all_proxy")
+
+UCLIENT_FETCH=$(command -v uclient-fetch)
+
+# Global configuration settings
+# allow NON-public IP's
+upd_privateip=$(uci -q get ddns.global.upd_privateip) || upd_privateip=0
+
+# directory to store run information to.
+ddns_rundir=$(uci -q get ddns.global.ddns_rundir) || ddns_rundir="/var/run/ddns"
+[ -d $ddns_rundir ] || mkdir -p -m755 $ddns_rundir
+
+# directory to store log files
+ddns_logdir=$(uci -q get ddns.global.ddns_logdir) || ddns_logdir="/var/log/ddns"
+[ -d $ddns_logdir ] || mkdir -p -m755 $ddns_logdir
+
+# number of lines to before rotate logfile
+ddns_loglines=$(uci -q get ddns.global.ddns_loglines) || ddns_loglines=250
+ddns_loglines=$((ddns_loglines + 1))   # correct sed handling
+
+# format to show date information in log and luci-app-ddns default ISO 8601 format
+ddns_dateformat=$(uci -q get ddns.global.ddns_dateformat) || ddns_dateformat="%F %R"
+DATE_PROG="date +'$ddns_dateformat'"
+
+# USE_CURL if GNU Wget and cURL installed normally Wget is used by do_transfer()
+# to change this use global option use_curl '1'
+USE_CURL=$(uci -q get ddns.global.use_curl) || USE_CURL=0      # read config
+[ -n "$CURL" ] || USE_CURL=0                                   # check for cURL
+
+# loads all options for a given package and section
+# also, sets all_option_variables to a list of the variable names
+# $1 = ddns, $2 = SECTION_ID
+load_all_config_options()
+{
+       local __PKGNAME="$1"
+       local __SECTIONID="$2"
+       local __VAR
+       local __ALL_OPTION_VARIABLES=""
+
+       # this callback loads all the variables in the __SECTIONID section when we do
+       # config_load. We need to redefine the option_cb for different sections
+       # so that the active one isn't still active after we're done with it.  For reference
+       # the $1 variable is the name of the option and $2 is the name of the section
+       config_cb()
+       {
+               if [ ."$2" = ."$__SECTIONID" ]; then
+                       option_cb()
+                       {
+                               __ALL_OPTION_VARIABLES="$__ALL_OPTION_VARIABLES $1"
+                       }
+               else
+                       option_cb() { return 0; }
+               fi
+       }
+
+       config_load "$__PKGNAME"
+
+       # Given SECTION_ID not found so no data, so return 1
+       [ -z "$__ALL_OPTION_VARIABLES" ] && return 1
+
+       for __VAR in $__ALL_OPTION_VARIABLES
+       do
+               config_get "$__VAR" "$__SECTIONID" "$__VAR"
+       done
+       return 0
+}
+
+# read's all service sections from ddns config
+# $1 = Name of variable to store
+load_all_service_sections() {
+       local __DATA=""
+       config_cb()
+       {
+               # only look for section type "service", ignore everything else
+               [ "$1" = "service" ] && __DATA="$__DATA $2"
+       }
+       config_load "ddns"
+
+       eval "$1=\"$__DATA\""
+       return
+}
+
+# starts updater script for all given sections or only for the one given
+# $1 = interface (Optional: when given only scripts are started
+# configured for that interface)
+# used by /etc/hotplug.d/iface/95-ddns on IFUP
+# and by /etc/init.d/ddns start
+start_daemon_for_all_ddns_sections()
+{
+       local __EVENTIF="$1"
+       local __SECTIONS=""
+       local __SECTIONID=""
+       local __IFACE=""
+
+       load_all_service_sections __SECTIONS
+       for __SECTIONID in $__SECTIONS; do
+               config_get __IFACE "$__SECTIONID" interface "wan"
+               [ -z "$__EVENTIF" -o "$__IFACE" = "$__EVENTIF" ] || continue
+               if [ $VERBOSE -eq 0 ]; then     # start in background
+                       /usr/lib/ddns/dynamic_dns_updater.sh -v 0 -S "$__SECTIONID" -- start &
+               else
+                       /usr/lib/ddns/dynamic_dns_updater.sh -v "$VERBOSE" -S "$__SECTIONID" -- start
+               fi
+       done
+}
+
+# stop sections process incl. childs (sleeps)
+# $1 = section
+stop_section_processes() {
+       local __PID=0
+       local __PIDFILE="$ddns_rundir/$1.pid"
+       [ $# -ne 1 ] && write_log 12 "Error calling 'stop_section_processes()' - wrong number of parameters"
+
+       [ -e "$__PIDFILE" ] && {
+               __PID=$(cat $__PIDFILE)
+               ps | grep "^[\t ]*$__PID" >/dev/null 2>&1 && kill $__PID || __PID=0     # terminate it
+       }
+       [ $__PID -eq 0 ] # report if process was running
+}
+
+# stop updater script for all defines sections or only for one given
+# $1 = interface (optional)
+# used by /etc/hotplug.d/iface/95-ddns on 'ifdown'
+# and by /etc/init.d/ddns stop
+# needed because we also need to kill "sleep" child processes
+stop_daemon_for_all_ddns_sections() {
+       local __EVENTIF="$1"
+       local __SECTIONS=""
+       local __SECTIONID=""
+       local __IFACE=""
+
+       load_all_service_sections __SECTIONS
+       for __SECTIONID in $__SECTIONS; do
+               config_get __IFACE "$__SECTIONID" interface "wan"
+               [ -z "$__EVENTIF" -o "$__IFACE" = "$__EVENTIF" ] || continue
+               stop_section_processes "$__SECTIONID"
+       done
+}
+
+# reports to console, logfile, syslog
+# $1   loglevel 7 == Debug to 0 == EMERG
+#      value +10 will exit the scripts
+# $2..n        text to report
+write_log() {
+       local __LEVEL __EXIT __CMD __MSG __MSE
+       local __TIME=$(date +%H%M%S)
+       [ $1 -ge 10 ] && {
+               __LEVEL=$(($1-10))
+               __EXIT=1
+       } || {
+               __LEVEL=$1
+               __EXIT=0
+       }
+       shift   # remove loglevel
+       [ $__EXIT -eq 0 ] && __MSG="$*" || __MSG="$* - TERMINATE"
+       case $__LEVEL in                # create log message and command depending on loglevel
+               0)      __CMD="logger -p user.emerg -t ddns-scripts[$$] $SECTION_ID: $__MSG"
+                       __MSG=" $__TIME EMERG : $__MSG" ;;
+               1)      __CMD="logger -p user.alert -t ddns-scripts[$$] $SECTION_ID: $__MSG"
+                       __MSG=" $__TIME ALERT : $__MSG" ;;
+               2)      __CMD="logger -p user.crit -t ddns-scripts[$$] $SECTION_ID: $__MSG"
+                       __MSG=" $__TIME  CRIT : $__MSG" ;;
+               3)      __CMD="logger -p user.err -t ddns-scripts[$$] $SECTION_ID: $__MSG"
+                       __MSG=" $__TIME ERROR : $__MSG" ;;
+               4)      __CMD="logger -p user.warn -t ddns-scripts[$$] $SECTION_ID: $__MSG"
+                       __MSG=" $__TIME  WARN : $__MSG" ;;
+               5)      __CMD="logger -p user.notice -t ddns-scripts[$$] $SECTION_ID: $__MSG"
+                       __MSG=" $__TIME  note : $__MSG" ;;
+               6)      __CMD="logger -p user.info -t ddns-scripts[$$] $SECTION_ID: $__MSG"
+                       __MSG=" $__TIME  info : $__MSG" ;;
+               7)      __MSG=" $__TIME       : $__MSG";;
+               *)      return;;
+       esac
+
+       # verbose echo
+       [ $VERBOSE -gt 0 -o $__EXIT -gt 0 ] && echo -e "$__MSG"
+       # write to logfile
+       if [ ${use_logfile:-1} -eq 1 -o $VERBOSE -gt 1 ]; then
+               if [ -n "$password" ]; then
+                       # url encode __MSG, password already done
+                       urlencode __MSE "$__MSG"
+                       # replace encoded password inside encoded message
+                       # and url decode (newline was encoded as %00)
+                       __MSG=$( echo -e "$__MSE" \
+                               | sed -e "s/$URL_PASS/***PW***/g" \
+                               | sed -e "s/+/ /g; s/%00/\n/g; s/%/\\\\x/g" | xargs -0 printf "%b" )
+               fi
+               printf "%s\n" "$__MSG" >> $LOGFILE
+               # VERBOSE > 1 then NO loop so NO truncate log to $ddns_loglines lines
+               [ $VERBOSE -gt 1 ] || sed -i -e :a -e '$q;N;'$ddns_loglines',$D;ba' $LOGFILE
+       fi
+       [ -n "$LUCI_HELPER" ] && return # nothing else todo when running LuCI helper script
+       [ $__LEVEL -eq 7 ] && return    # no syslog for debug messages
+       __CMD=$(echo -e "$__CMD" | tr -d '\n' | tr '\t' '     ')        # remove \n \t chars
+       [ $__EXIT  -eq 1 ] && {
+               eval '$__CMD'   # force syslog before exit
+               exit 1
+       }
+       [ $use_syslog -eq 0 ] && return
+       [ $((use_syslog + __LEVEL)) -le 7 ] && eval '$__CMD'
+
+       return
+}
+
+# replace all special chars to their %hex value
+# used for USERNAME and PASSWORD in update_url
+# unchanged: "-"(minus) "_"(underscore) "."(dot) "~"(tilde)
+# to verify: "'"(single quote) '"'(double quote)       # because shell delimiter
+#            "$"(Dollar)                               # because used as variable output
+# tested with the following string stored via Luci Application as password / username
+# A B!"#AA$1BB%&'()*+,-./:;<=>?@[\]^_`{|}~     without problems at Dollar or quotes
+urlencode() {
+       # $1    Name of Variable to store encoded string to
+       # $2    string to encode
+       local __ENC
+
+       [ $# -ne 2 ] && write_log 12 "Error calling 'urlencode()' - wrong number of parameters"
+
+       __ENC="$(awk -v str="$2" 'BEGIN{ORS="";for(i=32;i<=127;i++)lookup[sprintf("%c",i)]=i
+               for(k=1;k<=length(str);++k){enc=substr(str,k,1);if(enc!~"[-_.~a-zA-Z0-9]")enc=sprintf("%%%02x", lookup[enc]);print enc}}')"
+
+       eval "$1=\"$__ENC\""    # transfer back to variable
+       return 0
+}
+
+# extract url or script for given DDNS Provider from
+# $1   Name of the provider
+# $2   Provider directory
+# $3   Name of Variable to store url to
+# $4   Name of Variable to store script to
+# $5   Name of Variable to store service answer to
+get_service_data() {
+       local provider="$1"
+       shift
+       local dir="$1"
+       shift
+
+       . /usr/share/libubox/jshn.sh
+       local name data url answer script
+
+       [ $# -ne 3 ] && write_log 12 "Error calling 'get_service_data()' - wrong number of parameters"
+
+       [ -f "${dir}/${provider}.json" ] || {
+               eval "$1=\"\""
+               eval "$2=\"\""
+               eval "$3=\"\""
+               return 1
+       }
+
+       json_load_file "${dir}/${provider}.json"
+       json_get_var name "name"
+       if [ "$use_ipv6" -eq "1" ]; then
+               json_select "ipv6"
+       else
+               json_select "ipv4"
+       fi
+       json_get_var data "url"
+       json_get_var answer "answer"
+       json_select ".."
+       json_cleanup
+
+       # check if URL or SCRIPT is given
+       url=$(echo "$data" | grep "^http")
+       [ -z "$url" ] && script="/usr/lib/ddns/${data}"
+
+       eval "$1=\"$url\""
+       eval "$2=\"$script\""
+       eval "$3=\"$answer\""
+       return 0
+}
+
+# Calculate seconds from interval and unit
+# $1   Name of Variable to store result in
+# $2   Number and
+# $3   Unit of time interval
+get_seconds() {
+       [ $# -ne 3 ] && write_log 12 "Error calling 'get_seconds()' - wrong number of parameters"
+       case "$3" in
+               "days" )        eval "$1=$(( $2 * 86400 ))";;
+               "hours" )       eval "$1=$(( $2 * 3600 ))";;
+               "minutes" )     eval "$1=$(( $2 * 60 ))";;
+               * )             eval "$1=$2";;
+       esac
+       return 0
+}
+
+timeout() {
+       #.copied from http://www.ict.griffith.edu.au/anthony/software/timeout.sh
+       # only did the following changes
+       #       - commented out "#!/bin/bash" and usage section
+       #       - replace exit by return for usage as function
+       #       - some reformatting
+       #
+       # timeout [-SIG] time [--] command args...
+       #
+       # Run the given command until completion, but kill it if it runs too long.
+       # Specifically designed to exit immediately (no sleep interval) and clean up
+       # nicely without messages or leaving any extra processes when finished.
+       #
+       # Example use
+       #    timeout 5 countdown
+       #
+       # Based on notes in my "Shell Script Hints", section "Command Timeout"
+       #   http://www.ict.griffith.edu.au/~anthony/info/shell/script.hints
+       #
+       # This script uses a lot of tricks to terminate both the background command,
+       # the timeout script, and even the sleep process.  It also includes trap
+       # commands to prevent sub-shells reporting expected "Termination Errors".
+       #
+       # It took years of occasional trials, errors and testing to get a pure bash
+       # timeout command working as well as this does.
+       #
+       #.Anthony Thyssen     6 April 2011
+       #
+#      PROGNAME=$(type $0 | awk '{print $3}')  # search for executable on path
+#      PROGDIR=$(dirname $PROGNAME)            # extract directory of program
+#      PROGNAME=$(basename $PROGNAME)          # base name of program
+
+       # output the script comments as docs
+#      Usage() {
+#              echo >&2 "$PROGNAME:" "$@"
+#              sed >&2 -n '/^###/q; /^#/!q; s/^#//; s/^ //; 3s/^/Usage: /; 2,$ p' "$PROGDIR/$PROGNAME"
+#              exit 10;
+#      }
+
+       SIG=-TERM
+
+       while [ $# -gt 0 ]; do
+               case "$1" in
+                       --)
+                               # forced end of user options
+                               shift;
+                               break ;;
+#                      -\?|--help|--doc*)
+#                              Usage ;;
+                       [0-9]*)
+                               TIMEOUT="$1" ;;
+                       -*)
+                               SIG="$1" ;;
+                       *)
+                               # unforced  end of user options
+                               break ;;
+               esac
+               shift   # next option
+       done
+
+       # run main command in backgrounds and get its pid
+       "$@" &
+       command_pid=$!
+
+       # timeout sub-process abort countdown after ABORT seconds! also backgrounded
+       sleep_pid=0
+       (
+               # cleanup sleep process
+               trap 'kill -TERM $sleep_pid; return 1' 1 2 3 15
+               # sleep timeout period in background
+               sleep $TIMEOUT &
+               sleep_pid=$!
+               wait $sleep_pid
+               # Abort the command
+               kill $SIG $command_pid >/dev/null 2>&1
+               return 1
+       ) &
+       timeout_pid=$!
+
+       # Wait for main command to finished or be timed out
+       wait $command_pid
+       status=$?
+
+       # Clean up timeout sub-shell - if it is still running!
+       kill $timeout_pid 2>/dev/null
+       wait $timeout_pid 2>/dev/null
+
+       # Uncomment to check if a LONG sleep still running (no sleep should be)
+       # sleep 1
+       # echo "-----------"
+       # /bin/ps j  # uncomment to show if abort "sleep" is still sleeping
+
+       return $status
+}
+
+# sanitize a variable
+# $1   variable name
+# $2   allowed shell pattern
+# $3   disallowed shell pattern
+sanitize_variable() {
+       local __VAR=$1
+       eval __VALUE=\$$__VAR
+       local __ALLOWED=$2
+       local __REJECT=$3
+
+       # removing all allowed should give empty string
+       if [ -n "$__ALLOWED" ]; then
+               [ -z "${__VALUE//$__ALLOWED}" ] || write_log 12 "sanitize on $__VAR found characters outside allowed subset"
+       fi
+
+       # removing rejected pattern should give the same string as the input
+       if [ -n "$__REJECT" ]; then
+               [ "$__VALUE" = "${__VALUE//$__REJECT}" ] || write_log 12 "sanitize on $__VAR found rejected characters"
+       fi
+}
+
+# verify given host and port is connectable
+# $1   Host/IP to verify
+# $2   Port to verify
+verify_host_port() {
+       local __HOST=$1
+       local __PORT=$2
+       local __NC=$(command -v nc)
+       local __NCEXT=$($(command -v nc) --help 2>&1 | grep "\-w" 2>/dev/null)  # busybox nc compiled with extensions
+       local __IP __IPV4 __IPV6 __RUNPROG __PROG __ERR
+       # return codes
+       # 1     system specific error
+       # 2     nslookup/host error
+       # 3     nc (netcat) error
+       # 4     unmatched IP version
+
+       [ $# -ne 2 ] && write_log 12 "Error calling 'verify_host_port()' - wrong number of parameters"
+
+       # check if ip or FQDN was given
+       __IPV4=$(echo $__HOST | grep -m 1 -o "$IPV4_REGEX$")    # do not detect ip in 0.0.0.0.example.com
+       __IPV6=$(echo $__HOST | grep -m 1 -o "$IPV6_REGEX")
+       # if FQDN given get IP address
+       [ -z "$__IPV4" -a -z "$__IPV6" ] && {
+               if [ -n "$BIND_HOST" ]; then    # use BIND host if installed
+                       __PROG="BIND host"
+                       __RUNPROG="$BIND_HOST $__HOST >$DATFILE 2>$ERRFILE"
+               elif [ -n "$KNOT_HOST" ]; then  # use Knot host if installed
+                       __PROG="Knot host"
+                       __RUNPROG="$KNOT_HOST $__HOST >$DATFILE 2>$ERRFILE"
+               elif [ -n "$DRILL" ]; then      # use drill if installed
+                       __PROG="drill"
+                       __RUNPROG="$DRILL -V0 $__HOST A >$DATFILE 2>$ERRFILE"                   # IPv4
+                       __RUNPROG="$__RUNPROG; $DRILL -V0 $__HOST AAAA >>$DATFILE 2>>$ERRFILE"  # IPv6
+               elif [ -n "$HOSTIP" ]; then     # use hostip if installed
+                       __PROG="hostip"
+                       __RUNPROG="$HOSTIP $__HOST >$DATFILE 2>$ERRFILE"                        # IPv4
+                       __RUNPROG="$__RUNPROG; $HOSTIP -6 $__HOST >>$DATFILE 2>>$ERRFILE"       # IPv6
+               else    # use BusyBox nslookup
+                       __PROG="BusyBox nslookup"
+                       __RUNPROG="$NSLOOKUP $__HOST >$DATFILE 2>$ERRFILE"
+               fi
+               write_log 7 "#> $__RUNPROG"
+               eval $__RUNPROG
+               __ERR=$?
+               # command error
+               [ $__ERR -gt 0 ] && {
+                       write_log 3 "DNS Resolver Error - $__PROG Error '$__ERR'"
+                       write_log 7 "$(cat $ERRFILE)"
+                       return 2
+               }
+               # extract IP address
+               if [ -n "$BIND_HOST" -o -n "$KNOT_HOST" ]; then # use BIND host or Knot host if installed
+                       __IPV4="$(awk -F "address " '/has address/ {print $2; exit}' "$DATFILE")"
+                       __IPV6="$(awk -F "address " '/has IPv6/ {print $2; exit}' "$DATFILE")"
+               elif [ -n "$DRILL" ]; then      # use drill if installed
+                       __IPV4="$(awk '/^'"$__HOST"'/ {print $5}' "$DATFILE" | grep -m 1 -o "$IPV4_REGEX")"
+                       __IPV6="$(awk '/^'"$__HOST"'/ {print $5}' "$DATFILE" | grep -m 1 -o "$IPV6_REGEX")"
+               elif [ -n "$HOSTIP" ]; then     # use hostip if installed
+                       __IPV4="$(grep -m 1 -o "$IPV4_REGEX" "$DATFILE")"
+                       __IPV6="$(grep -m 1 -o "$IPV6_REGEX" "$DATFILE")"
+               else    # use BusyBox nslookup
+                       __IPV4="$(sed -ne "/^Name:/,\$ { s/^Address[0-9 ]\{0,\}: \($IPV4_REGEX\).*$/\\1/p }" "$DATFILE")"
+                       __IPV6="$(sed -ne "/^Name:/,\$ { s/^Address[0-9 ]\{0,\}: \($IPV6_REGEX\).*$/\\1/p }" "$DATFILE")"
+               fi
+       }
+
+       # check IP version if forced
+       if [ $force_ipversion -ne 0 ]; then
+               __ERR=0
+               [ $use_ipv6 -eq 0 -a -z "$__IPV4" ] && __ERR=4
+               [ $use_ipv6 -eq 1 -a -z "$__IPV6" ] && __ERR=6
+               [ $__ERR -gt 0 ] && {
+                       [ -n "$LUCI_HELPER" ] && return 4
+                       write_log 14 "Verify host Error '4' - Forced IP Version IPv$__ERR don't match"
+               }
+       fi
+
+       # verify nc command
+       # busybox nc compiled without -l option "NO OPT l!" -> critical error
+       $__NC --help 2>&1 | grep -i "NO OPT l!" >/dev/null 2>&1 && \
+               write_log 12 "Busybox nc (netcat) compiled without '-l' option, error 'NO OPT l!'"
+       # busybox nc compiled with extensions
+       $__NC --help 2>&1 | grep "\-w" >/dev/null 2>&1 && __NCEXT="TRUE"
+
+       # connectivity test
+       # run busybox nc to HOST PORT
+       # busybox might be compiled with "FEATURE_PREFER_IPV4_ADDRESS=n"
+       # then nc will try to connect via IPv6 if there is any IPv6 available on any host interface
+       # not worrying, if there is an IPv6 wan address
+       # so if not "force_ipversion" to use_ipv6 then connect test via ipv4, if available
+       [ $force_ipversion -ne 0 -a $use_ipv6 -ne 0 -o -z "$__IPV4" ] && __IP=$__IPV6 || __IP=$__IPV4
+
+       if [ -n "$__NCEXT" ]; then      # BusyBox nc compiled with extensions (timeout support)
+               __RUNPROG="$__NC -w 1 $__IP $__PORT </dev/null >$DATFILE 2>$ERRFILE"
+               write_log 7 "#> $__RUNPROG"
+               eval $__RUNPROG
+               __ERR=$?
+               [ $__ERR -eq 0 ] && return 0
+               write_log 3 "Connect error - BusyBox nc (netcat) Error '$__ERR'"
+               write_log 7 "$(cat $ERRFILE)"
+               return 3
+       else            # nc compiled without extensions (no timeout support)
+               __RUNPROG="timeout 2 -- $__NC $__IP $__PORT </dev/null >$DATFILE 2>$ERRFILE"
+               write_log 7 "#> $__RUNPROG"
+               eval $__RUNPROG
+               __ERR=$?
+               [ $__ERR -eq 0 ] && return 0
+               write_log 3 "Connect error - BusyBox nc (netcat) timeout Error '$__ERR'"
+               return 3
+       fi
+}
+
+# verify given DNS server if connectable
+# $1   DNS server to verify
+verify_dns() {
+       local __ERR=255 # last error buffer
+       local __CNT=0   # error counter
+
+       [ $# -ne 1 ] && write_log 12 "Error calling 'verify_dns()' - wrong number of parameters"
+       write_log 7 "Verify DNS server '$1'"
+
+       while [ $__ERR -ne 0 ]; do
+               # DNS uses port 53
+               verify_host_port "$1" "53"
+               __ERR=$?
+               if [ -n "$LUCI_HELPER" ]; then  # no retry if called by LuCI helper script
+                       return $__ERR
+               elif [ $__ERR -ne 0 -a $VERBOSE -gt 1 ]; then   # VERBOSE > 1 then NO retry
+                       write_log 4 "Verify DNS server '$1' failed - Verbose Mode: $VERBOSE - NO retry on error"
+                       return $__ERR
+               elif [ $__ERR -ne 0 ]; then
+                       __CNT=$(( $__CNT + 1 )) # increment error counter
+                       # if error count > retry_max_count leave here
+                       [ $retry_max_count -gt 0 -a $__CNT -gt $retry_max_count ] && \
+                               write_log 14 "Verify DNS server '$1' failed after $retry_max_count retries"
+
+                       write_log 4 "Verify DNS server '$1' failed - retry $__CNT/$retry_max_count in $RETRY_SECONDS seconds"
+                       sleep $RETRY_SECONDS &
+                       PID_SLEEP=$!
+                       wait $PID_SLEEP # enable trap-handler
+                       PID_SLEEP=0
+               fi
+       done
+       return 0
+}
+
+# analyze and verify given proxy string
+# $1   Proxy-String to verify
+verify_proxy() {
+       #       complete entry          user:password@host:port
+       #                               inside user and password NO '@' of ":" allowed
+       #       host and port only      host:port
+       #       host only               host            ERROR unsupported
+       #       IPv4 address instead of host    123.234.234.123
+       #       IPv6 address instead of host    [xxxx:....:xxxx]        in square bracket
+       local __TMP __HOST __PORT
+       local __ERR=255 # last error buffer
+       local __CNT=0   # error counter
+
+       [ $# -ne 1 ] && write_log 12 "Error calling 'verify_proxy()' - wrong number of parameters"
+       write_log 7 "Verify Proxy server 'http://$1'"
+
+       # try to split user:password "@" host:port
+       __TMP=$(echo $1 | awk -F "@" '{print $2}')
+       # no "@" found - only host:port is given
+       [ -z "$__TMP" ] && __TMP="$1"
+       # now lets check for IPv6 address
+       __HOST=$(echo $__TMP | grep -m 1 -o "$IPV6_REGEX")
+       # IPv6 host address found read port
+       if [ -n "$__HOST" ]; then
+               # IPv6 split at "]:"
+               __PORT=$(echo $__TMP | awk -F "]:" '{print $2}')
+       else
+               __HOST=$(echo $__TMP | awk -F ":" '{print $1}')
+               __PORT=$(echo $__TMP | awk -F ":" '{print $2}')
+       fi
+       # No Port detected - EXITING
+       [ -z "$__PORT" ] && {
+               [ -n "$LUCI_HELPER" ] && return 5
+               write_log 14 "Invalid Proxy server Error '5' - proxy port missing"
+       }
+
+       while [ $__ERR -gt 0 ]; do
+               verify_host_port "$__HOST" "$__PORT"
+               __ERR=$?
+               if [ -n "$LUCI_HELPER" ]; then  # no retry if called by LuCI helper script
+                       return $__ERR
+               elif [ $__ERR -gt 0 -a $VERBOSE -gt 1 ]; then   # VERBOSE > 1 then NO retry
+                       write_log 4 "Verify Proxy server '$1' failed - Verbose Mode: $VERBOSE - NO retry on error"
+                       return $__ERR
+               elif [ $__ERR -gt 0 ]; then
+                       __CNT=$(( $__CNT + 1 )) # increment error counter
+                       # if error count > retry_max_count leave here
+                       [ $retry_max_count -gt 0 -a $__CNT -gt $retry_max_count ] && \
+                               write_log 14 "Verify Proxy server '$1' failed after $retry_max_count retries"
+
+                       write_log 4 "Verify Proxy server '$1' failed - retry $__CNT/$retry_max_count in $RETRY_SECONDS seconds"
+                       sleep $RETRY_SECONDS &
+                       PID_SLEEP=$!
+                       wait $PID_SLEEP # enable trap-handler
+                       PID_SLEEP=0
+               fi
+       done
+       return 0
+}
+
+do_transfer() {
+       # $1    # URL to use
+       local __URL="$1"
+       local __ERR=0
+       local __CNT=0   # error counter
+       local __PROG  __RUNPROG
+
+       [ $# -ne 1 ] && write_log 12 "Error in 'do_transfer()' - wrong number of parameters"
+
+       # Use ip_network as default for bind_network if not separately specified
+       [ -z "$bind_network" ] && [ "$ip_source" = "network" ] && [ "$ip_network" ] && bind_network="$ip_network"
+
+       # lets prefer GNU Wget because it does all for us - IPv4/IPv6/HTTPS/PROXY/force IP version
+       if [ -n "$WGET_SSL" ] && [ $USE_CURL -eq 0 ]; then                      # except global option use_curl is set to "1"
+               __PROG="$WGET --hsts-file=/tmp/.wget-hsts -nv -t 1 -O $DATFILE -o $ERRFILE"     # non_verbose no_retry outfile errfile
+               # force network/ip to use for communication
+               if [ -n "$bind_network" ]; then
+                       local __BINDIP
+                       # set correct program to detect IP
+                       [ $use_ipv6 -eq 0 ] && __RUNPROG="network_get_ipaddr" || __RUNPROG="network_get_ipaddr6"
+                       eval "$__RUNPROG __BINDIP $bind_network" || \
+                               write_log 13 "Can not detect current IP using '$__RUNPROG $bind_network' - Error: '$?'"
+                       write_log 7 "Force communication via IP '$__BINDIP'"
+                       __PROG="$__PROG --bind-address=$__BINDIP"
+               fi
+               # force ip version to use
+               if [ $force_ipversion -eq 1 ]; then
+                       [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6"       # force IPv4/IPv6
+               fi
+               # set certificate parameters
+               if [ $use_https -eq 1 ]; then
+                       if [ "$cacert" = "IGNORE" ]; then       # idea from Ticket #15327 to ignore server cert
+                               __PROG="$__PROG --no-check-certificate"
+                       elif [ -f "$cacert" ]; then
+                               __PROG="$__PROG --ca-certificate=${cacert}"
+                       elif [ -d "$cacert" ]; then
+                               __PROG="$__PROG --ca-directory=${cacert}"
+                       elif [ -n "$cacert" ]; then             # it's not a file and not a directory but given
+                               write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
+                       fi
+               fi
+               # disable proxy if no set (there might be .wgetrc or .curlrc or wrong environment set)
+               [ -z "$proxy" ] && __PROG="$__PROG --no-proxy"
+
+               # user agent string if provided
+               if [ -n "$user_agent" ]; then
+                       # replace single and double quotes
+                       user_agent=$(echo $user_agent | sed "s/'/ /g" | sed 's/"/ /g')
+                       __PROG="$__PROG --user-agent='$user_agent'"
+               fi
+
+               __RUNPROG="$__PROG '$__URL'"    # build final command
+               __PROG="GNU Wget"               # reuse for error logging
+
+       # 2nd choice is cURL IPv4/IPv6/HTTPS
+       # libcurl might be compiled without Proxy or HTTPS Support
+       elif [ -n "$CURL" ]; then
+               __PROG="$CURL -RsS -o $DATFILE --stderr $ERRFILE"
+               # check HTTPS support
+               [ -z "$CURL_SSL" -a $use_https -eq 1 ] && \
+                       write_log 13 "cURL: libcurl compiled without https support"
+               # force network/interface-device to use for communication
+               if [ -n "$bind_network" ]; then
+                       local __DEVICE
+                       network_get_device __DEVICE $bind_network || \
+                               write_log 13 "Can not detect local device using 'network_get_device $bind_network' - Error: '$?'"
+                       write_log 7 "Force communication via device '$__DEVICE'"
+                       __PROG="$__PROG --interface $__DEVICE"
+               fi
+               # force ip version to use
+               if [ $force_ipversion -eq 1 ]; then
+                       [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6"       # force IPv4/IPv6
+               fi
+               # set certificate parameters
+               if [ $use_https -eq 1 ]; then
+                       if [ "$cacert" = "IGNORE" ]; then       # idea from Ticket #15327 to ignore server cert
+                               __PROG="$__PROG --insecure"     # but not empty better to use "IGNORE"
+                       elif [ -f "$cacert" ]; then
+                               __PROG="$__PROG --cacert $cacert"
+                       elif [ -d "$cacert" ]; then
+                               __PROG="$__PROG --capath $cacert"
+                       elif [ -n "$cacert" ]; then             # it's not a file and not a directory but given
+                               write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
+                       fi
+               fi
+               # disable proxy if no set (there might be .wgetrc or .curlrc or wrong environment set)
+               # or check if libcurl compiled with proxy support
+               if [ -z "$proxy" ]; then
+                       __PROG="$__PROG --noproxy '*'"
+               elif [ -z "$CURL_PROXY" ]; then
+                       # if libcurl has no proxy support and proxy should be used then force ERROR
+                       write_log 13 "cURL: libcurl compiled without Proxy support"
+               fi
+
+               __RUNPROG="$__PROG '$__URL'"    # build final command
+               __PROG="cURL"                   # reuse for error logging
+
+       # uclient-fetch possibly with ssl support if /lib/libustream-ssl.so installed
+       elif [ -n "$UCLIENT_FETCH" ]; then
+               # UCLIENT_FETCH_SSL not empty then SSL support available
+               UCLIENT_FETCH_SSL=$(find /lib /usr/lib -name libustream-ssl.so* 2>/dev/null)
+               __PROG="$UCLIENT_FETCH -q -O $DATFILE"
+               # force network/ip not supported
+               [ -n "$__BINDIP" ] && \
+                       write_log 14 "uclient-fetch: FORCE binding to specific address not supported"
+               # force ip version to use
+               if [ $force_ipversion -eq 1 ]; then
+                       [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4" || __PROG="$__PROG -6"       # force IPv4/IPv6
+               fi
+               # https possibly not supported
+               [ $use_https -eq 1 -a -z "$UCLIENT_FETCH_SSL" ] && \
+                       write_log 14 "uclient-fetch: no HTTPS support! Additional install one of ustream-ssl packages"
+               # proxy support
+               [ -z "$proxy" ] && __PROG="$__PROG -Y off" || __PROG="$__PROG -Y on"
+               # https & certificates
+               if [ $use_https -eq 1 ]; then
+                       if [ "$cacert" = "IGNORE" ]; then
+                               __PROG="$__PROG --no-check-certificate"
+                       elif [ -f "$cacert" ]; then
+                               __PROG="$__PROG --ca-certificate=$cacert"
+                       elif [ -n "$cacert" ]; then             # it's not a file; nothing else supported
+                               write_log 14 "No valid certificate file '$cacert' for HTTPS communication"
+                       fi
+               fi
+               __RUNPROG="$__PROG '$__URL' 2>$ERRFILE"         # build final command
+               __PROG="uclient-fetch"                          # reuse for error logging
+
+       # Busybox Wget or any other wget in search $PATH (did not support neither IPv6 nor HTTPS)
+       elif [ -n "$WGET" ]; then
+               __PROG="$WGET -q -O $DATFILE"
+               # force network/ip not supported
+               [ -n "$__BINDIP" ] && \
+                       write_log 14 "BusyBox Wget: FORCE binding to specific address not supported"
+               # force ip version not supported
+               [ $force_ipversion -eq 1 ] && \
+                       write_log 14 "BusyBox Wget: Force connecting to IPv4 or IPv6 addresses not supported"
+               # https not supported
+               [ $use_https -eq 1 ] && \
+                       write_log 14 "BusyBox Wget: no HTTPS support"
+               # disable proxy if no set (there might be .wgetrc or .curlrc or wrong environment set)
+               [ -z "$proxy" ] && __PROG="$__PROG -Y off"
+
+               __RUNPROG="$__PROG '$__URL' 2>$ERRFILE"         # build final command
+               __PROG="Busybox Wget"                           # reuse for error logging
+
+       else
+               write_log 13 "Neither 'Wget' nor 'cURL' nor 'uclient-fetch' installed or executable"
+       fi
+
+       while : ; do
+               write_log 7 "#> $__RUNPROG"
+               eval $__RUNPROG                 # DO transfer
+               __ERR=$?                        # save error code
+               [ $__ERR -eq 0 ] && return 0    # no error leave
+               [ -n "$LUCI_HELPER" ] && return 1       # no retry if called by LuCI helper script
+
+               write_log 3 "$__PROG Error: '$__ERR'"
+               write_log 7 "$(cat $ERRFILE)"           # report error
+
+               [ $VERBOSE -gt 1 ] && {
+                       # VERBOSE > 1 then NO retry
+                       write_log 4 "Transfer failed - Verbose Mode: $VERBOSE - NO retry on error"
+                       return 1
+               }
+
+               __CNT=$(( $__CNT + 1 )) # increment error counter
+               # if error count > retry_max_count leave here
+               [ $retry_max_count -gt 0 -a $__CNT -gt $retry_max_count ] && \
+                       write_log 14 "Transfer failed after $retry_max_count retries"
+
+               write_log 4 "Transfer failed - retry $__CNT/$retry_max_count in $RETRY_SECONDS seconds"
+               sleep $RETRY_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP # enable trap-handler
+               PID_SLEEP=0
+       done
+       # we should never come here there must be a programming error
+       write_log 12 "Error in 'do_transfer()' - program coding error"
+}
+
+send_update() {
+       # $1    # IP to set at DDNS service provider
+       local __IP
+
+       [ $# -ne 1 ] && write_log 12 "Error calling 'send_update()' - wrong number of parameters"
+
+       if [ $upd_privateip -eq 0 ]; then
+               # verify given IP / no private IPv4's / no IPv6 addr starting with fxxx of with ":"
+               [ $use_ipv6 -eq 0 ] && __IP=$(echo $1 | grep -v -E "(^0|^10\.|^100\.6[4-9]\.|^100\.[7-9][0-9]\.|^100\.1[0-1][0-9]\.|^100\.12[0-7]\.|^127|^169\.254|^172\.1[6-9]\.|^172\.2[0-9]\.|^172\.3[0-1]\.|^192\.168)")
+               [ $use_ipv6 -eq 1 ] && __IP=$(echo $1 | grep "^[0-9a-eA-E]")
+       else
+               __IP=$(echo $1 | grep -m 1 -o "$IPV4_REGEX")            # valid IPv4 or
+               [ -z "$__IP" ] && __IP=$(echo $1 | grep -m 1 -o "$IPV6_REGEX")  # IPv6
+       fi
+       [ -z "$__IP" ] && {
+               write_log 3 "No or private or invalid IP '$1' given! Please check your configuration"
+               return 127
+       }
+
+       if [ -n "$update_script" ]; then
+               write_log 7 "parsing script '$update_script'"
+               . $update_script
+       else
+               local __URL __ERR
+
+               # do replaces in URL
+               __URL=$(echo $update_url | sed -e "s#\[USERNAME\]#$URL_USER#g"  -e "s#\[PASSWORD\]#$URL_PASS#g" \
+                                              -e "s#\[PARAMENC\]#$URL_PENC#g"  -e "s#\[PARAMOPT\]#$param_opt#g" \
+                                              -e "s#\[DOMAIN\]#$domain#g"      -e "s#\[IP\]#$__IP#g")
+               [ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
+
+               do_transfer "$__URL" || return 1
+
+               write_log 7 "DDNS Provider answered:${N}$(cat $DATFILE)"
+
+               [ -z "$UPD_ANSWER" ] && return 0        # not set then ignore
+
+               grep -i -E "$UPD_ANSWER" $DATFILE >/dev/null 2>&1
+               return $?       # "0" if found
+       fi
+}
+
+get_current_ip () {
+       # $1    Name of Variable to store current IP
+       local __CNT=0   # error counter
+       local __RUNPROG __DATA __URL __ERR
+
+       [ $# -ne 1 ] && write_log 12 "Error calling 'get_current_ip()' - wrong number of parameters"
+       write_log 7 "Detect current IP on '$ip_source'"
+
+       while : ; do
+               if [ -n "$ip_network" -a "$ip_source" = "network" ]; then
+                       # set correct program
+                       network_flush_cache     # force re-read data from ubus
+                       [ $use_ipv6 -eq 0 ] && __RUNPROG="network_get_ipaddr" \
+                                           || __RUNPROG="network_get_ipaddr6"
+                       eval "$__RUNPROG __DATA $ip_network" || \
+                               write_log 13 "Can not detect current IP using $__RUNPROG '$ip_network' - Error: '$?'"
+                       [ -n "$__DATA" ] && write_log 7 "Current IP '$__DATA' detected on network '$ip_network'"
+               elif [ -n "$ip_interface" -a "$ip_source" = "interface" ]; then
+                       local __DATA4=""; local __DATA6=""
+                       if [ -n "$(command -v ip)" ]; then              # ip program installed
+                               write_log 7 "#> ip -o addr show dev $ip_interface scope global >$DATFILE 2>$ERRFILE"
+                               ip -o addr show dev $ip_interface scope global >$DATFILE 2>$ERRFILE
+                               __ERR=$?
+                               if [ $__ERR -eq 0 ]; then
+                                       # DATFILE (sample)
+                                       # 10: l2tp-inet: <POINTOPOINT,MULTICAST,NOARP,UP,LOWER_UP> mtu 1456 qdisc fq_codel state UNKNOWN qlen 3\    link/ppp
+                                       # 10: l2tp-inet    inet 95.30.176.51 peer 95.30.176.1/32 scope global l2tp-inet\       valid_lft forever preferred_lft forever
+                                       # 5: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP qlen 1000\    link/ether 08:00:27:d0:10:32 brd ff:ff:ff:ff:ff:ff
+                                       # 5: eth1    inet 172.27.10.128/24 brd 172.27.10.255 scope global eth1\       valid_lft forever preferred_lft forever
+                                       # 5: eth1    inet 172.55.55.155/24 brd 172.27.10.255 scope global eth1\       valid_lft 12345sec preferred_lft 12345sec
+                                       # 5: eth1    inet6 2002:b0c7:f326::806b:c629:b8b9:433/128 scope global dynamic \       valid_lft 8026sec preferred_lft 8026sec
+                                       # 5: eth1    inet6 fd43:5368:6f6d:6500:806b:c629:b8b9:433/128 scope global dynamic \       valid_lft 8026sec preferred_lft 8026sec
+                                       # 5: eth1    inet6 fd43:5368:6f6d:6500:a00:27ff:fed0:1032/64 scope global dynamic \       valid_lft 14352sec preferred_lft 14352sec
+                                       # 5: eth1    inet6 2002:b0c7:f326::a00:27ff:fed0:1032/64 scope global dynamic \       valid_lft 14352sec preferred_lft 14352sec
+
+                                       #    remove      remove     remove      replace     replace
+                                       #     link     inet6 fxxx    sec      forever=>-1   / => ' ' to separate subnet from ip
+                                       sed "/link/d; /inet6 f/d; s/sec//g; s/forever/-1/g; s/\// /g" $DATFILE | \
+                                               awk '{ print $3" "$4" "$NF }' > $ERRFILE        # temp reuse ERRFILE
+                                       # we only need    inet?   IP  prefered time
+
+                                       local __TIME4=0;  local __TIME6=0
+                                       local __TYP __ADR __TIME
+                                       while read __TYP __ADR __TIME; do
+                                               __TIME=${__TIME:-0}     # supress shell errors on last (empty) line of DATFILE
+                                               #    IPversion       no "-1" record stored - now "-1" record or new time > oldtime
+                                               [ "$__TYP" = "inet6" -a $__TIME6 -ge 0 -a \( $__TIME -lt 0 -o $__TIME -gt $__TIME6 \) ] && {
+                                                       __DATA6="$__ADR"
+                                                       __TIME6="$__TIME"
+                                               }
+                                               [ "$__TYP" = "inet" -a $__TIME4 -ge 0 -a \( $__TIME -lt 0 -o $__TIME -gt $__TIME4 \) ] && {
+                                                       __DATA4="$__ADR"
+                                                       __TIME4="$__TIME"
+                                               }
+                                       done < $ERRFILE
+                               else
+                                       write_log 3 "ip Error: '$__ERR'"
+                                       write_log 7 "$(cat $ERRFILE)"           # report error
+                               fi
+                       else                                    # use deprecated ifconfig
+                               write_log 7 "#> ifconfig $ip_interface >$DATFILE 2>$ERRFILE"
+                               ifconfig $ip_interface >$DATFILE 2>$ERRFILE
+                               __ERR=$?
+                               if [ $__ERR -eq 0 ]; then
+                                       __DATA4=$(awk '
+                                               /inet addr:/ {  # Filter IPv4
+                                               #   inet addr:192.168.1.1  Bcast:192.168.1.255  Mask:255.255.255.0
+                                               $1="";          # remove inet
+                                               $3="";          # remove Bcast: ...
+                                               $4="";          # remove Mask: ...
+                                               FS=":";         # separator ":"
+                                               $0=$0;          # reread to activate separator
+                                               $1="";          # remove addr
+                                               FS=" ";         # set back separator to default " "
+                                               $0=$0;          # reread to activate separator (remove whitespaces)
+                                               print $1;       # print IPv4 addr
+                                               }' $DATFILE
+                                       )
+                                       __DATA6=$(awk '
+                                               /inet6/ && /: [0-9a-eA-E]/ {    # Filter IPv6 exclude fxxx
+                                               #   inet6 addr: 2001:db8::xxxx:xxxx/32 Scope:Global
+                                               FS="/";         # separator "/"
+                                               $0=$0;          # reread to activate separator
+                                               $2="";          # remove everything behind "/"
+                                               FS=" ";         # set back separator to default " "
+                                               $0=$0;          # reread to activate separator
+                                               print $3;       # print IPv6 addr
+                                               }' $DATFILE
+                                       )
+                               else
+                                       write_log 3 "ifconfig Error: '$__ERR'"
+                                       write_log 7 "$(cat $ERRFILE)"           # report error
+                               fi
+                       fi
+                       [ $use_ipv6 -eq 0 ] && __DATA="$__DATA4" || __DATA="$__DATA6"
+                       [ -n "$__DATA" ] && write_log 7 "Current IP '$__DATA' detected on interface '$ip_interface'"
+               elif [ -n "$ip_script" -a "$ip_source" = "script" ]; then
+                       write_log 7 "#> $ip_script >$DATFILE 2>$ERRFILE"
+                       eval $ip_script >$DATFILE 2>$ERRFILE
+                       __ERR=$?
+                       if [ $__ERR -eq 0 ]; then
+                               __DATA=$(cat $DATFILE)
+                               [ -n "$__DATA" ] && write_log 7 "Current IP '$__DATA' detected via script '$ip_script'"
+                       else
+                               write_log 3 "$ip_script Error: '$__ERR'"
+                               write_log 7 "$(cat $ERRFILE)"           # report error
+                       fi
+               elif [ -n "$ip_url" -a "$ip_source" = "web" ]; then
+                       do_transfer "$ip_url"
+                       # use correct regular expression
+                       [ $use_ipv6 -eq 0 ] \
+                               && __DATA=$(grep -m 1 -o "$IPV4_REGEX" $DATFILE) \
+                               || __DATA=$(grep -m 1 -o "$IPV6_REGEX" $DATFILE)
+                       [ -n "$__DATA" ] && write_log 7 "Current IP '$__DATA' detected on web at '$ip_url'"
+               else
+                       write_log 12 "Error in 'get_current_ip()' - unhandled ip_source '$ip_source'"
+               fi
+               # valid data found return here
+               [ -n "$__DATA" ] && {
+                       eval "$1=\"$__DATA\""
+                       return 0
+               }
+
+               [ -n "$LUCI_HELPER" ] && return 1       # no retry if called by LuCI helper script
+
+               write_log 7 "Data detected:"
+               write_log 7 "$(cat $DATFILE)"
+
+               [ $VERBOSE -gt 1 ] && {
+                       # VERBOSE > 1 then NO retry
+                       write_log 4 "Get current IP via '$ip_source' failed - Verbose Mode: $VERBOSE - NO retry on error"
+                       return 1
+               }
+
+               __CNT=$(( $__CNT + 1 )) # increment error counter
+               # if error count > retry_max_count leave here
+               [ $retry_max_count -gt 0 -a $__CNT -gt $retry_max_count ] && \
+                       write_log 14 "Get current IP via '$ip_source' failed after $retry_max_count retries"
+               write_log 4 "Get current IP via '$ip_source' failed - retry $__CNT/$retry_max_count in $RETRY_SECONDS seconds"
+               sleep $RETRY_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP # enable trap-handler
+               PID_SLEEP=0
+       done
+       # we should never come here there must be a programming error
+       write_log 12 "Error in 'get_current_ip()' - program coding error"
+}
+
+get_registered_ip() {
+       # $1    Name of Variable to store public IP (REGISTERED_IP)
+       # $2    (optional) if set, do not retry on error
+       local __CNT=0   # error counter
+       local __ERR=255
+       local __REGEX  __PROG  __RUNPROG  __DATA  __IP
+       # return codes
+       # 1     no IP detected
+
+       [ $# -lt 1 -o $# -gt 2 ] && write_log 12 "Error calling 'get_registered_ip()' - wrong number of parameters"
+       [ $is_glue -eq 1 -a -z "$BIND_HOST" ] && write_log 14 "Lookup of glue records is only supported using BIND host"
+       write_log 7 "Detect registered/public IP"
+
+       # set correct regular expression
+       [ $use_ipv6 -eq 0 ] && __REGEX="$IPV4_REGEX" || __REGEX="$IPV6_REGEX"
+
+       if [ -n "$BIND_HOST" ]; then
+               __PROG="$BIND_HOST"
+               [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -t A"  || __PROG="$__PROG -t AAAA"
+               if [ $force_ipversion -eq 1 ]; then                     # force IP version
+                       [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4"  || __PROG="$__PROG -6"
+               fi
+               [ $force_dnstcp -eq 1 ] && __PROG="$__PROG -T"  # force TCP
+               [ $is_glue -eq 1 ] && __PROG="$__PROG -v" # use verbose output to get additional section
+
+               __RUNPROG="$__PROG $lookup_host $dns_server >$DATFILE 2>$ERRFILE"
+               __PROG="BIND host"
+       elif [ -n "$KNOT_HOST" ]; then
+               __PROG="$KNOT_HOST"
+               [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -t A"  || __PROG="$__PROG -t AAAA"
+               if [ $force_ipversion -eq 1 ]; then                     # force IP version
+                       [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4"  || __PROG="$__PROG -6"
+               fi
+               [ $force_dnstcp -eq 1 ] && __PROG="$__PROG -T"  # force TCP
+
+               __RUNPROG="$__PROG $lookup_host $dns_server >$DATFILE 2>$ERRFILE"
+               __PROG="Knot host"
+       elif [ -n "$DRILL" ]; then
+               __PROG="$DRILL -V0"                     # drill options name @server type
+               if [ $force_ipversion -eq 1 ]; then                     # force IP version
+                       [ $use_ipv6 -eq 0 ] && __PROG="$__PROG -4"  || __PROG="$__PROG -6"
+               fi
+               [ $force_dnstcp -eq 1 ] && __PROG="$__PROG -t" || __PROG="$__PROG -u"   # force TCP
+               __PROG="$__PROG $lookup_host"
+               [ -n "$dns_server" ] && __PROG="$__PROG @$dns_server"
+               [ $use_ipv6 -eq 0 ] && __PROG="$__PROG A"  || __PROG="$__PROG AAAA"
+
+               __RUNPROG="$__PROG >$DATFILE 2>$ERRFILE"
+               __PROG="drill"
+       elif [ -n "$HOSTIP" ]; then     # hostip package installed
+               __PROG="$HOSTIP"
+               [ $force_dnstcp -ne 0 ] && \
+                       write_log 14 "hostip - no support for 'DNS over TCP'"
+
+               # is IP given as dns_server ?
+               __IP=$(echo $dns_server | grep -m 1 -o "$IPV4_REGEX")
+               [ -z "$__IP" ] && __IP=$(echo $dns_server | grep -m 1 -o "$IPV6_REGEX")
+
+               # we got NO ip for dns_server, so build command
+               [ -z "$__IP" -a -n "$dns_server" ] && {
+                       __IP="\`$HOSTIP"
+                       [ $use_ipv6 -eq 1 -a $force_ipversion -eq 1 ] && __IP="$__IP -6"
+                       __IP="$__IP $dns_server | grep -m 1 -o"
+                       [ $use_ipv6 -eq 1 -a $force_ipversion -eq 1 ] \
+                               && __IP="$__IP '$IPV6_REGEX'" \
+                               || __IP="$__IP '$IPV4_REGEX'"
+                       __IP="$__IP \`"
+               }
+
+               [ $use_ipv6 -eq 1 ] && __PROG="$__PROG -6"
+               [ -n "$dns_server" ] && __PROG="$__PROG -r $__IP"
+               __RUNPROG="$__PROG $lookup_host >$DATFILE 2>$ERRFILE"
+               __PROG="hostip"
+       elif [ -n "$NSLOOKUP" ]; then   # last use BusyBox nslookup
+               NSLOOKUP_MUSL=$($(command -v nslookup) localhost 2>&1 | grep -F "(null)")       # not empty busybox compiled with musl
+               [ $force_dnstcp -ne 0 ] && \
+                       write_log 14 "Busybox nslookup - no support for 'DNS over TCP'"
+               [ -n "$NSLOOKUP_MUSL" -a -n "$dns_server" ] && \
+                       write_log 14 "Busybox compiled with musl - nslookup don't support the use of DNS Server"
+               [ $force_ipversion -ne 0 ] && \
+                       write_log 5 "Busybox nslookup - no support to 'force IP Version' (ignored)"
+
+               __RUNPROG="$NSLOOKUP $lookup_host $dns_server >$DATFILE 2>$ERRFILE"
+               __PROG="BusyBox nslookup"
+       else    # there must be an error
+               write_log 12 "Error in 'get_registered_ip()' - no supported Name Server lookup software accessible"
+       fi
+
+       while : ; do
+               write_log 7 "#> $__RUNPROG"
+               eval $__RUNPROG
+               __ERR=$?
+               if [ $__ERR -ne 0 ]; then
+                       write_log 3 "$__PROG error: '$__ERR'"
+                       write_log 7 "$(cat $ERRFILE)"
+               else
+                       if [ -n "$BIND_HOST" -o -n "$KNOT_HOST" ]; then
+                               if [ $is_glue -eq 1 ]; then
+                                       __DATA=$(cat $DATFILE | grep "^$lookup_host" | grep -om1 "$__REGEX" )
+                               else
+                                       __DATA=$(cat $DATFILE | awk -F "address " '/has/ {print $2; exit}' )
+                               fi
+                       elif [ -n "$DRILL" ]; then
+                               __DATA=$(cat $DATFILE | awk '/^'"$lookup_host"'/ {print $5; exit}' )
+                       elif [ -n "$HOSTIP" ]; then
+                               __DATA=$(cat $DATFILE | grep -om1 "$__REGEX")
+                       elif [ -n "$NSLOOKUP" ]; then
+                               __DATA=$(cat $DATFILE | sed -ne "/^Name:/,\$ { s/^Address[0-9 ]\{0,\}: \($__REGEX\).*$/\\1/p }" )
+                       fi
+                       [ -n "$__DATA" ] && {
+                               write_log 7 "Registered IP '$__DATA' detected"
+                               [ -z "$IPFILE" ] || echo "$__DATA" > $IPFILE
+                               eval "$1=\"$__DATA\""   # valid data found
+                               return 0                # leave here
+                       }
+                       write_log 4 "NO valid IP found"
+                       __ERR=127
+               fi
+               [ -z "$IPFILE" ] || echo "" > $IPFILE
+
+               [ -n "$LUCI_HELPER" ] && return $__ERR  # no retry if called by LuCI helper script
+               [ -n "$2" ] && return $__ERR            # $2 is given -> no retry
+               [ $VERBOSE -gt 1 ] && {
+                       # VERBOSE > 1 then NO retry
+                       write_log 4 "Get registered/public IP for '$lookup_host' failed - Verbose Mode: $VERBOSE - NO retry on error"
+                       return $__ERR
+               }
+
+               __CNT=$(( $__CNT + 1 )) # increment error counter
+               # if error count > retry_max_count leave here
+               [ $retry_max_count -gt 0 -a $__CNT -gt $retry_max_count ] && \
+                       write_log 14 "Get registered/public IP for '$lookup_host' failed after $retry_max_count retries"
+
+               write_log 4 "Get registered/public IP for '$lookup_host' failed - retry $__CNT/$retry_max_count in $RETRY_SECONDS seconds"
+               sleep $RETRY_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP # enable trap-handler
+               PID_SLEEP=0
+       done
+       # we should never come here there must be a programming error
+       write_log 12 "Error in 'get_registered_ip()' - program coding error"
+}
+
+get_uptime() {
+       # $1    Variable to store result in
+       [ $# -ne 1 ] && write_log 12 "Error calling 'verify_host_port()' - wrong number of parameters"
+       local __UPTIME=$(cat /proc/uptime)
+       eval "$1=\"${__UPTIME%%.*}\""
+}
+
+trap_handler() {
+       # $1    trap signal
+       # $2    optional (exit status)
+       local __PIDS __PID
+       local __ERR=${2:-0}
+       local __OLD_IFS=$IFS
+       local __NEWLINE_IFS='
+' # __NEWLINE_IFS
+
+       [ $PID_SLEEP -ne 0 ] && kill -$1 $PID_SLEEP 2>/dev/null # kill pending sleep if exist
+
+       case $1 in
+                0)     if [ $__ERR -eq 0 ]; then
+                               write_log 5 "PID '$$' exit normal at $(eval $DATE_PROG)${N}"
+                       else
+                               write_log 4 "PID '$$' exit WITH ERROR '$__ERR' at $(eval $DATE_PROG)${N}"
+                       fi ;;
+                1)     write_log 6 "PID '$$' received 'SIGHUP' at $(eval $DATE_PROG)"
+                       # reload config via starting the script again
+                       /usr/lib/ddns/dynamic_dns_updater.sh -v "0" -S "$__SECTIONID" -- start || true
+                       exit 0 ;;       # and leave this one
+                2)     write_log 5 "PID '$$' terminated by 'SIGINT' at $(eval $DATE_PROG)${N}";;
+                3)     write_log 5 "PID '$$' terminated by 'SIGQUIT' at $(eval $DATE_PROG)${N}";;
+               15)     write_log 5 "PID '$$' terminated by 'SIGTERM' at $(eval $DATE_PROG)${N}";;
+                *)     write_log 13 "Unhandled signal '$1' in 'trap_handler()'";;
+       esac
+
+       __PIDS=$(pgrep -P $$)   # get my childs (pgrep prints with "newline")
+       IFS=$__NEWLINE_IFS
+       for __PID in $__PIDS; do
+               kill -$1 $__PID # terminate it
+       done
+       IFS=$__OLD_IFS
+
+       # remove out and err file
+       [ -f $DATFILE ] && rm -f $DATFILE
+       [ -f $ERRFILE ] && rm -f $ERRFILE
+
+       # exit with correct handling:
+       # remove trap handling settings and send kill to myself
+       trap - 0 1 2 3 15
+       [ $1 -gt 0 ] && kill -$1 $$
+}
+
+split_FQDN() {
+       # $1    FQDN to split
+       # $2    name of variable to store TLD
+       # $3    name of variable to store (reg)Domain
+       # $4    name of variable to store Host/Subdomain
+
+       [ $# -ne 4 ] && write_log 12 "Error calling 'split_FQDN()' - wrong number of parameters"
+       [ -z "$1"  ] && write_log 12 "Error calling 'split_FQDN()' - missing FQDN to split"
+       [ -f $TLDFILE ] || write_log 12 "Error calling 'split_FQDN()' - missing file '$TLDFILE'"
+
+       local _HOST _FDOM _CTLD _FTLD
+       local _SET="$@"                                 # save given function parameters
+
+       local _PAR=$(echo "$1" | tr [A-Z] [a-z] | tr "." " ")   # to lower and replace DOT with SPACE
+       set -- $_PAR                                    # set new as function parameters
+       _PAR=""                                         # clear variable for later reuse
+       while [ -n "$1" ] ; do                          # as long we have parameters
+               _PAR="$1 $_PAR"                         # invert order of parameters
+               shift
+       done
+       set -- $_PAR                                    # use new as function parameters
+       _PAR=""                                         # clear variable
+
+       while [ -n "$1" ] ; do                          # as long we have parameters
+               if [ -z "$_CTLD" ]; then                # first loop
+                       _CTLD="$1"                      # CURRENT TLD to look at
+                       shift
+               else
+                       _CTLD="$1.$_CTLD"               # Next TLD to look at
+                       shift
+               fi
+               # check if TLD exact match in tld_names.dat, save TLD
+               zcat $TLDFILE | grep -E "^$_CTLD$" >/dev/null 2>&1 && {
+                       _FTLD="$_CTLD"          # save found
+                       _FDOM="$1"              # save domain next step might be invalid
+                       continue
+               }
+               # check if match any "*" in tld_names.dat,
+               zcat $TLDFILE | grep -E "^\*.$_CTLD$" >/dev/null 2>&1 && {
+                       [ -z "$1" ] && break    # no more data break
+                       # check if next level TLD match excludes "!" in tld_names.dat
+                       if zcat $TLDFILE | grep -E "^!$1.$_CTLD$" >/dev/null 2>&1 ; then
+                               _FTLD="$_CTLD"  # Yes
+                       else
+                               _FTLD="$1.$_CTLD"
+                               shift
+                       fi
+                       _FDOM="$1"; shift
+               }
+               [ -n "$_FTLD" ] && break        # we have something valid, break
+       done
+
+       # the leftover parameters are the HOST/SUBDOMAIN
+       while [ -n "$1" ]; do
+               _HOST="$1 $_HOST"               # remember we need to invert
+               shift
+       done
+       _HOST=$(echo $_HOST | tr " " ".")       # insert DOT
+
+       set -- $_SET                            # set back parameters from function call
+       [ -n "$_FTLD" ] && {
+               eval "$2=$_FTLD"                # set TLD
+               eval "$3=$_FDOM"                # set registrable domain
+               eval "$4=$_HOST"                # set HOST/SUBDOMAIN
+               return 0
+       }
+       eval "$2=''"            # clear TLD
+       eval "$3=''"            # clear registrable domain
+       eval "$4=''"            # clear HOST/SUBDOMAIN
+       return 1
+}
+
+expand_ipv6() {
+       # Original written for bash by
+       #.Author:  Florian Streibelt <florian@f-streibelt.de>
+       # Date:    08.04.2012
+       # License: Public Domain, but please be fair and
+       #          attribute the original author(s) and provide
+       #          a link to the original source for corrections:
+       #.         https://github.com/mutax/IPv6-Address-checks
+
+       # $1    IPv6 to expand
+       # $2    name of variable to store expanded IPv6
+       [ $# -ne 2 ] && write_log 12 "Error calling 'expand_ipv6()' - wrong number of parameters"
+
+       INPUT="$(echo "$1" | tr 'A-F' 'a-f')"
+       [ "$INPUT" = "::" ] && INPUT="::0"      # special case ::
+
+       O=""
+
+       while [ "$O" != "$INPUT" ]; do
+               O="$INPUT"
+
+               # fill all words with zeroes
+               INPUT=$( echo "$INPUT" | sed    -e 's|:\([0-9a-f]\{3\}\):|:0\1:|g' \
+                                               -e 's|:\([0-9a-f]\{3\}\)$|:0\1|g' \
+                                               -e 's|^\([0-9a-f]\{3\}\):|0\1:|g' \
+                                               -e 's|:\([0-9a-f]\{2\}\):|:00\1:|g' \
+                                               -e 's|:\([0-9a-f]\{2\}\)$|:00\1|g' \
+                                               -e 's|^\([0-9a-f]\{2\}\):|00\1:|g' \
+                                               -e 's|:\([0-9a-f]\):|:000\1:|g' \
+                                               -e 's|:\([0-9a-f]\)$|:000\1|g' \
+                                               -e 's|^\([0-9a-f]\):|000\1:|g' )
+
+       done
+
+       # now expand the ::
+       ZEROES=""
+
+       echo "$INPUT" | grep -qs "::"
+       if [ "$?" -eq 0 ]; then
+               GRPS="$( echo "$INPUT" | sed  's|[0-9a-f]||g' | wc -m )"
+               GRPS=$(( GRPS-1 ))              # remove carriage return
+               MISSING=$(( 8-GRPS ))
+               while [ $MISSING -gt 0 ]; do
+                       ZEROES="$ZEROES:0000"
+                       MISSING=$(( MISSING-1 ))
+               done
+
+               # be careful where to place the :
+               INPUT=$( echo "$INPUT" | sed    -e 's|\(.\)::\(.\)|\1'$ZEROES':\2|g' \
+                                               -e 's|\(.\)::$|\1'$ZEROES':0000|g' \
+                                               -e 's|^::\(.\)|'$ZEROES':0000:\1|g;s|^:||g' )
+       fi
+
+       # an expanded address has 39 chars + CR
+       if [ $(echo $INPUT | wc -m) != 40 ]; then
+               write_log 4 "Error in 'expand_ipv6()' - invalid IPv6 found: '$1' expanded: '$INPUT'"
+               eval "$2='invalid'"
+               return 1
+       fi
+
+       # echo the fully expanded version of the address
+       eval "$2=$INPUT"
+       return 0
+}
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_lucihelper.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_lucihelper.sh
new file mode 100644 (file)
index 0000000..f763348
--- /dev/null
@@ -0,0 +1,172 @@
+#!/bin/sh
+# /usr/lib/ddns/dynamic_dns_lucihelper.sh
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#.2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+# This script is used by luci-app-ddns
+#
+# variables in small chars are read from /etc/config/ddns as parameter given here
+# variables in big chars are defined inside these scripts as gloval vars
+# variables in big chars beginning with "__" are local defined inside functions only
+# set -vx      #script debugger
+
+. /usr/lib/ddns/dynamic_dns_functions.sh       # global vars are also defined here
+
+usage() {
+       cat << EOF
+
+Usage:
+ $MYPROG [options] -- command
+
+Commands:
+ get_local_ip        using given INTERFACE or NETWORK or SCRIPT or URL
+ get_registered_ip   for given FQDN
+ verify_dns          given DNS-SERVER
+ verify_proxy        given PROXY
+ start               start given SECTION
+ reload              force running ddns processes to reload changed configuration
+ restart             restart all ddns processes
+
+Parameters:
+ -6                  => use_ipv6=1          (default 0)
+ -d DNS-SERVER       => dns_server=SERVER[:PORT]
+ -f                  => force_ipversion=1   (default 0)
+ -g                  => is_glue=1           (default 0)
+ -i INTERFACE        => ip_interface=INTERFACE; ip_source="interface"
+ -l FQDN             => lookup_host=FQDN
+ -n NETWORK          => ip_network=NETWORK; ip_source="network"
+ -p PROXY            => proxy=[USER:PASS@]PROXY:PORT
+ -s SCRIPT           => ip_script=SCRIPT; ip_source="script"
+ -t                  => force_dnstcp=1      (default 0)
+ -u URL              => ip_url=URL; ip_source="web"
+ -S SECTION          SECTION to start
+
+ -h                  => show this help and exit
+ -L                  => use_logfile=1    (default 0)
+ -v LEVEL            => VERBOSE=LEVEL    (default 0)
+ -V                  => show version and exit
+
+EOF
+}
+
+usage_err() {
+       printf %s\\n "$MYPROG: $@" >&2
+       usage >&2
+       exit 255
+}
+
+# preset some variables, wrong or not set in ddns-functions.sh
+SECTION_ID="lucihelper"
+LOGFILE="$ddns_logdir/$SECTION_ID.log"
+DATFILE="$ddns_rundir/$SECTION_ID.$$.dat"      # save stdout data of WGet and other extern programs called
+ERRFILE="$ddns_rundir/$SECTION_ID.$$.err"      # save stderr output of WGet and other extern programs called
+DDNSPRG="/usr/lib/ddns/dynamic_dns_updater.sh"
+VERBOSE=0              # no console logging
+# global variables normally set by reading DDNS UCI configuration
+use_syslog=0           # no syslog
+use_logfile=0          # no logfile
+
+use_ipv6=0             # Use IPv6 - default IPv4
+force_ipversion=0      # Force IP Version - default 0 - No
+force_dnstcp=0         # Force TCP on DNS - default 0 - No
+is_glue=0              # Is glue record - default 0 - No
+use_https=0            # not needed but must be set
+
+while getopts ":6d:fghi:l:n:p:s:S:tu:Lv:V" OPT; do
+       case "$OPT" in
+               6)      use_ipv6=1;;
+               d)      dns_server="$OPTARG";;
+               f)      force_ipversion=1;;
+               g)      is_glue=1;;
+               i)      ip_interface="$OPTARG"; ip_source="interface";;
+               l)      lookup_host="$OPTARG";;
+               n)      ip_network="$OPTARG"; ip_source="network";;
+               p)      proxy="$OPTARG";;
+               s)      ip_script="$OPTARG"; ip_source="script";;
+               t)      force_dnstcp=1;;
+               u)      ip_url="$OPTARG"; ip_source="web";;
+               h)      usage; exit 255;;
+               L)      use_logfile=1;;
+               v)      VERBOSE=$OPTARG;;
+               S)      SECTION=$OPTARG;;
+               V)      printf %s\\n "ddns-scripts $VERSION"; exit 255;;
+               :)      usage_err "option -$OPTARG missing argument";;
+               \?)     usage_err "invalid option -$OPTARG";;
+               *)      usage_err "unhandled option -$OPT $OPTARG";;
+       esac
+done
+shift $((OPTIND - 1 )) # OPTIND is 1 based
+
+[ $# -eq 0 ] && usage_err "missing command"
+
+__RET=0
+case "$1" in
+       get_registered_ip)
+               [ -z "$lookup_host" ] && usage_err "command 'get_registered_ip': 'lookup_host' not set" 
+               write_log 7 "-----> get_registered_ip IP"
+               [ -z "$SECTION" ] || IPFILE="$ddns_rundir/$SECTION.ip"
+               IP=""
+               get_registered_ip IP
+               __RET=$?
+               [ $__RET -ne 0 ] && IP=""
+               printf "%s" "$IP"
+               ;;
+       verify_dns)
+               [ -z "$dns_server" ] && usage_err "command 'verify_dns': 'dns_server' not set" 
+               write_log 7 "-----> verify_dns '$dns_server'"
+               verify_dns "$dns_server"
+               __RET=$?
+               ;;
+       verify_proxy)
+               [ -z "$proxy" ] && usage_err "command 'verify_proxy': 'proxy' not set" 
+               write_log 7 "-----> verify_proxy '$proxy'"
+               verify_proxy "$proxy"
+               __RET=$?
+               ;;
+       get_local_ip)
+               [ -z "$ip_source" ] && usage_err "command 'get_local_ip': 'ip_source' not set" 
+               [ -n "$proxy" -a "$ip_source" = "web" ] && {
+                       # proxy defined, used for ip_source=web
+                       export HTTP_PROXY="http://$proxy"
+                       export HTTPS_PROXY="http://$proxy"
+                       export http_proxy="http://$proxy"
+                       export https_proxy="http://$proxy"
+               }
+               # don't need IP only the return code
+               IP=""
+               if [ "$ip_source" = "web" -o  "$ip_source" = "script" ]; then
+                       # we wait only 3 seconds for an
+                       # answer from "web" or "script"
+                       write_log 7 "-----> timeout 3 -- get_current_ip IP"
+                       timeout 3 -- get_current_ip IP
+               else
+                       write_log 7 "-----> get_current_ip IP"
+                       get_current_ip IP
+               fi
+               __RET=$?
+               ;;
+       start)
+               [ -z "$SECTION" ] &&  usage_err "command 'start': 'SECTION' not set"
+               if [ $VERBOSE -eq 0 ]; then     # start in background
+                       $DDNSPRG -v 0 -S $SECTION -- start &
+               else
+                       $DDNSPRG -v $VERBOSE -S $SECTION -- start
+               fi
+               ;;
+       reload)
+               $DDNSPRG -- reload
+               ;;
+       restart)
+               $DDNSPRG -- stop
+               sleep 1
+               $DDNSPRG -- start
+               ;;
+       *)
+               __RET=255
+               ;;
+esac
+
+# remove out and err file
+[ -f $DATFILE ] && rm -f $DATFILE
+[ -f $ERRFILE ] && rm -f $ERRFILE
+return $__RET
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/dynamic_dns_updater.sh
new file mode 100644 (file)
index 0000000..71de1a7
--- /dev/null
@@ -0,0 +1,435 @@
+#!/bin/sh
+# /usr/lib/ddns/dynamic_dns_updater.sh
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+# Original written by Eric Paul Bishop, January 2008
+# (Loosely) based on the script on the one posted by exobyte in the forums here:
+# http://forum.openwrt.org/viewtopic.php?id=14040
+# extended and partial rewritten
+#.2014-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# variables in small chars are read from /etc/config/ddns
+# variables in big chars are defined inside these scripts as global vars
+# variables in big chars beginning with "__" are local defined inside functions only
+# set -vx      #script debugger
+
+. $(dirname $0)/dynamic_dns_functions.sh       # global vars are also defined here
+
+usage() {
+       cat << EOF
+
+Usage:
+ $MYPROG [options] -- command
+
+Commands:
+start                Start SECTION or NETWORK or all
+stop                 Stop NETWORK or all
+
+Parameters:
+ -n NETWORK          Start/Stop sections in background monitoring NETWORK, force VERBOSE=0
+ -S SECTION          SECTION to start
+                     use either -N NETWORK or -S SECTION
+
+ -h                  show this help and exit
+ -V                  show version and exit
+ -v LEVEL            VERBOSE=LEVEL (default 1)
+                        '0' NO output to console
+                        '1' output to console
+                        '2' output to console AND logfile
+                            + run once WITHOUT retry on error
+ -d                  dry run (don't send any changes)
+
+EOF
+}
+
+usage_err() {
+       printf %s\\n "$MYPROG: $@" >&2
+       usage >&2
+       exit 1
+}
+
+while getopts ":hv:dn:S:V" OPT; do
+       case "$OPT" in
+               h)      usage; exit 0;;
+               v)      VERBOSE=$OPTARG;;
+               d)      DRY_RUN=1;;
+               n)      NETWORK=$OPTARG;;
+               S)      SECTION_ID=$OPTARG;;
+               V)      printf %s\\n "ddns-scripts $VERSION"; exit 0;;
+               :)      usage_err "option -$OPTARG missing argument";;
+               \?)     usage_err "invalid option -$OPTARG";;
+               *)      usage_err "unhandled option -$OPT $OPTARG";;
+       esac
+done
+shift $((OPTIND - 1 )) # OPTIND is 1 based
+
+[ -n "$NETWORK" -a -n "$SECTION_ID" ] && usage_err "use either option '-N' or '-S' not both"
+[ $# -eq 0 ] && usage_err "missing command"
+[ $# -gt 1 ] && usage_err "to much commands"
+
+case "$1" in
+       start)
+               if [ -n "$NETWORK" ]; then
+                       start_daemon_for_all_ddns_sections "$NETWORK"
+                       exit 0
+               fi
+               if [ -z "$SECTION_ID" ]; then
+                       start_daemon_for_all_ddns_sections
+                       exit 0
+               fi
+               ;;
+       stop)
+               if [ -n "$INTERFACE" ]; then
+                       stop_daemon_for_all_ddns_sections "$NETWORK"
+                       exit 0
+               else
+                       stop_daemon_for_all_ddns_sections
+                       exit 0
+               fi
+               exit 1
+               ;;
+       reload)
+               killall -1 dynamic_dns_updater.sh 2>/dev/null
+               exit $?
+               ;;
+       *)      usage_err "unknown command - $1";;
+esac
+
+# set file names
+PIDFILE="$ddns_rundir/$SECTION_ID.pid" # Process ID file
+UPDFILE="$ddns_rundir/$SECTION_ID.update"      # last update successful send (system uptime)
+DATFILE="$ddns_rundir/$SECTION_ID.dat" # save stdout data of WGet and other extern programs called
+ERRFILE="$ddns_rundir/$SECTION_ID.err" # save stderr output of WGet and other extern programs called
+IPFILE="$ddns_rundir/$SECTION_ID.ip"   #
+LOGFILE="$ddns_logdir/$SECTION_ID.log" # log file
+
+# VERBOSE > 1 delete logfile if exist to create an empty one
+# only with this data of this run for easier diagnostic
+# new one created by write_log function
+[ $VERBOSE -gt 1 -a -f $LOGFILE ] && rm -f $LOGFILE
+# Previously -v 3 could we used for dry run
+[ $VERBOSE -ge 3 ] && DRY_RUN=1
+
+# TRAP handler
+trap "trap_handler 0 \$?" 0    # handle script exit with exit status
+trap "trap_handler 1"  1       # SIGHUP        Hangup / reload config
+trap "trap_handler 2"  2       # SIGINT        Terminal interrupt
+trap "trap_handler 3"  3       # SIGQUIT       Terminal quit
+# trap "trap_handler 9"  9     # SIGKILL       no chance to trap
+trap "trap_handler 15" 15      # SIGTERM       Termination
+
+################################################################################
+# Leave this comment here, to clearly document variable names that are expected/possible
+# Use load_all_config_options to load config options, which is a much more flexible solution.
+#
+# config_load "ddns"
+# config_get <variable> $SECTION_ID <option>
+#
+# defined options (also used as variable):
+#
+# enabled      self-explanatory
+# interface    network interface used by hotplug.d i.e. 'wan' or 'wan6'
+#
+# service_name Which DDNS service do you use or "custom"
+# update_url   URL to use to update your "custom" DDNS service
+# update_script SCRIPT to use to update your "custom" DDNS service
+#
+# lookup_host  FQDN of ONE of your at DDNS service defined host / required to validate if IP update happen/necessary
+# domain       Nomally your DDNS hostname / replace [DOMAIN] in update_url
+# username     Username of your DDNS service account / urlenceded and replace [USERNAME] in update_url
+# password     Password of your DDNS service account / urlencoded and replace [PASSWORD] in update_url
+# param_enc    Optional parameter for (later) usage  / urlencoded and replace [PARAMENC] in update_url
+# param_opt    Optional parameter for (later) usage  / replace [PARAMOPT] in update_url
+#
+# use_https    use HTTPS to update DDNS service
+# cacert       file or directory where HTTPS can find certificates to verify server; 'IGNORE' ignore check of server certificate
+#
+# use_syslog   log activity to syslog
+#
+# ip_source    source to detect current IP ('network' or 'web' or 'script' or 'interface')
+# ip_network   local defined network to read IP from i.e. 'wan' or 'wan6'
+# ip_url       URL to read current IP from i.e. http://checkip.dyndns.com/ or http://checkipv6.dyndns.com/
+# ip_script    full path and name of your script to detect current IP
+# ip_interface physical interface to use for detecting
+#
+# check_interval       check for changes every  !!! checks below 10 minutes make no sense because the Internet
+# check_unit           'days' 'hours' 'minutes' !!! needs about 5-10 minutes to sync an IP-change for an DNS entry
+#
+# force_interval       force to send an update to your service if no change was detected
+# force_unit           'days' 'hours' 'minutes' !!! force_interval="0" runs this script once for use i.e. with cron
+#
+# retry_interval       if error was detected retry in
+# retry_unit           'days' 'hours' 'minutes' 'seconds'
+# retry_max_count      number of retries before scripts stops
+#
+# use_ipv6             detecting/sending IPv6 address
+# force_ipversion      force usage of IPv4 or IPv6 for the whole detection and update communication
+# dns_server           using a non default dns server to get Registered IP from Internet
+# force_dnstcp         force communication with DNS server via TCP instead of default UDP
+# proxy                        using a proxy for communication !!! ALSO used to detect current IP via web => return proxy's IP !!!
+# use_logfile          self-explanatory "/var/log/ddns/$SECTION_ID.log"
+# is_glue                      the record that should be updated is a glue record
+#
+# some functionality needs
+# - GNU Wget or cURL installed for sending updates to DDNS service
+# - BIND host installed to detect Registered IP
+#
+################################################################################
+
+load_all_config_options "ddns" "$SECTION_ID"
+ERR_LAST=$?    # save return code - equal 0 if SECTION_ID found
+
+# set defaults if not defined
+[ -z "$enabled" ]        && enabled=0
+[ -z "$retry_max_count" ] && retry_max_count=0 # endless retry
+[ -z "$use_syslog" ]      && use_syslog=2      # syslog "Notice"
+[ -z "$use_https" ]       && use_https=0       # not use https
+[ -z "$use_logfile" ]     && use_logfile=1     # use logfile by default
+[ -z "$use_ipv6" ]       && use_ipv6=0         # use IPv4 by default
+[ -z "$force_ipversion" ] && force_ipversion=0 # default let system decide
+[ -z "$force_dnstcp" ]   && force_dnstcp=0     # default UDP
+[ -z "$ip_source" ]      && ip_source="network"
+[ -z "$is_glue" ]        && is_glue=0          # default the ddns record is not a glue record
+[ "$ip_source" = "network" -a -z "$ip_network" -a $use_ipv6 -eq 0 ] && ip_network="wan"  # IPv4: default wan
+[ "$ip_source" = "network" -a -z "$ip_network" -a $use_ipv6 -eq 1 ] && ip_network="wan6" # IPv6: default wan6
+[ "$ip_source" = "web" -a -z "$ip_url" -a $use_ipv6 -eq 0 ] && ip_url="http://checkip.dyndns.com"
+[ "$ip_source" = "web" -a -z "$ip_url" -a $use_ipv6 -eq 1 ] && ip_url="http://checkipv6.dyndns.com"
+[ "$ip_source" = "interface" -a -z "$ip_interface" ] && ip_interface="eth1"
+
+# url encode username (might be email or something like this)
+# and password (might have special chars for security reason)
+# and optional parameter "param_enc"
+[ -n "$username" ] && urlencode URL_USER "$username"
+[ -n "$password" ] && urlencode URL_PASS "$password"
+[ -n "$param_enc" ] && urlencode URL_PENC "$param_enc"
+
+# SECTION_ID does not exists
+[ $ERR_LAST -ne 0 ] && {
+       [ $VERBOSE -le 1 ] && VERBOSE=2         # force console out and logfile output
+       [ -f $LOGFILE ] && rm -f $LOGFILE       # clear logfile before first entry
+       write_log  7 "************ ************** ************** **************"
+       write_log  5 "PID '$$' started at $(eval $DATE_PROG)"
+       write_log  7 "ddns version  : $VERSION"
+       write_log  7 "uci configuration:${N}$(uci -q show ddns | grep '=service' | sort)"
+       write_log 14 "Service section '$SECTION_ID' not defined"
+}
+
+write_log 7 "************ ************** ************** **************"
+write_log 5 "PID '$$' started at $(eval $DATE_PROG)"
+write_log 7 "ddns version  : $VERSION"
+write_log 7 "uci configuration:${N}$(uci -q show ddns.$SECTION_ID | sort)"
+# write_log 7 "ddns version  : $(opkg list-installed ddns-scripts | cut -d ' ' -f 3)"
+case $VERBOSE in
+       0) write_log  7 "verbose mode  : 0 - run normal, NO console output";;
+       1) write_log  7 "verbose mode  : 1 - run normal, console mode";;
+       2) write_log  7 "verbose mode  : 2 - run once, NO retry on error";;
+       *) write_log 14 "error detecting VERBOSE '$VERBOSE'";;
+esac
+[ $DRY_RUN -ge 1 ] && write_log  7 "Dry Run: NOT sending update"
+
+# check enabled state otherwise we don't need to continue
+[ $enabled -eq 0 ] && write_log 14 "Service section disabled!"
+
+# determine what update url we're using if a service_name is supplied
+# otherwise update_url is set inside configuration (custom update url)
+# or update_script is set inside configuration (custom update script)
+[ -n "$service_name" ] && {
+       # Check first if we have a custom service provider with this name
+       get_service_data "$service_name" "/usr/share/ddns/custom" update_url update_script UPD_ANSWER
+       if [ "$?" != "0" ]; then
+               get_service_data "$service_name" "/usr/share/ddns/default" update_url update_script UPD_ANSWER
+       fi
+}
+
+[ -z "$update_url" -a -z "$update_script" ] && write_log 14 "No update_url found/defined or no update_script found/defined!"
+[ -n "$update_script" -a ! -f "$update_script" ] && write_log 14 "Custom update_script not found!"
+
+# temporary needed to convert existing uci settings
+[ -z "$lookup_host" ] && {
+       uci -q set ddns.$SECTION_ID.lookup_host="$domain"
+       uci -q commit ddns
+       lookup_host="$domain"
+}
+# later versions only check if configured correctly
+
+# without lookup host and possibly other required options we can do nothing for you
+[ -z "$lookup_host" ] && write_log 14 "Service section not configured correctly! Missing 'lookup_host'"
+
+# verify validity of variables
+[ -n "$lookup_host" ] && sanitize_variable lookup_host "$DNS_CHARSET" ""
+[ -n "$dns_server" ] && sanitize_variable dns_server "$DNS_CHARSET" ""
+[ -n "$domain" ] && sanitize_variable domain "$DNS_CHARSET_DOMAIN" ""
+
+# Filter shell escape characters, if these are required in the URL, they
+# can still be passed url encoded
+[ -n "$param_opt" ] && sanitize_variable param_opt "" "$SHELL_ESCAPE"
+
+[ -n "$update_url" ] && {
+       # only check if update_url is given, update_scripts have to check themselves
+       [ -z "$domain" ] && $(echo "$update_url" | grep "\[DOMAIN\]" >/dev/null 2>&1) && \
+               write_log 14 "Service section not configured correctly! Missing 'domain'"
+       [ -z "$username" ] && $(echo "$update_url" | grep "\[USERNAME\]" >/dev/null 2>&1) && \
+               write_log 14 "Service section not configured correctly! Missing 'username'"
+       [ -z "$password" ] && $(echo "$update_url" | grep "\[PASSWORD\]" >/dev/null 2>&1) && \
+               write_log 14 "Service section not configured correctly! Missing 'password'"
+       [ -z "$param_enc" ] && $(echo "$update_url" | grep "\[PARAMENC\]" >/dev/null 2>&1) && \
+               write_log 14 "Service section not configured correctly! Missing 'param_enc'"
+       [ -z "$param_opt" ] && $(echo "$update_url" | grep "\[PARAMOPT\]" >/dev/null 2>&1) && \
+               write_log 14 "Service section not configured correctly! Missing 'param_opt'"
+}
+
+# verify ip_source 'script' if script is configured and executable
+if [ "$ip_source" = "script" ]; then
+       set -- $ip_script       #handling script with parameters, we need a trick
+       [ -z "$1" ] && write_log 14 "No script defined to detect current IP!"
+       [ -x "$1" ] || write_log 14 "Script to detect current IP not executable!"
+fi
+
+# compute update interval in seconds
+get_seconds CHECK_SECONDS ${check_interval:-10} ${check_unit:-"minutes"} # default 10 min
+get_seconds FORCE_SECONDS ${force_interval:-72} ${force_unit:-"hours"}  # default 3 days
+get_seconds RETRY_SECONDS ${retry_interval:-60} ${retry_unit:-"seconds"} # default 60 sec
+[ $CHECK_SECONDS -lt 300 ] && CHECK_SECONDS=300                # minimum 5 minutes
+[ $FORCE_SECONDS -gt 0 -a $FORCE_SECONDS -lt $CHECK_SECONDS ] && FORCE_SECONDS=$CHECK_SECONDS  # FORCE_SECONDS >= CHECK_SECONDS or 0
+write_log 7 "check interval: $CHECK_SECONDS seconds"
+write_log 7 "force interval: $FORCE_SECONDS seconds"
+write_log 7 "retry interval: $RETRY_SECONDS seconds"
+write_log 7 "retry max count : $retry_max_count times"
+
+# kill old process if it exists & set new pid file
+stop_section_processes "$SECTION_ID"
+[ $? -gt 0 ] && write_log 7 "'SIGTERM' was send to old process" || write_log 7 "No old process"
+echo $$ > $PIDFILE
+
+# determine when the last update was
+# the following lines should prevent multiple updates if hotplug fires multiple startups
+# as described in Ticket #7820, but did not function if never an update take place
+# i.e. after a reboot (/var is linked to /tmp)
+# using uptime as reference because date might not be updated via NTP client
+get_uptime CURR_TIME
+[ -e "$UPDFILE" ] && {
+       LAST_TIME=$(cat $UPDFILE)
+       # check also LAST > CURR because link of /var/run to /tmp might be removed
+       # i.e. boxes with larger filesystems
+       [ -z "$LAST_TIME" ] && LAST_TIME=0
+       [ $LAST_TIME -gt $CURR_TIME ] && LAST_TIME=0
+}
+if [ $LAST_TIME -eq 0 ]; then
+       write_log 7 "last update: never"
+else
+       EPOCH_TIME=$(( $(date +%s) - $CURR_TIME + $LAST_TIME ))
+       EPOCH_TIME="date -d @$EPOCH_TIME +'$ddns_dateformat'"
+       write_log 7 "last update: $(eval $EPOCH_TIME)"
+fi
+
+# verify DNS server
+[ -n "$dns_server" ] && verify_dns "$dns_server"
+
+# verify Proxy server and set environment
+[ -n "$proxy" ] && {
+       verify_proxy "$proxy" && {
+               # everything ok set proxy
+               export HTTP_PROXY="http://$proxy"
+               export HTTPS_PROXY="http://$proxy"
+               export http_proxy="http://$proxy"
+               export https_proxy="http://$proxy"
+       }
+}
+
+# let's check if there is already an IP registered on the web
+get_registered_ip REGISTERED_IP "NO_RETRY"
+ERR_LAST=$?
+#     No error    or     No IP set      otherwise retry
+[ $ERR_LAST -eq 0 -o $ERR_LAST -eq 127 ] || get_registered_ip REGISTERED_IP
+# on IPv6 we use expanded version to be shure when comparing
+[ $use_ipv6 -eq 1 ] && expand_ipv6 "$REGISTERED_IP" REGISTERED_IP
+
+# loop endlessly, checking ip every check_interval and forcing an updating once every force_interval
+write_log 6 "Starting main loop at $(eval $DATE_PROG)"
+while : ; do
+
+       get_current_ip CURRENT_IP               # read current IP
+       [ $use_ipv6 -eq 1 ] && expand_ipv6 "$CURRENT_IP" CURRENT_IP     # on IPv6 we use expanded version
+
+       # prepare update
+       # never updated or forced immediate then NEXT_TIME = 0
+       [ $FORCE_SECONDS -eq 0 -o $LAST_TIME -eq 0 ] \
+               && NEXT_TIME=0 \
+               || NEXT_TIME=$(( $LAST_TIME + $FORCE_SECONDS ))
+
+       get_uptime CURR_TIME            # get current uptime
+
+       # send update when current time > next time or current ip different from registered ip
+       if [ $CURR_TIME -ge $NEXT_TIME -o "$CURRENT_IP" != "$REGISTERED_IP" ]; then
+               if [ $DRY_RUN -ge 1 ]; then
+                       write_log 7 "Dry Run: NO UPDATE send"
+               elif [ "$CURRENT_IP" != "$REGISTERED_IP" ]; then
+                       write_log 7 "Update needed - L: '$CURRENT_IP' <> R: '$REGISTERED_IP'"
+               else
+                       write_log 7 "Forced Update - L: '$CURRENT_IP' == R: '$REGISTERED_IP'"
+               fi
+
+               ERR_LAST=0
+               [ $DRY_RUN -eq 0 ] && {
+                       send_update "$CURRENT_IP"
+                       ERR_LAST=$?     # save return value
+               }
+
+               # error sending current IP to provider
+               # we have no communication error (handled inside send_update/do_transfer)
+               # but update was not recognized
+               # do NOT retry after RETRY_SECONDS, do retry after CHECK_SECONDS
+               # to early retrys will block most DDNS provider
+               # providers answer is checked inside send_update() function
+               if [ $ERR_LAST -eq 0 ]; then
+                       get_uptime LAST_TIME            # we send update, so
+                       echo $LAST_TIME > $UPDFILE      # save LASTTIME to file
+                       [ "$CURRENT_IP" != "$REGISTERED_IP" ] \
+                               && write_log 6 "Update successful - IP '$CURRENT_IP' send" \
+                               || write_log 6 "Forced update successful - IP: '$CURRENT_IP' send"
+               elif [ $ERR_LAST -eq 127 ]; then
+                       write_log 3 "No update send to DDNS Provider"
+               else
+                       write_log 3 "IP update not accepted by DDNS Provider"
+               fi
+       fi
+
+       # now we wait for check interval before testing if update was recognized
+       [ $DRY_RUN -eq 0 ] && {
+               write_log 7 "Waiting $CHECK_SECONDS seconds (Check Interval)"
+               sleep $CHECK_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP # enable trap-handler
+               PID_SLEEP=0
+       } || write_log 7 "Dry Run: NO Check Interval waiting"
+
+       REGISTERED_IP=""                # clear variable
+       get_registered_ip REGISTERED_IP # get registered/public IP
+       [ $use_ipv6 -eq 1 ] && expand_ipv6 "$REGISTERED_IP" REGISTERED_IP       # on IPv6 we use expanded version
+
+       # IP's are still different
+       if [ "$CURRENT_IP" != "$REGISTERED_IP" ]; then
+               if [ $VERBOSE -le 1 ]; then     # VERBOSE <=1 then retry
+                       RETRY_COUNT=$(( $RETRY_COUNT + 1 ))
+                       [ $retry_max_count -gt 0 -a $RETRY_COUNT -gt $retry_max_count ] && \
+                               write_log 14 "Updating IP at DDNS provider failed after $retry_max_count retries"
+                       write_log 4 "Updating IP at DDNS provider failed - starting retry $RETRY_COUNT/$retry_max_count"
+                       continue # loop to beginning
+               else
+                       write_log 4 "Updating IP at DDNS provider failed"
+                       write_log 7 "Verbose Mode: $VERBOSE - NO retry"; exit 1
+               fi
+       else
+               # we checked successful the last update
+               RETRY_COUNT=0                   # reset error counter
+       fi
+
+       # force_update=0 or VERBOSE > 1 - leave here
+       [ $VERBOSE -gt 1 ]  && write_log 7 "Verbose Mode: $VERBOSE - NO reloop"
+       [ $FORCE_SECONDS -eq 0 ] && write_log 6 "Configured to run once"
+       [ $VERBOSE -gt 1 -o $FORCE_SECONDS -eq 0 ] && exit 0
+
+       write_log 6 "Rerun IP check at $(eval $DATE_PROG)"
+done
+# we should never come here there must be a programming error
+write_log 12 "Error in 'dynamic_dns_updater.sh - program coding error"
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_cloudflare_com_v4.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_cloudflare_com_v4.sh
new file mode 100644 (file)
index 0000000..4fb3a0d
--- /dev/null
@@ -0,0 +1,202 @@
+#!/bin/sh
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#
+# script for sending updates to cloudflare.com
+#.based on Ben Kulbertis cloudflare-update-record.sh found at http://gist.github.com/benkulbertis
+#.and on George Johnson's cf-ddns.sh found at https://github.com/gstuartj/cf-ddns.sh
+#.2016-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+# CloudFlare API documentation at https://api.cloudflare.com/
+#
+# This script is parsed by dynamic_dns_functions.sh inside send_update() function
+#
+# using following options from /etc/config/ddns
+# option username  - your cloudflare e-mail
+# option password  - cloudflare api key, you can get it from cloudflare.com/my-account/
+# option domain    - "hostname@yourdomain.TLD" # syntax changed to remove split_FQDN() function and tld_names.dat.gz
+#
+# The proxy status would not be changed by this script. Please change it in Cloudflare dashboard manually.
+#
+# variable __IP already defined with the ip-address to use for update
+#
+
+# check parameters
+[ -z "$CURL" ] && [ -z "$CURL_SSL" ] && write_log 14 "Cloudflare communication require cURL with SSL support. Please install"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing key as 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing secret as 'password'"
+[ $use_https -eq 0 ] && use_https=1    # force HTTPS
+
+# used variables
+local __HOST __DOMAIN __TYPE __URLBASE __PRGBASE __RUNPROG __DATA __IPV6 __ZONEID __RECID __PROXIED
+local __URLBASE="https://api.cloudflare.com/client/v4"
+local __TTL=120
+
+# split __HOST __DOMAIN from $domain
+# given data:
+# @example.com for "domain record"
+# host.sub@example.com for a "host record"
+__HOST=$(printf %s "$domain" | cut -d@ -f1)
+__DOMAIN=$(printf %s "$domain" | cut -d@ -f2)
+
+# Cloudflare v4 needs:
+# __DOMAIN = the base domain i.e. example.com
+# __HOST   = the FQDN of record to modify
+# i.e. example.com for the "domain record" or host.sub.example.com for "host record"
+
+# handling domain record then set __HOST = __DOMAIN
+[ -z "$__HOST" ] && __HOST=$__DOMAIN
+# handling host record then rebuild fqdn host@domain.tld => host.domain.tld
+[ "$__HOST" != "$__DOMAIN" ] && __HOST="${__HOST}.${__DOMAIN}"
+
+# set record type
+[ $use_ipv6 -eq 0 ] && __TYPE="A" || __TYPE="AAAA"
+
+# transfer function to use for godaddy
+# all needed variables are set global here
+# so we can use them directly
+cloudflare_transfer() {
+       local __CNT=0
+       local __ERR
+       while : ; do
+               write_log 7 "#> $__RUNPROG"
+               eval "$__RUNPROG"
+               __ERR=$?                        # save communication error
+               [ $__ERR -eq 0 ] && break       # no error break while
+
+               write_log 3 "cURL Error: '$__ERR'"
+               write_log 7 "$(cat $ERRFILE)"           # report error
+
+               [ $VERBOSE_MODE -gt 1 ] && {
+                       # VERBOSE_MODE > 1 then NO retry
+                       write_log 4 "Transfer failed - Verbose Mode: $VERBOSE_MODE - NO retry on error"
+                       break
+               }
+
+               __CNT=$(( $__CNT + 1 )) # increment error counter
+               # if error count > retry_count leave here
+               [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && \
+                       write_log 14 "Transfer failed after $retry_count retries"
+
+               write_log 4 "Transfer failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds"
+               sleep $RETRY_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP # enable trap-handler
+               PID_SLEEP=0
+       done
+
+       # check for error
+       grep -q '"success":\s*true' $DATFILE || {
+               write_log 4 "CloudFlare reported an error:"
+               write_log 7 "$(cat $DATFILE)"           # report error
+               return 1        # HTTP-Fehler
+       }
+}
+
+# Build base command to use
+__PRGBASE="$CURL -RsS -o $DATFILE --stderr $ERRFILE"
+# force network/interface-device to use for communication
+if [ -n "$bind_network" ]; then
+       local __DEVICE
+       network_get_physdev __DEVICE $bind_network || \
+               write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'"
+       write_log 7 "Force communication via device '$__DEVICE'"
+       __PRGBASE="$__PRGBASE --interface $__DEVICE"
+fi
+# force ip version to use
+if [ $force_ipversion -eq 1 ]; then
+       [ $use_ipv6 -eq 0 ] && __PRGBASE="$__PRGBASE -4" || __PRGBASE="$__PRGBASE -6"   # force IPv4/IPv6
+fi
+# set certificate parameters
+if [ "$cacert" = "IGNORE" ]; then      # idea from Ticket #15327 to ignore server cert
+       __PRGBASE="$__PRGBASE --insecure"       # but not empty better to use "IGNORE"
+elif [ -f "$cacert" ]; then
+       __PRGBASE="$__PRGBASE --cacert $cacert"
+elif [ -d "$cacert" ]; then
+       __PRGBASE="$__PRGBASE --capath $cacert"
+elif [ -n "$cacert" ]; then            # it's not a file and not a directory but given
+       write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
+fi
+# disable proxy if not set (there might be .wgetrc or .curlrc or wrong environment set)
+# or check if libcurl compiled with proxy support
+if [ -z "$proxy" ]; then
+       __PRGBASE="$__PRGBASE --noproxy '*'"
+elif [ -z "$CURL_PROXY" ]; then
+       # if libcurl has no proxy support and proxy should be used then force ERROR
+       write_log 13 "cURL: libcurl compiled without Proxy support"
+fi
+# set headers
+if [ "$username" = "Bearer" ]; then
+  write_log 7 "Found Username 'Bearer' using Password as Bearer Authorization Token"
+  __PRGBASE="$__PRGBASE --header 'Authorization: Bearer $password' "
+else
+  __PRGBASE="$__PRGBASE --header 'X-Auth-Email: $username' "
+  __PRGBASE="$__PRGBASE --header 'X-Auth-Key: $password' "
+fi
+__PRGBASE="$__PRGBASE --header 'Content-Type: application/json' "
+
+if [ -n "$zone_id" ]; then
+       __ZONEID="$zone_id"
+else
+       # read zone id for registered domain.TLD
+       __RUNPROG="$__PRGBASE --request GET '$__URLBASE/zones?name=$__DOMAIN'"
+       cloudflare_transfer || return 1
+       # extract zone id
+       __ZONEID=$(grep -o '"id":\s*"[^"]*' $DATFILE | grep -o '[^"]*$' | head -1)
+       [ -z "$__ZONEID" ] && {
+               write_log 4 "Could not detect 'zone id' for domain.tld: '$__DOMAIN'"
+               return 127
+       }
+fi
+
+# read record id for A or AAAA record of host.domain.TLD
+__RUNPROG="$__PRGBASE --request GET '$__URLBASE/zones/$__ZONEID/dns_records?name=$__HOST&type=$__TYPE'"
+cloudflare_transfer || return 1
+# extract record id
+__RECID=$(grep -o '"id":\s*"[^"]*' $DATFILE | grep -o '[^"]*$' | head -1)
+[ -z "$__RECID" ] && {
+       write_log 4 "Could not detect 'record id' for host.domain.tld: '$__HOST'"
+       return 127
+}
+
+# extract current stored IP
+__DATA=$(grep -o '"content":\s*"[^"]*' $DATFILE | grep -o '[^"]*$' | head -1)
+
+# check data
+[ $use_ipv6 -eq 0 ] \
+       && __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV4_REGEX") \
+       || __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV6_REGEX")
+
+# we got data so verify
+[ -n "$__DATA" ] && {
+       # expand IPv6 for compare
+       if [ $use_ipv6 -eq 1 ]; then
+               expand_ipv6 $__IP __IPV6
+               expand_ipv6 $__DATA __DATA
+               [ "$__DATA" = "$__IPV6" ] && {          # IPv6 no update needed
+                       write_log 7 "IPv6 at CloudFlare.com already up to date"
+                       return 0
+               }
+       else
+               [ "$__DATA" = "$__IP" ] && {            # IPv4 no update needed
+                       write_log 7 "IPv4 at CloudFlare.com already up to date"
+                       return 0
+               }
+       fi
+}
+
+# update is needed
+# let's build data to send
+# set proxied parameter
+__PROXIED=$(grep -o '"proxied":\s*[^",]*' $DATFILE | grep -o '[^:]*$')
+
+# use file to work around " needed for json
+cat > $DATFILE << EOF
+{"id":"$__ZONEID","type":"$__TYPE","name":"$__HOST","content":"$__IP","ttl":$__TTL,"proxied":$__PROXIED}
+EOF
+
+# let's complete transfer command
+__RUNPROG="$__PRGBASE --request PUT --data @$DATFILE '$__URLBASE/zones/$__ZONEID/dns_records/$__RECID'"
+cloudflare_transfer || return 1
+
+return 0
+
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_cnkuai_cn.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_cnkuai_cn.sh
new file mode 100644 (file)
index 0000000..a2b7863
--- /dev/null
@@ -0,0 +1,86 @@
+# inside url we need domain, username and password
+[ -z "$domain" ]   && write_log 14 "Service section not configured correctly! Missing 'domain'"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+
+local urlCp='http://cp.cnkuai.cn/'
+local urlLogin='http://cp.cnkuai.cn/userlogin.asp'
+local urlCaptcha='http://cp.cnkuai.cn/inc/image.asp'
+local urlDnsA='http://cp.cnkuai.cn/dns_a.asp'
+local urlDnsAAAA='http://cp.cnkuai.cn/dns_ipv6.asp'
+local urlDnsSave='http://cp.cnkuai.cn/dns_save.asp'
+
+getPixel(){
+  local filename=$1
+  local x=$(($2*3))
+  local y=$(($3*3))
+  local width=48
+
+  hexdump -s "$((x+width*y))" -n 3 -e '3/1 "%02X"' "$filename"
+}
+
+captchaChar(){
+  local filename=$1
+  local xoffset=$2
+
+  if [ "$(getPixel "$filename" $((xoffset+2)) 5)" = '000000' ]; then
+    echo '1'
+  elif [ "$(getPixel "$filename" $((xoffset+5)) 7)" = '000000' ]; then
+    echo '2'
+  elif [ "$(getPixel "$filename" $((xoffset+4)) 3)" = '000000' ]; then
+    echo '4'
+  elif [ "$(getPixel "$filename" $((xoffset+6)) 4)" = '000000' ]; then
+    echo '7'
+  elif [ "$(getPixel "$filename" $((xoffset+5)) 8)" = '000000' ]; then
+    echo '8'
+  elif [ "$(getPixel "$filename" $((xoffset+6)) 8)" = '000000' ]; then
+    echo '9'
+  elif [ "$(getPixel "$filename" $((xoffset+5)) 6)" = '000000' ]; then
+    echo '3'
+  elif [ "$(getPixel "$filename" $((xoffset+0)) 4)" = '000000' ]; then
+    echo '5'
+  elif [ "$(getPixel "$filename" $((xoffset+1)) 5)" = '000000' ]; then
+    echo '6'
+  else
+    echo '0'
+  fi
+}
+
+captcha(){
+  local str
+  str=$(captchaChar "$1" 9)
+  str=$str$(captchaChar "$1" 18)
+  str=$str$(captchaChar "$1" 26)
+  str=$str$(captchaChar "$1" 35)
+  echo "$str"
+}
+
+#clean
+rm /tmp/cnkuai.*
+#login to cnkuai dns cp
+curl -c '/tmp/cnkuai.cookiejar' "$urlCaptcha" | gif2rgb > /tmp/cnkuai.rgb || return 1
+yzm=$(captcha "/tmp/cnkuai.rgb")
+curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' -H "Content-Type: application/x-www-form-urlencoded" -H "Referer: $urlCp" -d "userid=$URL_USER&password=$URL_PASS&yzm=$yzm&B1=%C8%B7%C8%CF%B5%C7%C2%BD&lx=0&userlx=3" -X POST "$urlLogin" > /dev/null || return 1
+
+if [ "$use_ipv6" -eq 0 ]; then
+  curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' "$urlDnsA" > /tmp/cnkuai.html || return 1
+else
+  curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' "$urlDnsAAAA" > /tmp/cnkuai.html || return 1
+fi
+local domainline
+domainline=$(awk "/<td>$domain<\/td>/{ print NR; exit }" /tmp/cnkuai.html)
+local domainid
+domainid=$(awk "NR==$((domainline+3))" /tmp/cnkuai.html | sed 's/^.*name=\x27domainid\x27 value="//g' | sed 's/".*$//g')
+local dnslistid
+dnslistid=$(awk "NR==$((domainline+3))" /tmp/cnkuai.html | sed 's/^.*name=\x27dnslistid\x27 value="//g' | sed 's/".*$//g')
+
+local data
+
+if [ "$use_ipv6" -eq 0 ]; then
+  data="T2=$__IP&T3=120&act=dns_a_edit&domainid=$domainid&dnslistid=$dnslistid&B1=%D0%DE%B8%C4"
+else
+  data="T2=$__IP&T3=120&act=dns_ipv6_edit&domainid=$domainid&dnslistid=$dnslistid&B1=%D0%DE%B8%C4"
+fi
+curl -b '/tmp/cnkuai.cookiejar' -c '/tmp/cnkuai.cookiejar' -H "Content-Type: application/x-www-form-urlencoded" -H "Referer: $urlDnsA" -d "$data" -X POST "$urlDnsSave" > /dev/null || return 1
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_digitalocean_com_v2.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_digitalocean_com_v2.sh
new file mode 100644 (file)
index 0000000..5ee1b13
--- /dev/null
@@ -0,0 +1,40 @@
+# Script for sending user defined updates using the DigitalOcean API
+# 2015 Artem Yakimenko <code at temik dot me>
+# 2021 George Giannou <giannoug at gmail dot com>
+
+# Options passed from /etc/config/ddns:
+# Domain - the domain name managed by DigitalOcean (e.g. example.com)
+# Username - the hostname of the domain (e.g. myrouter)
+# Password - DigitalOcean personal access token (API key)
+# Optional Parameter - the API domain record ID of the hostname (e.g. 21694203)
+
+# Use the following command to find your API domain record ID (replace TOKEN and DOMAIN with your own):
+# curl -X GET -H 'Content-Type: application/json' \
+#      -H "Authorization: Bearer TOKEN" \
+#      "https://api.digitalocean.com/v2/domains/DOMAIN/records"
+
+. /usr/share/libubox/jshn.sh
+
+[ -z "$domain" ] && write_log 14 "Service section not configured correctly! Missing domain name as 'Domain'"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing hostname as 'Username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing personal access token as 'Password'"
+[ -z "$param_opt" ] && write_log 14 "Service section not configured correctly! Missing API domain record ID as 'Optional Parameter'"
+
+# Construct JSON payload
+json_init
+json_add_string name "$username"
+json_add_string data "$__IP"
+
+__STATUS=$(curl -Ss -X PUT "https://api.digitalocean.com/v2/domains/${domain}/records/${param_opt}" \
+       -H "Authorization: Bearer ${password}" \
+       -H "Content-Type: application/json" \
+       -d "$(json_dump)" \
+       -w "%{http_code}\n" -o $DATFILE 2>$ERRFILE)
+
+if [ $? -ne 0 ]; then
+       write_log 14 "Curl failed: $(cat $ERRFILE)"
+       return 1
+elif [ -z $__STATUS ] || [ $__STATUS != 200 ]; then
+       write_log 14 "Curl failed: $__STATUS \ndigitalocean.com answered: $(cat $DATFILE)"
+       return 1
+fi
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_dnspod_cn.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_dnspod_cn.sh
new file mode 100755 (executable)
index 0000000..2091be1
--- /dev/null
@@ -0,0 +1,137 @@
+#!/bin/sh
+
+# Check inputs
+[ -z "$username" ] && write_log 14 "Configuration error! [User name] cannot be empty"
+[ -z "$password" ] && write_log 14 "Configuration error! [Password] cannot be empty"
+
+# Check external tools
+[ -n "$CURL_SSL" ] || write_log 13 "Dnspod communication require cURL with SSL support. Please install"
+[ -n "$CURL_PROXY" ] || write_log 13 "cURL: libcurl compiled without Proxy support"
+
+# Declare variables
+#local __URLBASE __HOST __DOMAIN __TYPE __CMDBASE __POST __POST1 __RECIP __RECID __TTL
+__URLBASE="https://dnsapi.cn"
+
+# Get host and domain from $domain
+[ "${domain:0:2}" = "@." ] && domain="${domain/./}"      # host
+[ "$domain" = "${domain/@/}" ] && domain="${domain/./@}" # host with no sperator
+__HOST="${domain%%@*}"
+__DOMAIN="${domain#*@}"
+[ -z "$__HOST" -o "$__HOST" = "$__DOMAIN" ] && __HOST=@
+
+# Set record type
+[ $use_ipv6 = 0 ] && __TYPE=A || __TYPE=AAAA
+
+# Build base command
+build_command() {
+       __CMDBASE="$CURL -Ss"
+       # bind host/IP
+       if [ -n "$bind_network" ]; then
+               local __DEVICE
+               network_get_physdev __DEVICE $bind_network || write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'"
+               write_log 7 "Force communication via device '$__DEVICE'"
+               __CMDBASE="$__CMDBASE --interface $__DEVICE"
+       fi
+       # Force IP version
+       if [ $force_ipversion = 1 ]; then
+               [ $use_ipv6 = 0 ] && __CMDBASE="$__CMDBASE -4" || __CMDBASE="$__CMDBASE -6"
+       fi
+       # Set CA
+       if [ $use_https = 1 ]; then
+               if [ "$cacert" = IGNORE ]; then
+                       __CMDBASE="$__CMDBASE --insecure"
+               elif [ -f "$cacert" ]; then
+                       __CMDBASE="$__CMDBASE --cacert $cacert"
+               elif [ -d "$cacert" ]; then
+                       __CMDBASE="$__CMDBASE --capath $cacert"
+               elif [ -n "$cacert" ]; then
+                       write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
+               fi
+       fi
+       # Set if no proxy (might be an error with .wgetrc or env)
+       [ -z "$proxy" ] && __CMDBASE="$__CMDBASE --noproxy '*'"
+       __CMDBASE="$__CMDBASE -d"
+}
+
+# Dnspod API
+dnspod_transfer() {
+       __CNT=0
+       case "$1" in
+       0) __A="$__CMDBASE '$__POST' $__URLBASE/Record.List" ;;
+       1) __A="$__CMDBASE '$__POST1' $__URLBASE/Record.Create" ;;
+       2) __A="$__CMDBASE '$__POST1&record_id=$__RECID&ttl=$__TTL' $__URLBASE/Record.Modify" ;;
+       esac
+
+       write_log 7 "#> $__A"
+       while ! __TMP=$(eval $__A 2>&1); do
+               write_log 3 "[$__TMP]"
+               if [ $VERBOSE -gt 1 ]; then
+                       write_log 4 "Transfer failed - detailed mode: $VERBOSE - Do not try again after an error"
+                       return 1
+               fi
+               __CNT=$(($__CNT + 1))
+               [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && write_log 14 "Transfer failed after $retry_count retries"
+               write_log 4 "Transfer failed - $__CNT Try again in $RETRY_SECONDS seconds"
+               sleep $RETRY_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP
+               PID_SLEEP=0
+       done
+       __ERR=$(jsonfilter -s "$__TMP" -e "@.status.code")
+       [ $__ERR = 1 ] && return 0
+       [ $__ERR = 10 ] && [ $1 = 0 ] && return 0
+       __TMP=$(jsonfilter -s "$__TMP" -e "@.status.message")
+       local A="$(date +%H%M%S) ERROR : [$__TMP] - Terminate process"
+       logger -p user.err -t ddns-scripts[$$] $SECTION_ID: ${A:15}
+       printf "%s\n" " $A" >>$LOGFILE
+       exit 1
+}
+
+# Add record
+add_domain() {
+       dnspod_transfer 1
+       printf "%s\n" " $(date +%H%M%S)       : Record add successfully: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN],[IP:$__IP]" >>$LOGFILE
+       return 0
+}
+
+# Modify record
+update_domain() {
+       dnspod_transfer 2
+       printf "%s\n" " $(date +%H%M%S)       : Record modified successfully: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN],[IP:$__IP],[TTL:$__TTL]" >>$LOGFILE
+       return 0
+}
+
+# Get DNS record
+describe_domain() {
+       ret=0
+       __POST="login_token=$username,$password&format=json&domain=$__DOMAIN&sub_domain=$__HOST"
+       __POST1="$__POST&value=$__IP&record_type=$__TYPE&record_line_id=0"
+       dnspod_transfer 0
+       __TMP=$(jsonfilter -s "$__TMP" -e "@.records[@.type='$__TYPE' && @.line_id='0']")
+       if [ -z "$__TMP" ]; then
+               printf "%s\n" " $(date +%H%M%S)       : Record not exist: [$([ "$__HOST" = @ ] || echo $__HOST.)$__DOMAIN]" >>$LOGFILE
+               ret=1
+       else
+               __RECIP=$(jsonfilter -s "$__TMP" -e "@.value")
+               if [ "$__RECIP" != "$__IP" ]; then
+                       __RECID=$(jsonfilter -s "$__TMP" -e "@.id")
+                       __TTL=$(jsonfilter -s "$__TMP" -e "@.ttl")
+                       printf "%s\n" " $(date +%H%M%S)       : Record needs to be updated: [Record IP:$__RECIP] [Local IP:$__IP]" >>$LOGFILE
+                       ret=2
+               fi
+       fi
+}
+
+build_command
+describe_domain
+if [ $ret = 1 ]; then
+       sleep 3
+       add_domain
+elif [ $ret = 2 ]; then
+       sleep 3
+       update_domain
+else
+       printf "%s\n" " $(date +%H%M%S)       : Record needs not update: [Record IP:$__RECIP] [Local IP:$__IP]" >>$LOGFILE
+fi
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_freedns_42_pl.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_freedns_42_pl.sh
new file mode 100644 (file)
index 0000000..f0e9197
--- /dev/null
@@ -0,0 +1,17 @@
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#.2018 Michal Lipka <michal at sysadmin dot care>
+local __DUMMY
+local __URL="https://freedns.42.pl/xmlrpc.php"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+[ $ip_dynamic -eq 1 ] && __IP='\&lt;dynamic\&gt;'
+PROG="$(command -v curl) -sk"
+write_log 7 "sending update to freedns.42.pl with ip $__IP"
+XMLDATA="<?xml version='1.0'?><methodCall><methodName>xname.updateArecord</methodName><params><param><value><struct><member><name>name</name><value><string>[RECORDNAME]</string></value></member><member><name>zone</name><value><string>[ZONENAME]</string></value></member><member><name>oldaddress</name><value><string>*</string></value></member><member><name>updatereverse</name><value><string>0</string></value></member><member><name>user</name><value><string>[USERNAME]</string></value></member><member><name>ttl</name><value><string>600</string></value></member><member><name>newaddress</name><value><string>[IP]</string></value></member><member><name>password</name><value><string>[PASSWORD]</string></value></member></struct></value></param></params></methodCall>"
+XMLDATA=$(echo $XMLDATA | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
+-e "s#\[ZONENAME\]#$zone#g" -e "s#\[RECORDNAME\]#$record#g" -e "s#\[IP\]#$__IP#g")
+$PROG -d "$XMLDATA" -o $DATFILE $__URL || return 1
+write_log 7 "'freedns.42.pl' answered:${N}$(cat $DATFILE)"
+grep "<fault>" $DATFILE > /dev/null 2>&1 && return 1
+grep '<name>serial</name>' $DATFILE >/dev/null 2>&1
+return $?
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_gandi_net.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_gandi_net.sh
new file mode 100644 (file)
index 0000000..321687d
--- /dev/null
@@ -0,0 +1,48 @@
+#!/bin/sh
+# Thanks goes to Alex Griffin who provided this script.
+
+. /usr/share/libubox/jshn.sh
+
+local __TTL=600
+local __RRTYPE
+local __ENDPOINT="https://api.gandi.net/v5/livedns"
+local __STATUS
+
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing subdomain as 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing API Key as 'password'"
+
+[ $use_ipv6 -ne 0 ] && __RRTYPE="AAAA" || __RRTYPE="A"
+
+# Construct JSON payload
+json_init
+json_add_int rrset_ttl "$__TTL"
+json_add_array rrset_values
+json_add_string "" "$__IP"
+json_close_array
+
+# Log the curl command
+write_log 7 "curl -s -X PUT \"$__ENDPOINT/domains/$domain/records/$username/$__RRTYPE\" \
+       -H \"Authorization: Apikey $password\" \
+       -H \"Content-Type: application/json\" \
+       -d \"$(json_dump)\" \
+       --connect-timeout 30"
+
+__STATUS=$(curl -s -X PUT "$__ENDPOINT/domains/$domain/records/$username/$__RRTYPE" \
+       -H "Authorization: Apikey $password" \
+       -H "Content-Type: application/json" \
+       -d "$(json_dump)" \
+       --connect-timeout 30 \
+       -w "%{http_code}\n" -o $DATFILE 2>$ERRFILE)
+
+local __ERRNO=$?
+if [ $__ERRNO -ne 0 ]; then
+       write_log 14 "Curl failed with $__ERRNO: $(cat $ERRFILE)"
+       return 1
+elif [ -z $__STATUS ] || [ $__STATUS != 201 ]; then
+       write_log 14 "LiveDNS failed: $__STATUS \ngandi.net answered: $(cat $DATFILE)"
+       return 1
+fi
+
+write_log 7 "gandi.net answered: $(cat $DATFILE)"
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_gcp_v1.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_gcp_v1.sh
new file mode 100755 (executable)
index 0000000..5bd096f
--- /dev/null
@@ -0,0 +1,272 @@
+#!/bin/sh
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#.2022 Chris Barrick <chrisbarrick@google.com>
+#
+# This script sends DDNS updates using the Google Cloud DNS REST API.
+# See: https://cloud.google.com/dns/docs/reference/v1
+#
+# This script uses a GCP service account. The user is responsible for creating
+# the service account, ensuring it has permission to update DNS records, and
+# for generating a service account key to be used by this script. The records
+# to be updated must already exist.
+#
+# Arguments:
+#
+# - $username: The service account name.
+#   Example: ddns-service-account@my-dns-project.iam.gserviceaccount.com
+#
+# - $password: The service account key. You can paste the key directly into the
+#   "password" field or upload the key file to the router and set the field
+#   equal to the file path. This script supports JSON keys or the raw private
+#   key as a PEM file. P12 keys are not supported. File names must end with
+#   `*.json` or `*.pem`.
+#
+# - $domain: The domain to update.
+#
+# - $param_enc: The additional required arguments, as form-urlencoded data,
+#   i.e. `key1=value1&key2=value2&...`. The required arguments are:
+#   - project: The name of the GCP project that owns the DNS records.
+#   - zone: The DNS zone in the GCP API.
+#   - Example: `project=my-dns-project&zone=my-dns-zone`
+#
+# - $param_opt: Optional TTL for the records, in seconds. Defaults to 3600 (1h).
+#
+# Dependencies:
+# - ddns-scripts  (for the base functionality)
+# - openssl-util  (for the authentication flow)
+# - curl          (for the GCP REST API)
+
+. /usr/share/libubox/jshn.sh
+
+
+# Authentication
+# ---------------------------------------------------------------------------
+# The authentication flow works like this:
+#
+#   1. Construct a JWT claim for access to the DNS readwrite scope.
+#   2. Sign the JWT with the service accout key, proving we have access.
+#   3. Exchange the JWT for an access token, valid for 5m.
+#   4. Use the access token for API calls.
+#
+# See https://developers.google.com/identity/protocols/oauth2/service-account
+
+# A URL-safe variant of base64 encoding, used by JWTs.
+base64_urlencode() {
+       openssl base64 | tr '/+' '_-' | tr -d '=\n'
+}
+
+# Prints the service account private key in PEM format.
+get_service_account_key() {
+       # The "password" field provides us with the service account key.
+       # We allow the user to provide it to us in a few different formats.
+       #
+       # 1. If $password is a string ending in `*.json`, it is a file path,
+       #    pointing to a JSON service account key as downloaded from GCP.
+       #
+       # 2. If $password is a string ending with `*.pem`, it is a PEM private
+       #    key, extracted from the JSON service account key.
+       #
+       # 3. If $password starts with `{`, then the JSON service account key
+       #    was pasted directly into the password field.
+       #
+       # 4. If $password starts with `---`, then the PEM private key was pasted
+       #    directly into the password field.
+       #
+       # We do not support P12 service account keys.
+       case "${password}" in
+       (*".json")
+               jsonfilter -i "${password}" -e @.private_key
+       ;;
+       (*".pem")
+               cat "${password}"
+       ;;
+       ("{"*)
+               jsonfilter -s "${password}" -e @.private_key
+       ;;
+       ("---"*)
+               printf "%s" "${password}"
+       ;;
+       (*)
+               write_log 14 "Could not parse the service account key."
+       ;;
+       esac
+}
+
+# Sign stdin using the service account key. Prints the signature.
+# The input is the JWT header-payload. Used to construct a signed JWT.
+sign() {
+       # Dump the private key to a tmp file so openssl can get to it.
+       local tmp_keyfile="$(mktemp -t gcp_dns_sak.pem.XXXXXX)"
+       chmod 600 ${tmp_keyfile}
+       get_service_account_key > ${tmp_keyfile}
+       openssl dgst -binary -sha256 -sign ${tmp_keyfile}
+       rm ${tmp_keyfile}
+}
+
+# Print the JWT header in JSON format.
+# Currently, Google only supports RS256.
+jwt_header() {
+       json_init
+       json_add_string "alg" "RS256"
+       json_add_string "typ" "JWT"
+       json_dump
+}
+
+# Prints the JWT claim-set in JSON format.
+# The claim is for 5m of readwrite access to the Cloud DNS API.
+jwt_claim_set() {
+       local iat=$(date -u +%s)  # Current UNIX time, UTC.
+       local exp=$(( iat + 300 ))  # Expiration is 5m in the future.
+
+       json_init
+       json_add_string "iss" "${username}"
+       json_add_string "scope" "https://www.googleapis.com/auth/ndev.clouddns.readwrite"
+       json_add_string "aud" "https://oauth2.googleapis.com/token"
+       json_add_string "iat" "${iat}"
+       json_add_string "exp" "${exp}"
+       json_dump
+}
+
+# Generate a JWT signed by the service account key, which can be exchanged for
+# a Google Cloud access token, authorized for Cloud DNS.
+get_jwt() {
+       local header=$(jwt_header | base64_urlencode)
+       local payload=$(jwt_claim_set | base64_urlencode)
+       local header_payload="${header}.${payload}"
+       local signature=$(printf "%s" ${header_payload} | sign | base64_urlencode)
+       echo "${header_payload}.${signature}"
+}
+
+# Request an access token for the Google Cloud service account.
+get_access_token_raw() {
+       local grant_type="urn:ietf:params:oauth:grant-type:jwt-bearer"
+       local assertion=$(get_jwt)
+
+       ${CURL} -v https://oauth2.googleapis.com/token \
+               --data-urlencode 'grant_type=urn:ietf:params:oauth:grant-type:jwt-bearer' \
+               --data-urlencode "assertion=${assertion}" \
+               | jsonfilter -e @.access_token
+}
+
+# Get the access token, stripping the trailing dots.
+get_access_token() {
+       # Since tokens may contain internal dots, we only trim the suffix if it
+       # starts with at least 8 dots. (The access token has *many* trailing dots.)
+       local access_token="$(get_access_token_raw)"
+       echo "${access_token%%........*}"
+}
+
+
+# Google Cloud DNS API
+# ---------------------------------------------------------------------------
+# Cloud DNS offers a straight forward RESTful API.
+#
+# - The main class is a ResourceRecordSet. It's a collection of DNS records
+#   that share the same domain, type, TTL, etc. Within a record set, the only
+#   difference between the records are their values.
+#
+# - The record sets live under a ManagedZone, which in turn lives under a
+#   Project. All we need to know about these are their names.
+#
+# - This implementation only makes PATCH requests to update existing record
+#   sets. The user must have already created at least one A or AAAA record for
+#   the domain they are updating. It's fine to start with a dummy, like 0.0.0.0.
+#
+# - The API requires SSL, and this implementation uses curl.
+
+# Prints a ResourceRecordSet in JSON format.
+format_record_set() {
+       local domain="$1"
+       local record_type="$2"
+       local ttl="$3"
+       shift 3 # The remaining arguments are the IP addresses for this record set.
+
+       json_init
+       json_add_string "kind" "dns#resourceRecordSet"
+       json_add_string "name" "${domain}."  # trailing dot on the domain
+       json_add_string "type" "${record_type}"
+       json_add_string "ttl" "${ttl}"
+       json_add_array "rrdatas"
+       for value in $@; do
+               json_add_string "" "${value}"
+       done
+       json_close_array
+       json_dump
+}
+
+# Makes an HTTP PATCH request to the Cloud DNS API.
+patch_record_set() {
+       local access_token="$1"
+       local project="$2"
+       local zone="$3"
+       local domain="$4"
+       local record_type="$5"
+       local ttl="$6"
+       shift 6 # The remaining arguments are the IP addresses for this record set.
+
+       # Note the trailing dot after the domain name. It's fully qualified.
+       local url="https://dns.googleapis.com/dns/v1/projects/${project}/managedZones/${zone}/rrsets/${domain}./${record_type}"
+       local record_set=$(format_record_set ${domain} ${record_type} ${ttl} $@)
+
+       ${CURL} -v ${url} \
+               -X PATCH \
+               -H "Content-Type: application/json" \
+               -H "Authorization: Bearer ${access_token}" \
+               -d "${record_set}"
+}
+
+
+# Main entrypoint
+# ---------------------------------------------------------------------------
+
+# Parse the $param_enc into project and zone variables.
+# The arguments are the names for those variables.
+parse_project_zone() {
+       local project_var=$1
+       local zone_var=$2
+
+       IFS='&'
+       for entry in $param_enc
+       do
+               case "${entry}" in
+               ('project='*)
+                       local project_val=$(echo "${entry}" | cut -d'=' -f2)
+                       eval "${project_var}=${project_val}"
+               ;;
+               ('zone='*)
+                       local zone_val=$(echo "${entry}" | cut -d'=' -f2)
+                       eval "${zone_var}=${zone_val}"
+               ;;
+               esac
+       done
+       unset IFS
+}
+
+main() {
+       local access_token project zone ttl record_type
+
+       # Dependency checking
+       [ -z "${CURL_SSL}" ] && write_log 14 "Google Cloud DNS requires cURL with SSL support"
+       [ -z "$(openssl version)" ] && write_log 14 "Google Cloud DNS update requires openssl-utils"
+
+       # Argument parsing
+       [ -z ${param_opt} ] && ttl=3600 || ttl="${param_opt}"
+       [ $use_ipv6 -ne 0 ] && record_type="AAAA" || record_type="A"
+       parse_project_zone project zone
+
+       # Sanity checks
+       [ -z "${username}" ] && write_log 14 "Config is missing 'username' (service account name)"
+       [ -z "${password}" ] && write_log 14 "Config is missing 'password' (service account key)"
+       [ -z "${domain}" ] && write_log 14 "Config is missing 'domain'"
+       [ -z "${project}" ] && write_log 14 "Could not parse project name from 'param_enc'"
+       [ -z "${zone}" ] && write_log 14 "Could not parse zone name from 'param_enc'"
+       [ -z "${ttl}" ] && write_log 14 "Could not parse TTL from 'param_opt'"
+       [ -z "${record_type}" ] && write_log 14 "Could not determine the record type"
+
+       # Push the record!
+       access_token="$(get_access_token)"
+       patch_record_set "${access_token}" "${project}" "${zone}" "${domain}" "${record_type}" "${ttl}" "${__IP}"
+}
+
+main $@
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_godaddy_com_v1.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_godaddy_com_v1.sh
new file mode 100644 (file)
index 0000000..b8d527c
--- /dev/null
@@ -0,0 +1,172 @@
+#!/bin/sh
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#
+# script for sending updates to godaddy.com
+#.based on GoDaddy.sh v1.0 by Nazar78 @ TeaNazaR.com
+#.2017-2018 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+# GoDaddy Documentation at https://developer.godaddy.com/doc
+#
+# This script is parsed by dynamic_dns_functions.sh inside send_update() function
+#
+# using following options from /etc/config/ddns
+# option username - "key" as generated at https://developer.godaddy.com/keys/
+# option password - "secret" as generated at https://developer.godaddy.com/keys/
+# option domain   - "yourdomain.TLD" to update or "hostname@yourdomain.TLD"
+#
+# variable __IP already defined with the ip-address to use for update
+#
+
+# check parameters
+[ -z "$CURL" ] && [ -z "$CURL_SSL" ] && write_log 14 "GoDaddy communication require cURL with SSL support. Please install"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing key as 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing secret as 'password'"
+[ $use_https -eq 0 ] && use_https=1    # force HTTPS
+
+# used variables
+local __HOST __DOMAIN __TYPE __URL __PRGBASE __RUNPROG __DATA __IPV6
+
+# split __HOST __DOMAIN from $domain
+# given data:
+# @example.com for "domain record"
+# host.sub@example.com for a "host record"
+__HOST=$(printf %s "$domain" | cut -d@ -f1)
+__DOMAIN=$(printf %s "$domain" | cut -d@ -f2)
+
+# GoDaddy needs:
+# __DOMAIN = the base domain i.e. example.com
+# __HOST   = host.sub if updating a host record or
+# __HOST   = "@" urlencoded "%40" for a domain record
+[ -z "$__HOST" -o "$__HOST" = "$__DOMAIN" ] && __HOST="%40"
+
+# set record type
+[ $use_ipv6 -eq 0 ] && __TYPE="A" || __TYPE="AAAA"
+
+# now we know the url to use
+# __URL="https://api.ote-godaddy.com/v1/domains/$__DOMAIN/records/$__TYPE/$__HOST"     # api test server
+__URL="https://api.godaddy.com/v1/domains/$__DOMAIN/records/$__TYPE/$__HOST"           # production server
+
+# transfer function to use for godaddy
+# all needed variables are set global here
+# so we can use them directly
+godaddy_transfer() {
+       local __CNT=0
+       local __STATUS __ERR __DEVICE
+       while : ; do
+               write_log 7 "#> $__RUNPROG"
+               __STATUS=$(eval "$__RUNPROG")
+               __ERR=$?                        # save communication error
+               [ $__ERR -eq 0 ] && break       # no error break while
+
+               write_log 4 "cURL error: '$__ERR'"
+               write_log 7 "$(cat $ERRFILE)"           # report error
+
+               [ $VERBOSE_MODE -gt 1 ] && {
+                       # VERBOSE_MODE > 1 then NO retry
+                       write_log 4 "Transfer failed - Verbose Mode: $VERBOSE_MODE - NO retry on error"
+                       break
+               }
+
+               __CNT=$(( $__CNT + 1 )) # increment error counter
+               # if error count > retry_count leave here
+               [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && \
+                       write_log 14 "Transfer failed after $retry_count retries"
+
+               write_log 4 "Transfer failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds"
+               sleep $RETRY_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP # enable trap-handler
+               PID_SLEEP=0
+       done
+
+       # handle HTTP error
+       [ $__STATUS -ne 200 ] && {
+               write_log 4 "GoDaddy reported an error:"
+               write_log 7 "$(cat $DATFILE)"
+               return 1
+       }
+       return 0
+}
+
+# Build base command to use
+__PRGBASE="$CURL -RsS -w '%{http_code}' -o $DATFILE --stderr $ERRFILE"
+# force network/interface-device to use for communication
+if [ -n "$bind_network" ]; then
+       local __DEVICE
+       network_get_physdev __DEVICE $bind_network || \
+               write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'"
+       write_log 7 "Force communication via device '$__DEVICE'"
+       __PRGBASE="$__PRGBASE --interface $__DEVICE"
+fi
+# force ip version to use
+if [ $force_ipversion -eq 1 ]; then
+       [ $use_ipv6 -eq 0 ] && __PRGBASE="$__PRGBASE -4" || __PRGBASE="$__PRGBASE -6"   # force IPv4/IPv6
+fi
+# set certificate parameters
+if [ "$cacert" = "IGNORE" ]; then      # idea from Ticket #15327 to ignore server cert
+       __PRGBASE="$__PRGBASE --insecure"       # but not empty better to use "IGNORE"
+elif [ -f "$cacert" ]; then
+       __PRGBASE="$__PRGBASE --cacert $cacert"
+elif [ -d "$cacert" ]; then
+       __PRGBASE="$__PRGBASE --capath $cacert"
+elif [ -n "$cacert" ]; then            # it's not a file and not a directory but given
+       write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
+fi
+# disable proxy if no set (there might be .wgetrc or .curlrc or wrong environment set)
+# or check if libcurl compiled with proxy support
+if [ -z "$proxy" ]; then
+       __PRGBASE="$__PRGBASE --noproxy '*'"
+elif [ -z "$CURL_PROXY" ]; then
+       # if libcurl has no proxy support and proxy should be used then force ERROR
+       write_log 13 "cURL: libcurl compiled without Proxy support"
+fi
+# set headers
+__PRGBASE="$__PRGBASE --header 'Authorization: sso-key $username:$password' "
+__PRGBASE="$__PRGBASE --header 'Accept: application/json' "
+__PRGBASE="$__PRGBASE --header 'Content-Type: application/json; charset=utf-8' "
+
+# read data from godaddy.com
+__RUNPROG="$__PRGBASE --request GET $__URL"
+godaddy_transfer || return 1
+
+# HTTP 200 OK, now analyse data and check if update needed
+__DATA=$(sed -r 's/.+data":"(.+)","t.+/\1/g' $DATFILE)
+
+# check data
+[ $use_ipv6 -eq 0 ] \
+       && __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV4_REGEX") \
+       || __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV6_REGEX")
+
+# we got data so verify
+[ -n "$__DATA" ] && {
+       # expand IPv6 for compare
+       if [ $use_ipv6 -eq 1 ]; then
+               expand_ipv6 $__IP __IPV6
+               expand_ipv6 $__DATA __DATA
+               [ "$__DATA" = "$__IPV6" ] && {          # IPv6 no update needed
+                       write_log 7 "IPv6 at GoDaddy.com already up to date"
+                       return 0
+               }
+       else
+               [ "$__DATA" = "$__IP" ] && {            # IPv4 no update needed
+                       write_log 7 "IPv4 at GoDaddy.com already up to date"
+                       return 0
+               }
+       fi
+}
+
+# update is needed
+# let's build data to send,
+# use file to work around double quotes '"' needed for json
+cat > $DATFILE << EOF
+[{"data":"$__IP"}]
+EOF
+
+# let's complete transfer command
+__RUNPROG="$__PRGBASE --request PUT --data @$DATFILE $__URL"
+
+godaddy_transfer || return 1
+
+# HTTP 200 OK
+return 0
+
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_luadns_v1.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_luadns_v1.sh
new file mode 100644 (file)
index 0000000..5d7954e
--- /dev/null
@@ -0,0 +1,191 @@
+#!/bin/sh
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#.2023 Jihoon Han <rapid_renard@renard.ga>
+#
+#.based on Christian Schoenebeck's update_cloudflare_com_v4.sh
+#.and on Neilpang's acme.sh found at https://github.com/acmesh-official/acme.sh
+#
+# Script for sending DDNS updates using the LuaDNS API
+# See: https://luadns.com/api
+#
+# using following options from /etc/config/ddns
+# option username - "Emaii" as registered on LuaDNS
+# option password - "API Key" as generated at https://api.luadns.com/api_keys
+# option domain   - The domain to update (e.g. my.example.com)
+#
+
+# check parameters
+[ -z "$CURL" ] && [ -z "$CURL_SSL" ] && write_log 14 "LuaDNS API require cURL with SSL support. Please install"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing e-mail as 'Username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing personal API key as 'Password'"
+[ $use_https -eq 0 ] && use_https=1    # force HTTPS
+
+# used variables
+local __HOST __DOMAIN __TYPE __URLBASE __PRGBASE __RUNPROG __DATA __IPV6 __ZONEID __RECID
+local __URLBASE="https://api.luadns.com/v1"
+local __TTL=300
+
+# set record type
+[ $use_ipv6 -eq 0 ] && __TYPE="A" || __TYPE="AAAA"
+
+# transfer function to use for LuaDNS
+# all needed variables are set global here
+# so we can use them directly
+luadns_transfer() {
+       local __CNT=0
+       local __STATUS __ERR
+       while : ; do
+               write_log 7 "#> $__RUNPROG"
+               __STATUS=$(eval "$__RUNPROG")
+               __ERR=$?                        # save communication error
+               [ $__ERR -eq 0 ] && break       # no error break while
+
+               write_log 3 "cURL Error: '$__ERR'"
+               write_log 7 "$(cat $ERRFILE)"           # report error
+
+               [ $VERBOSE_MODE -gt 1 ] && {
+                       # VERBOSE_MODE > 1 then NO retry
+                       write_log 4 "Transfer failed - Verbose Mode: $VERBOSE_MODE - NO retry on error"
+                       break
+               }
+
+               __CNT=$(( $__CNT + 1 )) # increment error counter
+               # if error count > retry_count leave here
+               [ $retry_count -gt 0 -a $__CNT -gt $retry_count ] && \
+                       write_log 14 "Transfer failed after $retry_count retries"
+
+               write_log 4 "Transfer failed - retry $__CNT/$retry_count in $RETRY_SECONDS seconds"
+               sleep $RETRY_SECONDS &
+               PID_SLEEP=$!
+               wait $PID_SLEEP # enable trap-handler
+               PID_SLEEP=0
+       done
+
+       # handle HTTP error
+       [ $__STATUS -ne 200 ] && {
+               write_log 4 "LuaDNS reported an error:"
+               write_log 7 "$(cat $DATFILE)"
+               return 1
+       }
+       return 0
+}
+
+# Build base command to use
+__PRGBASE="$CURL -RsS -w '%{http_code}' -o $DATFILE --stderr $ERRFILE"
+# force network/interface-device to use for communication
+if [ -n "$bind_network" ]; then
+       local __DEVICE
+       network_get_physdev __DEVICE $bind_network || \
+               write_log 13 "Can not detect local device using 'network_get_physdev $bind_network' - Error: '$?'"
+       write_log 7 "Force communication via device '$__DEVICE'"
+       __PRGBASE="$__PRGBASE --interface $__DEVICE"
+fi
+# force ip version to use
+if [ $force_ipversion -eq 1 ]; then
+       [ $use_ipv6 -eq 0 ] && __PRGBASE="$__PRGBASE -4" || __PRGBASE="$__PRGBASE -6"   # force IPv4/IPv6
+fi
+# set certificate parameters
+if [ "$cacert" = "IGNORE" ]; then      # idea from Ticket #15327 to ignore server cert
+       __PRGBASE="$__PRGBASE --insecure"       # but not empty better to use "IGNORE"
+elif [ -f "$cacert" ]; then
+       __PRGBASE="$__PRGBASE --cacert $cacert"
+elif [ -d "$cacert" ]; then
+       __PRGBASE="$__PRGBASE --capath $cacert"
+elif [ -n "$cacert" ]; then            # it's not a file and not a directory but given
+       write_log 14 "No valid certificate(s) found at '$cacert' for HTTPS communication"
+fi
+# disable proxy if not set (there might be .wgetrc or .curlrc or wrong environment set)
+# or check if libcurl compiled with proxy support
+if [ -z "$proxy" ]; then
+       __PRGBASE="$__PRGBASE --noproxy '*'"
+elif [ -z "$CURL_PROXY" ]; then
+       # if libcurl has no proxy support and proxy should be used then force ERROR
+       write_log 13 "cURL: libcurl compiled without Proxy support"
+fi
+# set headers
+__PRGBASE="$__PRGBASE --user '$username:$password' "
+__PRGBASE="$__PRGBASE --header 'Accept: application/json' "
+
+if [ -n "$zone_id" ]; then
+       __ZONEID="$zone_id"
+else
+       # read zone id for registered domain.TLD
+       __RUNPROG="$__PRGBASE --request GET '$__URLBASE/zones'"
+       luadns_transfer || return 1     
+       # extract zone id
+       i=1
+       while : ; do
+               h=$(printf "%s" "$domain" | cut -d . -f $i-100 -s)
+               [ -z "$h" ] && {
+                       write_log 4 "Could not detect 'Zone ID' for the domain provided: '$domain'"
+                       return 127
+               }
+
+               __ZONEID=$(grep -o -e "\"id\":[^,]*,\"name\":\"$h\"" $DATFILE | cut -d : -f 2 | cut -d , -f 1)
+               [ -n "$__ZONEID" ] && {
+                       # LuaDNS API needs:
+                       # __DOMAIN = the base domain i.e. example.com
+                       # __HOST   = the FQDN of record to modify
+                       # i.e. example.com for the "domain record" or host.sub.example.com for "host record"
+                       __HOST="$domain"
+                       __DOMAIN="$h"
+                       write_log 7 "Domain : '$__DOMAIN'"
+                       write_log 7 "Zone ID : '$__ZONEID'"
+                       write_log 7 "Host : '$__HOST'"
+                       break
+               }
+               i=$(expr "$i" + 1)
+       done
+fi
+
+# read record id for A or AAAA record of host.domain.TLD
+__RUNPROG="$__PRGBASE --request GET '$__URLBASE/zones/$__ZONEID/records'"
+luadns_transfer || return 1
+# extract record id
+__RECID=$(grep -o -e "\"id\":[^,]*,\"name\":\"$__HOST.\",\"type\":\"$__TYPE\"" $DATFILE | head -n 1 | cut -d : -f 2 | cut -d , -f 1)
+[ -z "$__RECID" ] && {
+       write_log 4 "Could not detect 'Record ID' for the domain provided: '$__HOST'"
+       return 127
+}
+write_log 7 "Record ID : '$__RECID'"
+
+# extract current stored IP
+__DATA=$(grep -o -e "\"id\":$__RECID,\"name\":\"$__HOST.\",\"type\":\"$__TYPE\",\"content\":[^,]*" $DATFILE | grep -o '[^"]*' | tail -n 1)
+
+# check data
+[ $use_ipv6 -eq 0 ] \
+       && __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV4_REGEX") \
+       || __DATA=$(printf "%s" "$__DATA" | grep -m 1 -o "$IPV6_REGEX")
+
+# we got data so verify
+[ -n "$__DATA" ] && {
+       # expand IPv6 for compare
+       if [ $use_ipv6 -eq 1 ]; then
+               expand_ipv6 $__IP __IPV6
+               expand_ipv6 $__DATA __DATA
+               [ "$__DATA" = "$__IPV6" ] && {          # IPv6 no update needed
+                       write_log 7 "IPv6 at LuaDNS already up to date"
+                       return 0
+               }
+       else
+               [ "$__DATA" = "$__IP" ] && {            # IPv4 no update needed
+                       write_log 7 "IPv4 at LuaDNS already up to date"
+                       return 0
+               }
+       fi
+}
+
+# update is needed
+# let's build data to send
+
+# use file to work around " needed for json
+cat > $DATFILE << EOF
+{"name":"$__HOST.","type":"$__TYPE","content":"$__IP","ttl":$__TTL}
+EOF
+
+# let's complete transfer command
+__RUNPROG="$__PRGBASE --request PUT --data @$DATFILE '$__URLBASE/zones/$__ZONEID/records/$__RECID'"
+luadns_transfer || return 1
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_no-ip_com.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_no-ip_com.sh
new file mode 100644 (file)
index 0000000..e13058b
--- /dev/null
@@ -0,0 +1,54 @@
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#
+# script for sending updates to no-ip.com / noip.com
+#.2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# This script is parsed by dynamic_dns_functions.sh inside send_update() function
+#
+# provider did not reactivate records, if no IP change was recognized
+# so we send a dummy (localhost) and a seconds later we send the correct IP addr
+#
+local __DUMMY
+local __UPDURL6="http://[USERNAME]:[PASSWORD]@dynupdate6.noip.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
+local __UPDURL="http://[USERNAME]:[PASSWORD]@dynupdate.noip.com/nic/update?hostname=[DOMAIN]&myip=[IP]"
+# inside url we need username and password
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+
+# set IP version dependend dummy (localhost)
+[ $use_ipv6 -eq 0 ] && __DUMMY="127.0.0.1" || __DUMMY="::1"
+[ $use_ipv6 -eq 0 ] && __UPDURL=$__UPDURL || __UPDURL=$__UPDURL6
+
+# lets do DUMMY transfer
+write_log 7 "sending dummy IP to 'no-ip.com'"
+__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
+                              -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__DUMMY#g")
+[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
+
+do_transfer "$__URL" || return 1
+
+write_log 7 "'no-ip.com' answered:${N}$(cat $DATFILE)"
+# analyse provider answers
+# "good [IP_ADR]"      = successful
+# "nochg [IP_ADR]"     = no change but OK
+grep -E "good|nochg" $DATFILE >/dev/null 2>&1 || return 1
+
+# lets wait a seconds
+sleep 1
+
+# now send the correct data
+write_log 7 "sending real IP to 'no-ip.com'"
+__URL=$(echo $__UPDURL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
+                              -e "s#\[DOMAIN\]#$domain#g" -e "s#\[IP\]#$__IP#g")
+[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
+
+do_transfer "$__URL" || return 1
+
+write_log 7 "'no-ip.com' answered:${N}$(cat $DATFILE)"
+# analyse provider answers
+# "good [IP_ADR]"      = successful
+# "nochg [IP_ADR]"     = no change but OK
+grep -E "good|nochg" $DATFILE >/dev/null 2>&1
+return $?      # "0" if "good" or "nochg" found
+
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_ns1_com.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_ns1_com.sh
new file mode 100644 (file)
index 0000000..4b96533
--- /dev/null
@@ -0,0 +1,77 @@
+#!/bin/sh
+# Derived from update_gandi_net.sh
+
+. /usr/share/libubox/jshn.sh
+
+local __ENDPOINT="https://api.nsone.net/v1"
+local __TTL=600
+local __RRTYPE
+local __URL
+local __STATUS
+
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing zone as 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing API Key as 'password'"
+
+[ $use_ipv6 -ne 0 ] && __RRTYPE="AAAA" || __RRTYPE="A"
+
+# Construct JSON payload
+json_init
+# {"answers":[{"answer":["1.1.1.1"]}]}
+json_add_array answers
+json_add_object
+json_add_array answer
+json_add_string "" "$__IP"
+json_close_array
+json_close_object
+json_close_array
+
+__URL="$__ENDPOINT/zones/$username/$domain/$__RRTYPE"
+
+__STATUS=$(curl -s -X POST "$__URL" \
+       -H "X-NSONE-Key: $password" \
+       -H "Content-Type: application/json" \
+       -d "$(json_dump)" \
+       -w "%{http_code}\n" -o $DATFILE 2>$ERRFILE)
+
+if [ $? -ne 0 ]; then
+       write_log 14 "Curl failed: $(cat $ERRFILE)"
+       return 1
+elif [ -z $__STATUS ] || [ $__STATUS != 200 ]; then
+       write_log 4 "Request failed: $__STATUS, NS1 answered: $(cat $DATFILE)"
+       if [ $__STATUS = 404 ]; then
+               write_log 4 "Status is 404, trying to create a DNS record"
+
+               json_init
+               json_add_string "zone" "$username"
+               json_add_string "domain" "$domain"
+               json_add_string "type" "$__RRTYPE"
+               json_add_string "ttl" "$__TTL"
+               json_add_array answers
+               json_add_object
+               json_add_array answer
+               json_add_string "" "$__IP"
+               json_close_array
+               json_close_object
+               json_close_array
+
+               __STATUS=$(curl -s -X PUT "$__URL" \
+                       -H "X-NSONE-Key: $password" \
+                       -H "Content-Type: application/json" \
+                       -d "$(json_dump)" \
+                       -w "%{http_code}\n" -o $DATFILE 2>$ERRFILE)
+
+               if [ $? -ne 0 ]; then
+                       write_log 14 "Curl failed: $(cat $ERRFILE)"
+                       return 1
+               elif [ -z $__STATUS ] || [ $__STATUS != 200 ]; then
+                       write_log 14 "Request failed: $__STATUS, NS1 answered: $(cat $DATFILE)"
+                       return 1
+               fi
+       else
+               return 1
+       fi
+fi
+
+write_log 7 "NS1 answered: $(cat $DATFILE)"
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_nsupdate.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_nsupdate.sh
new file mode 100644 (file)
index 0000000..039196f
--- /dev/null
@@ -0,0 +1,48 @@
+#
+#.Distributed under the terms of the GNU General Public License (GPL) version 2.0
+#
+# The script directly updates a PowerDNS (or maybe bind server) via nsupdate from bind-client package.
+#.based on github request #957 by Jan Riechers <de at r-jan dot de>
+#.2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# This script is parsed by dynamic_dns_functions.sh inside send_update() function
+#
+# using following options from /etc/config/ddns
+# option username   - keyname 
+# option password   - shared secret (base64 encoded)
+# option domain     - full qualified domain to update
+# option dns_server - DNS server to update
+#
+# variable __IP already defined with the ip-address to use for update
+#
+local __TTL=600                #.preset DNS TTL (in seconds)
+local __RRTYPE __PW __TCP
+local __PROG=$(command -v nsupdate)                    # BIND nsupdate ?
+[ -z "$__PROG" ] && __PROG=$(command -v knsupdate)     # Knot nsupdate ?
+
+[ -z "$__PROG" ]     && write_log 14 "'nsupdate' or 'knsupdate' not installed !"
+[ -z "$username" ]   && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ]   && write_log 14 "Service section not configured correctly! Missing 'password'"
+[ -z "$dns_server" ] && write_log 14 "Service section not configured correctly! Missing 'dns_server'"
+
+[ $use_ipv6 -ne 0 ] && __RRTYPE="AAAA" || __RRTYPE="A"
+[ $force_dnstcp -ne 0 ] && __TCP="-v" || __TCP=""
+
+# create command file
+cat >$DATFILE <<-EOF
+server $dns_server
+key $username $password
+update del $domain $__RRTYPE
+update add $domain $__TTL $__RRTYPE $__IP
+show
+send
+answer
+quit
+EOF
+
+$__PROG -d $__TCP $DATFILE >$ERRFILE 2>&1
+
+# nsupdate always return success
+write_log 7 "(k)nsupdate reports:${N}$(cat $ERRFILE)"
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_one_com.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_one_com.sh
new file mode 100644 (file)
index 0000000..94ec2ef
--- /dev/null
@@ -0,0 +1,142 @@
+#!/bin/sh
+
+# ONE.COM DDNS SCRIPT
+# REQUIRES CURL
+# $ opkg install curl
+
+# SCRIPT BY LUGICO
+# CONTACT: main@lugico.de
+
+[ -z "$CURL" ] && [ -z "$CURL_SSL" ] && write_log 14 "one.com communication require cURL with SSL support. Please install"
+[ -z "$domain" ]   && write_log 14 "Service section not configured correctly! Missing 'domain'"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+
+. /usr/share/libubox/jshn.sh
+
+write_log 0 "one.com ddns script started"
+
+local __SUBDOMAIN __MAINDOMAIN __LOGINURL __RECORDID
+local __TTL=3600
+
+COOKIEJAR=$(mktemp /tmp/one_com_cookiejar.XXXXXX) || exit 1
+
+__SUBDOMAIN=$(echo $domain | sed -e 's/[^\.]*\.[^\.]*$//' -e 's/\.$//' )
+__MAINDOMAIN=$(echo $domain | sed -e "s/${__SUBDOMAIN}\.//" )
+
+
+# LOGGING IN
+# GET LOGIN POST URL FROM FORM
+__LOGINURL=$( $CURL \
+       -RsSL \
+       --stderr $ERRFILE \
+       -c $COOKIEJAR \
+       "https://www.one.com/admin/" \
+       | grep 'Login-form login autofill' \
+       | sed -e 's/.*action="//' -e 's/".*//' -e 's/\&amp;/\&/g' \
+)
+
+# POST LOGIN DATA
+$CURL \
+       -RsSL \
+       --stderr $ERRFILE \
+       -c $COOKIEJAR \
+       -b $COOKIEJAR \
+       "${__LOGINURL}" \
+       -H "Content-Type: application/x-www-form-urlencoded" \
+       -X POST \
+       -d "username=${username}&password=${password}&credentialId=" \
+       | grep "Invalid username or password." > $DATFILE
+
+if [ "$?" == "0" ] ; then
+       write_log 14 "Invalid credentials"
+       return 1
+fi
+
+
+# SETTING DOMAIN
+$CURL -RsSL \
+       --stderr $ERRFILE \
+       -c $COOKIEJAR \
+       -b $COOKIEJAR \
+       "https://www.one.com/admin/select-admin-domain.do?domain=${__MAINDOMAIN}" \
+       | grep "<meta name=\"one.com:active-domain\" content=\"${__MAINDOMAIN}\"/>" > $DATFILE
+
+if [ "$?" != "0" ] ; then
+       write_log 14 "Failed to select domain '${__MAINDOMAIN}'"
+       return 1
+fi
+
+
+# GETTING RECORD ID
+records=$( $CURL \
+       -RsSL \
+       --stderr $ERRFILE \
+       -c $COOKIEJAR \
+       -b $COOKIEJAR \
+       "https://www.one.com/admin/api/domains/${__MAINDOMAIN}/dns/custom_records"
+)
+
+json_load "$records"
+
+if json_is_a "result" "object" && \
+       json_select "result" && \
+       json_is_a "data" "array"
+then
+       json_select "data"
+       i=1
+       while json_is_a ${i} "object" ; do
+               json_select "${i}"
+               json_select "attributes"
+               json_get_var "prefix" "prefix"
+               json_close_object
+               if [ "$prefix" == "$__SUBDOMAIN" ] ; then
+                       json_get_var "__RECORDID" "id"
+                       write_log 0 "Found record id : ${__RECORDID}"
+                       break
+               fi
+               json_close_object
+               i=$(($i + 1))
+       done
+fi
+
+
+if [ "${__RECORDID}" == "" ] ; then
+       write_log 14 "domain record not found"
+       return 1
+fi
+
+
+# CREATING PATCH DATA
+json_init
+json_add_string "type" "dns_service_records"
+json_add_string "id" "${__RECORDID}"
+json_add_object "attributes"
+json_add_string "type" "A"
+json_add_string "prefix" "${__SUBDOMAIN}"
+json_add_string "content" "${__IP}"
+json_add_int "ttl" ${__TTL}
+patchdata=$(json_dump)
+
+
+# SENDING PATCH
+$CURL \
+       -RsSL \
+       --stderr $ERRFILE \
+       -c $COOKIEJAR \
+       -b $COOKIEJAR \
+       -X PATCH \
+       -d "$patchdata" \
+       -H "Content-Type: application/json" \
+       "https://www.one.com/admin/api/domains/${__MAINDOMAIN}/dns/custom_records/${__RECORDID}" \
+       | grep "priority" > $DATFILE
+
+if [ "$?" != "0" ] ; then
+       write_log 14 "one.com gave an unexpected response"
+       return 1
+fi
+
+rm $COOKIEJAR
+write_log 0 "one.com ddns script finished without errors"
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_pdns.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_pdns.sh
new file mode 100755 (executable)
index 0000000..a19ed13
--- /dev/null
@@ -0,0 +1,63 @@
+#!/bin/sh
+# Derived from update_gandi_net.sh
+. /usr/share/libubox/jshn.sh
+
+local __TTL=600
+local __RRTYPE
+local __STATUS
+local __RNAME
+
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing subdomain as 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing API Key as 'password'"
+[ -z "$param_opt" ] && write_log 14 "Service section not configured correctly! Missing PowerDNS URL as 'Optional Parameter'(param_opt)"
+
+# Create endpoint from $param_opt
+# e.g. param_opt=http://127.0.0.1:8081
+local __ENDPOINT="$param_opt/api/v1/servers/localhost/zones"
+
+[ $use_ipv6 -ne 0 ] && __RRTYPE="AAAA" || __RRTYPE="A"
+
+# Make sure domain is period terminated
+if [ ${domain: -1} != '.' ]; then
+       domain="${domain}."
+fi
+if [ $username == '@' ]; then
+       __RNAME="$domain"
+else
+       __RNAME="$username.$domain"
+fi
+
+# Build JSON payload
+json_init
+json_add_array rrsets
+json_add_object
+       json_add_string name "$__RNAME"
+       json_add_string type "$__RRTYPE"
+       json_add_int ttl $__TTL
+       json_add_string changetype "REPLACE"
+       json_add_array records
+       json_add_object
+               json_add_string content "$__IP"
+               json_add_boolean disabled 0
+       json_close_object
+       json_close_array
+json_close_object
+json_close_array
+
+__STATUS=$(curl -Ss -X PATCH "$__ENDPOINT/$domain" \
+       -H "X-Api-Key: $password" \
+       -H "Content-Type: application/json" \
+       -d "$(json_dump)" \
+       -w "%{http_code}\n" \
+       -o $DATFILE 2>$ERRFILE)
+
+
+if [ $? -ne 0 ]; then
+       write_log 14 "Curl failed: $(cat $ERRFILE)"
+       return 1
+elif [ -z $__STATUS ] || [ $__STATUS != 204 ]; then
+       write_log 14 "PowerDNS request failed: $__STATUS \n$(cat $DATFILE)"
+       return 1
+fi
+
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_route53_v1.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_route53_v1.sh
new file mode 100644 (file)
index 0000000..0d47405
--- /dev/null
@@ -0,0 +1,96 @@
+#!/bin/sh
+# Distributed under the terms of the GNU General Public License (GPL) version 2.0
+# based on Yuval Adam's route53.sh found at https://github.com/yuvadm/route53-ddns/blob/master/route53.sh
+# 2017 Max Berger <max at berger dot name>
+
+[ -z "${CURL_SSL}" ] && write_log 14 "Amazon AWS Route53 communication require cURL with SSL support. Please install"
+[ -z "${username}" ] && write_log 14 "Service section not configured correctly! Missing key as 'username'"
+[ -z "${password}" ] && write_log 14 "Service section not configured correctly! Missing secret as 'password'"
+[ -z "${domain}" ] && write_log 14 "Service section not configured correctly! Missing zone id as 'domain'"
+
+ENDPOINT="route53.amazonaws.com"
+RECORD_TTL=300
+RECORD_NAME="${lookup_host}."
+RECORD_VALUE="${__IP}"
+[ ${use_ipv6} -eq 0 ] && RECORD_TYPE="A"
+[ ${use_ipv6} -eq 1 ] && RECORD_TYPE="AAAA"
+
+HOSTED_ZONE_ID="${domain}"
+API_PATH="/2013-04-01/hostedzone/${HOSTED_ZONE_ID}/rrset/"
+
+AWS_ACCESS_KEY_ID="${username}"
+AWS_SECRET_ACCESS_KEY="${password}"
+AWS_REGION='us-east-1'
+AWS_SERVICE='route53'
+
+hash() {
+    msg="$1"
+    echo -en "${msg}" | openssl dgst -sha256 | sed 's/^.* //'
+}
+
+sign_plain() {
+    # Sign message using a plaintext key
+    key="$1"
+    msg="$2"
+    echo -en "${msg}" | openssl dgst -hex -sha256 -hmac "${key}" | sed 's/^.* //'
+}
+
+sign() {
+    # Sign message using a hex formatted key
+    key="$1"
+    msg="$2"
+    echo -en "${msg}" | openssl dgst -hex -sha256 -mac HMAC -macopt "hexkey:${key}" | sed 's/^.* //'
+}
+
+request_body="<?xml version=\"1.0\" encoding=\"UTF-8\"?> \
+<ChangeResourceRecordSetsRequest xmlns=\"https://route53.amazonaws.com/doc/2013-04-01/\"> \
+<ChangeBatch> \
+   <Changes> \
+      <Change> \
+         <Action>UPSERT</Action> \
+         <ResourceRecordSet> \
+            <Name>${RECORD_NAME}</Name> \
+            <Type>${RECORD_TYPE}</Type> \
+            <TTL>${RECORD_TTL}</TTL> \
+            <ResourceRecords> \
+               <ResourceRecord> \
+                  <Value>${RECORD_VALUE}</Value> \
+               </ResourceRecord> \
+            </ResourceRecords> \
+         </ResourceRecordSet> \
+      </Change> \
+   </Changes> \
+</ChangeBatch> \
+</ChangeResourceRecordSetsRequest>"
+
+fulldate="$(date --utc +%Y%m%dT%H%M%SZ)"
+shortdate="$(date --utc +%Y%m%d)"
+signed_headers="host;x-amz-date"
+request_hash="$(hash "${request_body}")"
+canonical_request="POST\n${API_PATH}\n\nhost:route53.amazonaws.com\nx-amz-date:${fulldate}\n\n${signed_headers}\n${request_hash}"
+
+date_key="$(sign_plain "AWS4${AWS_SECRET_ACCESS_KEY}" "${shortdate}")"
+region_key="$(sign "${date_key}" ${AWS_REGION})"
+service_key="$(sign "${region_key}" ${AWS_SERVICE})"
+signing_key="$(sign "${service_key}" aws4_request)"
+
+credential="${shortdate}/${AWS_REGION}/${AWS_SERVICE}/aws4_request"
+sigmsg="AWS4-HMAC-SHA256\n${fulldate}\n${credential}\n$(hash "${canonical_request}")"
+
+signature="$(sign "${signing_key}" "${sigmsg}")"
+
+authorization="AWS4-HMAC-SHA256 Credential=${AWS_ACCESS_KEY_ID}/${credential}, SignedHeaders=${signed_headers}, Signature=${signature}"
+
+ANSWER="$(flock /tmp/$(basename -s .sh "$0").lock curl \
+    -X "POST" \
+    -H "Host: route53.amazonaws.com" \
+    -H "X-Amz-Date: ${fulldate}" \
+    -H "Authorization: ${authorization}" \
+    -H "Content-Type: text/xml" \
+    -d "$request_body" \
+    "https://${ENDPOINT}${API_PATH}")"
+write_log 7 "${ANSWER}"
+
+echo "${ANSWER}" | grep -F "Error" >/dev/null && return 1
+echo "${ANSWER}" | grep -F "ChangeInfo" >/dev/null && return 0
+return 2
diff --git a/package/network/services/ddns-scripts/files/usr/lib/ddns/update_transip_nl.sh b/package/network/services/ddns-scripts/files/usr/lib/ddns/update_transip_nl.sh
new file mode 100644 (file)
index 0000000..fe46987
--- /dev/null
@@ -0,0 +1,134 @@
+#!/bin/sh
+#
+# 2021 Martijn Atema <martijn@atema.one>
+#
+# This script sends ddns updates using the TransIP API (see https://api.transip.nl/)
+# and is parsed by dynamic_dns_functions.sh inside send_update().
+#
+# The following options provided by ddns are used:
+# username  - Username of account used for logging in to TransIP
+# password  - Private key generated at https://www.transip.nl/cp/account/api/
+#            (make sure to accept non-whitelisted IP addresses)
+# domain    - Base domain name registered at TransIP
+#             ('domain.tld' when updating 'hostname.domain.tld')
+# param_enc - Name of DNS record to update
+#             ('hostname' when updating 'hostname.domain.tld')
+# param_opt - TTL of the DNS record to update (in seconds)
+#
+# Note: Make sure that there is exactly one record of type A (for IPv4) or
+#       AAAA (for IPv6) with the specified name and TTL. That record will be
+#       updated by this script.
+#
+# The script requires cURL with SSL and the openssl binary
+
+
+[ -z "${username}" ] && write_log 14 "Service config is missing 'username'"
+[ -z "${password}" ] && write_log 14 "Service config is missing 'password' (private key)"
+[ -z "${domain}" ] && write_log 14 "Service config is missing 'domain' (base domain name)"
+[ -z "${param_enc}" ] && write_log 14 "Service config is missing 'param_enc' (DNS record name)"
+[ -z "${param_opt}" ] && write_log 14 "Service config is missing 'param_opt' (DNS record TTL)"
+
+[ -z "${CURL_SSL}" ] && write_log 14 "TransIP update requires cURL with SSL"
+[ -z "$(openssl version)" ] && write_log 14 "TransIP update requires openssl binary"
+
+. /usr/share/libubox/jshn.sh
+
+
+# Re-format the private key and write to a temporary file
+
+__tmp_keyfile="$(mktemp -t ddns-transip.XXXXXX)"
+
+echo "${password}" | \
+        sed -e "s/-----BEGIN PRIVATE KEY-----\s*/&\n/" \
+        -e "s/-----END PRIVATE KEY-----/\n&/" \
+        -e "s/\S\{64\}\s*/&\n/g" \
+        > "${__tmp_keyfile}"
+
+
+# Create authentication request
+
+json_init
+json_add_string "login" "${username}"
+json_add_string "label" "DDNS-script ($(openssl rand -hex 4))"
+json_add_string "nonce" $(openssl rand -hex 16)
+json_add_boolean "read_only" 0
+json_add_boolean "global_key" 1
+__auth_body="$(json_dump)"
+
+
+# Sign body using the private key and encode with base64
+
+__auth_signature=$(echo -n "${__auth_body}" | \
+        openssl dgst -sha512 -sign "${__tmp_keyfile}" | \
+        openssl base64 | \
+        tr -d " \t\n\r")
+
+rm "${__tmp_keyfile}"
+
+
+# Send and parse request for a temporary authentication token
+
+__auth_status=$(curl -s -X POST "https://api.transip.nl/v6/auth" \
+        -H "Content-Type: application/json" \
+        -H "Signature: ${__auth_signature}" \
+        -d "${__auth_body}" \
+        -w "%{http_code}\n" \
+        -o "${DATFILE}" 2>"${ERRFILE}")
+
+
+# Logging for error and debug
+
+if [ $? -ne 0 ]; then
+        write_log 14 "Curl failed: $(cat "${ERRFILE}")"
+        return 1
+fi
+
+if [ -z ${__auth_status} ] || [ ${__auth_status} -ne 201 ]; then
+        write_log 14 "TransIP authentication (status ${__auth_status}) failed: $(cat ${DATFILE})"
+        return 1
+fi
+
+write_log 7 "TransIP authentication successful"
+
+
+## Extract token from the response
+
+__auth_token=$(cat ${DATFILE} | sed 's/^.*"token" *: *"\([^"]*\)".*$/\1/')
+
+
+# Create request body for update
+
+json_init
+json_add_object "dnsEntry"
+json_add_string "name" "${param_enc}"
+json_add_string "type" "$([ $use_ipv6 -ne 0 ] && echo -n AAAA || echo -n A)"
+json_add_int "expire" "${param_opt}"
+json_add_string "content" "${__IP}"
+json_close_object
+__update_body="$(json_dump)"
+
+
+# Send update request
+
+__update_status=$(curl -s -X PATCH "https://api.transip.nl/v6/domains/${domain}/dns" \
+        -H "Content-Type: application/json" \
+        -H "Authorization: Bearer ${__auth_token}" \
+        -d "${__update_body}" \
+        -w "%{http_code}\n" \
+        -o "${DATFILE}" 2>"${ERRFILE}")
+
+
+# Logging for error and debug
+
+if [ $? -ne 0 ]; then
+        write_log 14 "Curl failed: $(cat "${ERRFILE}")"
+        return 1
+fi
+
+if [ -z ${__update_status} ] || [ ${__update_status} -ne 204 ]; then
+        write_log 14 "TransIP DNS update (status ${__update_status}) failed: $(cat ${DATFILE})"
+        return 1
+fi
+
+write_log 7 "TransIP DNS update successful"
+return 0
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/3322.org.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/3322.org.json
new file mode 100644 (file)
index 0000000..d166dc4
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "3322.org",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@members.3322.org/dyndns/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-basicauth.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-basicauth.json
new file mode 100644 (file)
index 0000000..b4f73fa
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "afraid.org-basicauth",
+       "ipv4": {
+               "url": "https://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
+       },
+       "ipv6": {
+               "url": "https://[USERNAME]:[PASSWORD]@freedns.afraid.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-keyauth.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-keyauth.json
new file mode 100644 (file)
index 0000000..166b004
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "afraid.org-keyauth",
+       "ipv4": {
+               "url": "https://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]"
+       },
+       "ipv6": {
+               "url": "https://freedns.afraid.org/dynamic/update.php?[PASSWORD]&address=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-v2-basic.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-v2-basic.json
new file mode 100644 (file)
index 0000000..436caf4
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "afraid.org-v2-basic",
+       "ipv4": {
+               "url": "https://[USERNAME]:[PASSWORD]@sync.afraid.org/u/?h=[DOMAIN]&ip=[IP]"
+       },
+       "ipv6": {
+               "url": "https://[USERNAME]:[PASSWORD]@v6.sync.afraid.org/u/?h=[DOMAIN]&ip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-v2-token.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/afraid.org-v2-token.json
new file mode 100644 (file)
index 0000000..0786dd8
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "afraid.org-v2-token",
+       "ipv4": {
+               "url": "https://sync.afraid.org/u/[PASSWORD]/?address=[IP]"
+       },
+       "ipv6": {
+               "url": "https://v6.sync.afraid.org/u/[PASSWORD]/?address=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/all-inkl.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/all-inkl.com.json
new file mode 100644 (file)
index 0000000..d0f5b73
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "all-inkl.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.kasserver.com/?myip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/bind-nsupdate.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/bind-nsupdate.json
new file mode 100644 (file)
index 0000000..f91806a
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "bind-nsupdate",
+       "ipv4": {
+               "url": "update_nsupdate.sh"
+       },
+       "ipv6": {
+               "url": "update_nsupdate.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/changeip.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/changeip.com.json
new file mode 100644 (file)
index 0000000..3472f0b
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "changeip.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@nic.changeip.com/nic/update?u=[USERNAME]&p=[PASSWORD]&cmd=update&hostname=[DOMAIN]&ip=[IP]",
+               "answer": "Successful"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/cloud.google.com-v1.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/cloud.google.com-v1.json
new file mode 100644 (file)
index 0000000..eee707b
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "name": "cloud.google.com-v1",
+       "ipv4": {
+               "url": "update_gcp_v1.sh"
+       },
+       "ipv6": {
+               "url": "update_gcp_v1.sh"
+       }
+}
+
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/cloudflare.com-v4.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/cloudflare.com-v4.json
new file mode 100644 (file)
index 0000000..66a1d11
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "cloudflare.com-v4",
+       "ipv4": {
+               "url": "update_cloudflare_com_v4.sh"
+       },
+       "ipv6": {
+               "url": "update_cloudflare_com_v4.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/cnkuai.cn.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/cnkuai.cn.json
new file mode 100644 (file)
index 0000000..1e9bebf
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "cnkuai.cn",
+       "ipv4": {
+               "url": "update_cnkuai_cn.sh"
+       },
+       "ipv6": {
+               "url": "update_cnkuai_cn.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/core-networks.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/core-networks.de.json
new file mode 100644 (file)
index 0000000..c334d77
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "core-networks.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.core-networks.de/?hostname=[DOMAIN]&myip=[IP]&keepipv6=1",
+               "answer": "good"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.core-networks.de/?hostname=[DOMAIN]&myip=[IP]&keepipv4=1",
+               "answer": "good"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/ddnss.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/ddnss.de.json
new file mode 100644 (file)
index 0000000..17cdf0e
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "ddnss.de",
+       "ipv4": {
+               "url": "http://ip4.ddnss.de/upd.php?user=[USERNAME]&pwd=[PASSWORD]&host=[DOMAIN]&ip=[IP]",
+               "answer": "Updated|No change"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/ddo.jp.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/ddo.jp.json
new file mode 100644 (file)
index 0000000..1cf53b5
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "ddo.jp",
+       "ipv4": {
+               "url": "http://free.ddo.jp/dnsupdate.php?dn=[DOMAIN]&pw=[PASSWORD]&ip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/desec.io.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/desec.io.json
new file mode 100644 (file)
index 0000000..c28458f
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "desec.io",
+       "ipv4": {
+               "url": "https://update.dedyn.io/update?username=[USERNAME]&password=[PASSWORD]&hostname=[DOMAIN]&myipv4=[IP]&myipv6=preserve",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "https://update.dedyn.io/update?username=[USERNAME]&password=[PASSWORD]&hostname=[DOMAIN]&myipv6=[IP]&myipv4=preserve",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dhis.org.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dhis.org.json
new file mode 100644 (file)
index 0000000..cc2ce3e
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "dhis.org",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@is.dhis.org/"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@is.dhis.org/"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/digitalocean.com-v2.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/digitalocean.com-v2.json
new file mode 100644 (file)
index 0000000..abeac56
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "digitalocean.com-v2",
+       "ipv4": {
+               "url": "update_digitalocean_com_v2.sh"
+       },
+       "ipv6": {
+               "url": "update_digitalocean_com_v2.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsdynamic.org.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsdynamic.org.json
new file mode 100644 (file)
index 0000000..f1fd181
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "dnsdynamic.org",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@www.dnsdynamic.org/api/?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsever.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsever.com.json
new file mode 100644 (file)
index 0000000..23f9ac9
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "dnsever.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyna.dnsever.com/update.php?host[[DOMAIN]]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsexit.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsexit.com.json
new file mode 100644 (file)
index 0000000..89d7a81
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "dnsexit.com",
+       "ipv4": {
+               "url": "http://update.dnsexit.com/RemoteUpdate.sv?login=[USERNAME]&password=[PASSWORD]&host=[DOMAIN]&myip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnshome.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnshome.de.json
new file mode 100644 (file)
index 0000000..f767de2
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "dnshome.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip=[IP]"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@www.dnshome.de/dyndns.php?hostname=[DOMAIN]&ip6=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsmadeeasy.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsmadeeasy.com.json
new file mode 100644 (file)
index 0000000..744301a
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "dnsmadeeasy.com",
+       "ipv4": {
+               "url": "http://cp.dnsmadeeasy.com/servlet/updateip?username=[USERNAME]&password=[PASSWORD]&id=[DOMAIN]&ip=[IP]",
+               "answer": "success|ip-same"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsmax.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsmax.com.json
new file mode 100644 (file)
index 0000000..e84667a
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "dnsmax.com",
+       "ipv4": {
+               "url": "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=1&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsomatic.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnsomatic.com.json
new file mode 100644 (file)
index 0000000..09df1eb
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "dnsomatic.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@updates.dnsomatic.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnspark.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnspark.com.json
new file mode 100644 (file)
index 0000000..f10e1f2
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "dnspark.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@control.dnspark.com/api/dynamic/update.php?hostname=[DOMAIN]&ip=[IP]",
+               "answer": "ok|nochange"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnspod.cn.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dnspod.cn.json
new file mode 100644 (file)
index 0000000..dcfa4a2
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "dnspod.cn",
+       "ipv4": {
+               "url": "update_dnspod_cn.sh"
+       },
+       "ipv6": {
+               "url": "update_dnspod_cn.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/do.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/do.de.json
new file mode 100644 (file)
index 0000000..3884a01
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "do.de",
+       "ipv4": {
+               "url": "http://ddns.do.de/?myip=[IP]&hostname=[DOMAIN]&username=[USERNAME]&password=[PASSWORD]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://ddns.do.de/?myip=[IP]&hostname=[DOMAIN]&username=[USERNAME]&password=[PASSWORD]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/domopoli.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/domopoli.de.json
new file mode 100644 (file)
index 0000000..517751c
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "domopoli.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@http://dyndns.domopoli.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/duckdns.org.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/duckdns.org.json
new file mode 100644 (file)
index 0000000..625c9f9
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "duckdns.org",
+       "ipv4": {
+               "url": "http://www.duckdns.org/update?domains=[DOMAIN]&token=[PASSWORD]&ip=[IP]",
+               "answer": "OK"
+       },
+       "ipv6": {
+               "url": "http://www.duckdns.org/update?domains=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]",
+               "answer": "OK"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/duiadns.net.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/duiadns.net.json
new file mode 100644 (file)
index 0000000..bbf9998
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "duiadns.net",
+       "ipv4": {
+               "url": "http://ip.duiadns.net/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip4=[IP]"
+       },
+       "ipv6": {
+               "url": "http://ip.duiadns.net/dynamic.duia?host=[DOMAIN]&password=[PASSWORD]&ip6=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dy.fi.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dy.fi.json
new file mode 100644 (file)
index 0000000..ce9e4fd
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "dy.fi",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@www.dy.fi/nic/update?hostname=[DOMAIN]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dyn.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dyn.com.json
new file mode 100644 (file)
index 0000000..0ac779b
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "dyn.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dyndns.it.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dyndns.it.json
new file mode 100644 (file)
index 0000000..2cffb34
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "dyndns.it",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@update.dyndns.it/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dyndns.org.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dyndns.org.json
new file mode 100644 (file)
index 0000000..a0c064f
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "dyndns.org",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@members.dyndns.org/v3/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dynu.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dynu.com.json
new file mode 100644 (file)
index 0000000..2c25ea9
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "dynu.com",
+       "ipv4": {
+               "url": "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myip=[IP]&username=[USERNAME]&password=[PASSWORD]"
+       },
+       "ipv6": {
+               "url": "http://api.dynu.com/nic/update?hostname=[DOMAIN]&myipv6=[IP]&username=[USERNAME]&password=[PASSWORD]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/dynv6.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/dynv6.com.json
new file mode 100644 (file)
index 0000000..66c62aa
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "dynv6.com",
+       "ipv4": {
+               "url": "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv4=[IP]",
+               "answer": "updated|unchanged"
+       },
+       "ipv6": {
+               "url": "http://dynv6.com/api/update?hostname=[DOMAIN]&token=[PASSWORD]&ipv6=[IP]",
+               "answer": "updated|unchanged"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/easydns.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/easydns.com.json
new file mode 100644 (file)
index 0000000..0642c38
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "easydns.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@api.cp.easydns.com/dyn/generic.php?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "OK|NOERROR"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@api.cp.easydns.com/dyn/generic.php?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "OK|NOERROR"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/freedns.42.pl.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/freedns.42.pl.json
new file mode 100644 (file)
index 0000000..c04dc1d
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "freedns.42.pl",
+       "ipv4": {
+               "url": "update_freedns_42_pl.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/gandi.net.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/gandi.net.json
new file mode 100644 (file)
index 0000000..de54a16
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "gandi.net",
+       "ipv4": {
+               "url": "update_gandi_net.sh"
+       },
+       "ipv6": {
+               "url": "update_gandi_net.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/godaddy.com-v1.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/godaddy.com-v1.json
new file mode 100644 (file)
index 0000000..211e0e5
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "godaddy.com-v1",
+       "ipv4": {
+               "url": "update_godaddy_com_v1.sh"
+       },
+       "ipv6": {
+               "url": "update_godaddy_com_v1.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/goip.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/goip.de.json
new file mode 100644 (file)
index 0000000..5aaf3ba
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "goip.de",
+       "ipv4": {
+               "url": "http://www.goip.de/setip?username=[USERNAME]&password=[PASSWORD]&subdomain=[DOMAIN]&ip=[IP]"
+       },
+       "ipv6": {
+               "url": "http://www.goip.de/setip?username=[USERNAME]&password=[PASSWORD]&subdomain=[DOMAIN]&ip6=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/google.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/google.com.json
new file mode 100644 (file)
index 0000000..edfe461
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "google.com",
+       "ipv4": {
+               "url": "https://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "https://[USERNAME]:[PASSWORD]@domains.google.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/he.net.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/he.net.json
new file mode 100644 (file)
index 0000000..7043efe
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "he.net",
+       "ipv4": {
+               "url": "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[DOMAIN]:[PASSWORD]@dyn.dns.he.net/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/hosting.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/hosting.de.json
new file mode 100644 (file)
index 0000000..c41ee35
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "hosting.de",
+       "ipv4": {
+               "url": "https://[USERNAME]:[PASSWORD]@ddns.hosting.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "https://[USERNAME]:[PASSWORD]@ddns.hosting.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/infomaniak.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/infomaniak.com.json
new file mode 100644 (file)
index 0000000..80541ac
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "infomaniak.com",
+       "ipv4": {
+               "url": "https://[USERNAME]:[PASSWORD]@infomaniak.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "https://[USERNAME]:[PASSWORD]@infomaniak.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/inwx.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/inwx.de.json
new file mode 100644 (file)
index 0000000..10b16a9
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "inwx.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.inwx.com/nic/update?myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.inwx.com/nic/update?myipv6=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/ipnodns.ru.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/ipnodns.ru.json
new file mode 100644 (file)
index 0000000..026caa1
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "ipnodns.ru",
+       "ipv4": {
+               "url": "https://ipnodns.ru/cgi-bin/dyndns.cgi?login=[USERNAME]&secret=[PASSWORD]",
+               "answer": "ok"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/joker.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/joker.com.json
new file mode 100644 (file)
index 0000000..af897f1
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "joker.com",
+       "ipv4": {
+               "url": "http://svc.joker.com/nic/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=[DOMAIN]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/loopia.se.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/loopia.se.json
new file mode 100644 (file)
index 0000000..f1c3fc2
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "loopia.se",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@dns.loopia.se/XDynDNSServer/XDynDNS.php?system=custom&hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/luadns.com-v1.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/luadns.com-v1.json
new file mode 100644 (file)
index 0000000..c77d55b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "luadns.com-v1",
+       "ipv4": {
+               "url": "update_luadns_v1.sh"
+       },
+       "ipv6": {
+               "url": "update_luadns_v1.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/moniker.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/moniker.com.json
new file mode 100644 (file)
index 0000000..c5b7aa9
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "moniker.com",
+       "ipv4": {
+               "url": "https://dynamicdns.key-systems.net/update.php?hostname=[DOMAIN]&password=[PASSWORD]&ip=[IP]",
+               "answer": "success"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/mydns.jp.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/mydns.jp.json
new file mode 100644 (file)
index 0000000..11e9887
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "mydns.jp",
+       "ipv4": {
+               "url": "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV4ADDR=[IP]"
+       },
+       "ipv6": {
+               "url": "http://www.mydns.jp/directip.html?MID=[USERNAME]&PWD=[PASSWORD]&IPV6ADDR=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/myonlineportal.net.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/myonlineportal.net.json
new file mode 100644 (file)
index 0000000..b3196d6
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "myonlineportal.net",
+       "ipv4": {
+               "url": "http://myonlineportal.net/updateddns?hostname=[DOMAIN]&ip=[IP]&username=[USERNAME]&password=[PASSWORD]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://myonlineportal.net/updateddns?hostname=[DOMAIN]&ip6=[IP]&username=[USERNAME]&password=[PASSWORD]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/mythic-beasts.com-v2.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/mythic-beasts.com-v2.json
new file mode 100644 (file)
index 0000000..e246223
--- /dev/null
@@ -0,0 +1,9 @@
+{
+        "name": "mythic-beasts.com (API v2)",
+        "ipv4": {
+                "url": "https://[USERNAME]:[PASSWORD]@ipv4.api.mythic-beasts.com/dns/v2/dynamic/[DOMAIN]"
+        },
+        "ipv6": {
+                "url": "https://[USERNAME]:[PASSWORD]@ipv6.api.mythic-beasts.com/dns/v2/dynamic/[DOMAIN]"
+        }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/mythic-beasts.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/mythic-beasts.com.json
new file mode 100644 (file)
index 0000000..9b2556b
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "mythic-beasts.com",
+       "ipv4": {
+               "url": "http://dnsapi4.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20A%20DYNAMIC_IP&origin=."
+       },
+       "ipv6": {
+               "url": "http://dnsapi6.mythic-beasts.com/?domain=[USERNAME]&password=[PASSWORD]&command=REPLACE%20[DOMAIN]%2060%20AAAA%20DYNAMIC_IP&origin=."
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/namecheap.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/namecheap.com.json
new file mode 100644 (file)
index 0000000..bbb0c1f
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "namecheap.com",
+       "ipv4": {
+               "url": "http://dynamicdns.park-your-domain.com/update?host=[USERNAME]&domain=[DOMAIN]&password=[PASSWORD]&ip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/njal.la.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/njal.la.json
new file mode 100644 (file)
index 0000000..5da8850
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "njal.la",
+       "ipv4": {
+               "url": "https://njal.la/update/?h=[DOMAIN]&k=[PASSWORD]&a=[IP]"
+       },
+       "ipv6": {
+               "url": "https://njal.la/update/?h=[DOMAIN]&k=[PASSWORD]&aaaa=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/no-ip.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/no-ip.com.json
new file mode 100644 (file)
index 0000000..e0f8ccb
--- /dev/null
@@ -0,0 +1,10 @@
+{
+       "name": "no-ip.com",
+       "ipv4": {
+               "url": "update_no-ip_com.sh"
+       },
+       "ipv6": {
+               "url": "update_no-ip_com.sh"
+       }
+}
+
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/no-ip.pl.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/no-ip.pl.json
new file mode 100644 (file)
index 0000000..323a415
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "no-ip.pl",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@update.no-ip.pl/?hostname=[DOMAIN]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/now-dns.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/now-dns.com.json
new file mode 100644 (file)
index 0000000..8c4a220
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "now-dns.com",
+       "ipv4": {
+               "url": "https://[USERNAME]:[PASSWORD]@now-dns.com/update?hostname=[DOMAIN]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "https://[USERNAME]:[PASSWORD]@now-dns.com/update?hostname=[DOMAIN]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/ns1.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/ns1.com.json
new file mode 100644 (file)
index 0000000..93484b6
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "ns1.com",
+       "ipv4": {
+               "url": "update_ns1_com.sh"
+       },
+       "ipv6": {
+               "url": "update_ns1_com.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/nsupdate.info.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/nsupdate.info.json
new file mode 100644 (file)
index 0000000..435e41d
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "nsupdate.info",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@ipv4.nsupdate.info/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@ipv6.nsupdate.info/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/one.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/one.com.json
new file mode 100644 (file)
index 0000000..9245a73
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "one.com",
+       "ipv4": {
+               "url": "update_one_com.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/opendns.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/opendns.com.json
new file mode 100644 (file)
index 0000000..35d4953
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name":"opendns.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@updates.opendns.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/oray.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/oray.com.json
new file mode 100644 (file)
index 0000000..3172805
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "oray.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@ddns.oray.com/ph/update?hostname=[DOMAIN]&myip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/ovh.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/ovh.com.json
new file mode 100644 (file)
index 0000000..92f2066
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "ovh.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@www.ovh.com/nic/update?system=dyndns&hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/pdns.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/pdns.json
new file mode 100644 (file)
index 0000000..aa6faa6
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "PowerDNS",
+       "ipv4": {
+               "url": "update_pdns.sh"
+       },
+       "ipv6": {
+               "url": "update_pdns.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/regfish.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/regfish.de.json
new file mode 100644 (file)
index 0000000..9b17995
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "regfish.de",
+       "ipv4": {
+               "url": "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv4=[IP]",
+               "answer": "success|100|101"
+       },
+       "ipv6": {
+               "url": "http://dyndns.regfish.de/?fqdn=[DOMAIN]&forcehost=1&authtype=secure&token=[PASSWORD]&ipv6=[IP]",
+               "answer": "success|100|101"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/route53-v1.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/route53-v1.json
new file mode 100644 (file)
index 0000000..bf5d8d3
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "route53-v1",
+       "ipv4": {
+               "url": "update_route53_v1.sh"
+       },
+       "ipv6": {
+               "url": "update_route53_v1.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/schokokeks.org.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/schokokeks.org.json
new file mode 100644 (file)
index 0000000..480c069
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "schokokeks.org",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.schokokeks.org/nic/update?myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/selfhost.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/selfhost.de.json
new file mode 100644 (file)
index 0000000..0db3895
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "selfhost.de",
+       "ipv4": {
+               "url": "http://carol.selfhost.de/update?username=[USERNAME]&password=[PASSWORD]&myip=[IP]&hostname=1",
+               "answer": "good|nochg|200|204"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/simply.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/simply.com.json
new file mode 100644 (file)
index 0000000..5ab9c8d
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "simply.com",
+       "ipv4": {
+               "url": "https://[USERNAME]:[PASSWORD]@api.simply.com/2/ddns/?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "https://[USERNAME]:[PASSWORD]@api.simply.com/2/ddns/?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/sitelutions.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/sitelutions.com.json
new file mode 100644 (file)
index 0000000..a9fec1f
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "sitelutions.com",
+       "ipv4": {
+               "url": "https://dnsup.sitelutions.com/dnsup?user=[USERNAME]&pass=[PASSWORD]&id=[DOMAIN]&ip=[IP]",
+               "answer": "success"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/spdyn.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/spdyn.de.json
new file mode 100644 (file)
index 0000000..a9352ef
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "spdyn.de",
+       "ipv4": {
+               "url": "https://update.spdyn.de/nic/update?hostname=[DOMAIN]&myip=[IP]&user=[USERNAME]&pass=[PASSWORD]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "https://update.spdyn.de/nic/update?hostname=[DOMAIN]&myip=[IP]&user=[USERNAME]&pass=[PASSWORD]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/strato.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/strato.com.json
new file mode 100644 (file)
index 0000000..9ab43d2
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "strato.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.strato.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.strato.com/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/system-ns.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/system-ns.com.json
new file mode 100644 (file)
index 0000000..4c4ca7f
--- /dev/null
@@ -0,0 +1,8 @@
+{
+       "name": "system-ns.com",
+
+       "ipv4": {
+               "url": "http://system-ns.com/api?type=dynamic&command=set&domain=[DOMAIN]&token=[PASSWORD]&ip=[IP]",
+               "answer": "0"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/thatip.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/thatip.com.json
new file mode 100644 (file)
index 0000000..18e72b7
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "thatip.com",
+       "ipv4": {
+               "url": "http://update.dnsmax.com/update/?username=[USERNAME]&password=[PASSWORD]&resellerid=2&clientname=openwrt&clientversion=8.09&protocolversion=2.0&updatehostname=[DOMAIN]&ip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/transip.nl.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/transip.nl.json
new file mode 100644 (file)
index 0000000..1dabb4f
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "transip.nl",
+       "ipv4": {
+               "url": "update_transip_nl.sh"
+       },
+       "ipv6": {
+               "url": "update_transip_nl.sh"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/twodns.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/twodns.de.json
new file mode 100644 (file)
index 0000000..2d20e76
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "twodns.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@update.twodns.de/update?hostname=[DOMAIN]&ip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/udmedia.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/udmedia.de.json
new file mode 100644 (file)
index 0000000..fa9ff4c
--- /dev/null
@@ -0,0 +1,9 @@
+{
+       "name": "udmedia.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@www.udmedia.de/nic/update?myip=[IP]"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@www.udmedia.de/nic/update?myip=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/variomedia.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/variomedia.de.json
new file mode 100644 (file)
index 0000000..fa86f4e
--- /dev/null
@@ -0,0 +1,11 @@
+{
+       "name": "variomedia.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       },
+       "ipv6": {
+               "url": "http://[USERNAME]:[PASSWORD]@dyndns.variomedia.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/xlhost.de.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/xlhost.de.json
new file mode 100644 (file)
index 0000000..302cdc6
--- /dev/null
@@ -0,0 +1,7 @@
+{
+       "name": "xlhost.de",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@nsupdate.xlhost.de/nic/update?hostname=[DOMAIN]&myip=[IP]",
+               "answer": "good|nochg"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/default/zoneedit.com.json b/package/network/services/ddns-scripts/files/usr/share/ddns/default/zoneedit.com.json
new file mode 100644 (file)
index 0000000..dd3c226
--- /dev/null
@@ -0,0 +1,6 @@
+{
+       "name": "zoneedit.com",
+       "ipv4": {
+               "url": "http://[USERNAME]:[PASSWORD]@dynamic.zoneedit.com/auth/dynamic.html?host=[DOMAIN]&dnsto=[IP]"
+       }
+}
diff --git a/package/network/services/ddns-scripts/files/usr/share/ddns/list b/package/network/services/ddns-scripts/files/usr/share/ddns/list
new file mode 100644 (file)
index 0000000..88d369c
--- /dev/null
@@ -0,0 +1,68 @@
+3322.org
+afraid.org-basicauth
+afraid.org-keyauth
+afraid.org-v2-basic
+afraid.org-v2-token
+all-inkl.com
+changeip.com
+core-networks.de
+ddnss.de
+ddo.jp
+desec.io
+dhis.org
+dnsdynamic.org
+dnsever.com
+dnsexit.com
+dnshome.de
+dnsmadeeasy.com
+dnsmax.com
+dnsomatic.com
+dnspark.com
+do.de
+domopoli.de
+duckdns.org
+duiadns.net
+dy.fi
+dyn.com
+dyndns.it
+dyndns.org
+dynu.com
+dynv6.com
+easydns.com
+goip.de
+google.com
+he.net
+hosting.de
+infomaniak.com
+ipnodns.ru
+inwx.de
+joker.com
+loopia.se
+moniker.com
+mydns.jp
+myonlineportal.net
+mythic-beasts.com
+mythic-beasts.com-v2
+namecheap.com
+njal.la
+no-ip.pl
+now-dns.com
+nsupdate.info
+opendns.com
+oray.com
+ovh.com
+regfish.de
+schokokeks.org
+selfhost.de
+simply.com
+sitelutions.com
+spdyn.de
+strato.com
+system-ns.com
+thatip.com
+transip.nl
+twodns.de
+udmedia.de
+variomedia.de
+xlhost.de
+zoneedit.com
diff --git a/package/network/services/ddns-scripts/samples/ddns.config_sample b/package/network/services/ddns-scripts/samples/ddns.config_sample
new file mode 100644 (file)
index 0000000..46bd8ab
--- /dev/null
@@ -0,0 +1,319 @@
+#
+#
+# Here you find a description on every parameter supported
+# and used by ddns-scripts and corresponding LuCI application
+#
+# Inside your ddns configuration file (/etc/config/ddns)
+# you might not find some of below described options.
+# This is because you don't need to define options
+# if using there defaults. The LuCI application will delete
+# options that configured to there default values.
+#
+# If you have a working ddns configuration from old ddns-scripts (Version 1.x)
+# everything will function the same with new scripts
+# without any changes to the configuration.
+#
+# If you like to use this file for your configuration then
+# use a copy, because the used software to modify the
+# configuration files will throw away all empty lines
+# and those starting with # (comments).
+#
+
+#####################################################################
+# Global application settings
+#
+config ddns "global"
+
+       ###########
+       # set date format to use for display date in logfiles
+       # and LuCI web application.
+       # For codes see man pages of date command.
+       # default: "%F %R" (ISO 8601 format)
+#      option ddns_dateformat "%F %R"
+
+       ###########
+       # set run directory to use for .pid and .update files
+       # there will be a separate file for every running service section
+       # default: "/var/run/ddns"
+#      option ddns_rundir "/var/run/ddns"
+
+       ###########
+       # set log directory to use for .log files
+       # there will be a separate file for every running service section
+       # default: "/var/log/ddns"
+#      option ddns_logdir "/var/log/ddns"
+
+       ###########
+       # set number of lines stored in .log file before auto truncated
+       # default: "250" lines
+#      option ddns_loglines "250"
+
+       ###########
+       # Whether to allow to send Private/Special IP's to the DDNS provider
+       # IPv4: 0.x, 10.x, 127.x, 172.16.x-172.31.x, 192.168.x
+       # IPv6: ::, Fxxx:
+       # default: "0"  disabled
+#      option upd_privateip "0"
+
+#####################################################################
+# DDNS service settings
+#
+# for each service you want to serve you need a separate configuration
+# if you need IPv4 and IPv6 you need to setup 2 separate configurations
+# with different names. (i.e. "myddns_ipv4" and "myddns_ipv6")
+# do not use white-spaces or dashes "-" or "@" ":" "!" or
+# other special characters inside name.
+config service "myddns"
+
+       ########### Basic settings ########################
+
+       ###########
+       # enable/disable this service section
+       # default: "0"  disabled
+       option enabled "0"
+
+       ###########
+       # detecting/sending IPv4 or IPv6 address to the DDNS provider
+       # set to "1" if you want to use IPv6
+       # default: "0"  use IPv4
+       option use_ipv6 "0"
+
+       ###########
+       # defines the network as defined in /etc/config/network
+       # to be monitored for up/down events to start via hotplug
+       default: "wan"  for IPv4
+       default: "wan6" for IPv6
+       option interface "wan"
+
+       ###########
+       # Next you need to specify the name of the service you are
+       # connecting to "eg. dyndns.org".  The format of the update
+       # urls for several different dynamic dns services is specified
+       # in the "/usr/lib/ddns/services" file for IPv4 and in
+       # "/usr/lib/ddns/service_ipv6" file. This list is hardly complete
+       # as there are many, many different dynamic dns services.
+       # If your service is on the list you can merely specify it with the
+       # "service_name" option.  Otherwise you will need to determine
+       # the format of the url to update with.  You can either add an
+       # entry to the "/usr/lib/ddns/services" or "services_ipv6" file
+       # or specify this with the "update_url" option.
+       # If your ddns provider doesn't work with ddns-scripts because
+       # there are additional parameters or other special thinks to be done,
+       # then you could write your own script to send updates to your ddns provider.
+       # Have a look into /usr/lib/ddns/update_sample.sh
+       # The script is specified in "update_script"
+       # Either set "service_name" or one of "update_url" and "update_script"
+       # default: none
+       option service_name "dyndns.org"
+
+       # sample:
+       # "http://[USERNAME]:[PASSWORD]@members.dyndns.org/nic/update?hostname=[DOMAIN]&myip=[IP]"
+#      option update_url   ""
+
+       # sample:
+       # "/usr/lib/ddns/update_sample.sh"
+#      option update_script   ""
+
+       ###########
+       # Keep an eye on providers help pages.
+       #
+       # FQDN of ONE of your defined host at DDNS provider
+       # REQUIRED to verify what the current IP at DNS using nslookup/host command
+       # default: none
+       option lookup_host ""
+
+       # Your DNS name / replace [DOMAIN] in update_url
+       # default: none
+       option domain ""
+
+       # Username of your DDNS service account / replace [USERNAME] in update_url
+       # default: none
+       option username ""
+
+       # Password of your DDNS service account / replace [PASSWORD] in update url
+       # default: none
+       option password ""
+
+       ###########
+       # Optional parameters for use inside update_url
+       #
+       # parameter that will be urlencoded before replacement of [PARAMENC] inside update url
+       # default: none
+       option param_enc ""
+
+       # parameter that repace [PARAMOPT] inside update url
+       # default: none
+       option param_opt ""
+
+       ###########
+       # use HTTPS for secure communication with you DDNS provider
+       # personally found some providers having problems when not sending
+       # updates via HTTPS. You must not specify "https://" in update_url.
+       # It's modified by the scripts themselves
+       # Needs GNU Wget (with SSL support) or cURL to be installed.
+       # default: "0"  do not use HTTPS
+       option use_https "0"
+
+       # if using HTTPS (see above) the transfer program tries to verify
+       # the providers server certificate. For verification there needs to be
+       # the counterpart on this machine. Specify the path or path/file where
+       # the transfer program can find them. (might need package CA-certificates)
+       # if you don't want to verify servers certificate (insecure) you should
+       # this parameter to "IGNORE" (in capital letters)
+       # default: (none)       path where CA-certificate package is installed
+       option cacert "/etc/ssl/certs"
+
+       ###########
+       # for logging and control if everything work fine you can get information inside
+       # system log . Critical Errors are always send to system log.
+       # You can define which information you like to log
+       # 1 == info, notice, warning, errors
+       # 2 == notice, warning, errors
+       # 3 == warning, errors
+       # 4 == errors
+       # default: "0" off
+       option use_syslog  "0"
+
+       ###########
+       # for logging and control if everything work fine you can get information inside
+       # log file. You find the file per default in /var/log/ddns/[sectionname].log
+       # The path can be modified for all log files in ddns.global section (see above)
+       # default: "1" on
+       option use_logfile "1"
+
+       ########### Advanced settings #####################
+
+       ###########
+       # you need to specify how ddns-scripts should detect you current local ip.
+       # the ip_source could be set to "network", "web", "interface" or "script"
+       # the parameters below specifying the additional information needed for
+       # the corresponding ip_spource configuration
+       # default: "network"
+
+       # ip_source "network" additional uses option ip_network and detects the
+       # current local ip on network as defined in /etc/config/network
+       # default: "wan"  using IPv4
+       # default: "wan6" using IPv6
+       option ip_source  "network"
+       option ip_network "wan"
+
+       # ip_source "web" additional uses option ip_url and detects the current
+       # local ip from special web sides that response with the ip address of
+       # calling host. If you are behind a firewall/NAT this is the best option
+       # since none of the local networks or interfaces will have the external ip.
+       # default: "http://checkip.dyndns.com"   using IPv4
+       # default: "http://checkipv6.dyndns.com" using IPv6
+#      option ip_source "web"
+#      option ip_url    "http://checkip.dyndns.com"
+
+       # ip_source "interface" additional uses option ip_interface
+       # ip_source "interface" uses one of the locally installed physical interfaces
+       # to detect independent from network they configured to.
+       # default: none
+#      option ip_source    "interface"
+#      option ip_interface "eth1"
+
+       # ip_source "script" additional uses option ip_script
+       # it's useful if you want to write your own script to detect the
+       # current local ip. put full path into ip_script option.
+       # The script must be executable.
+       # default: none
+#      option ip_source "script"
+#      option ip_script ""
+
+       # This option can be used in combination with ip_source "web" and ip_url.
+       # It adds a given user agent string to the request.
+       # Will only be used when wget or wget-ssl is installed.
+#      option user_agent "Mozilla/5.0 (Windows NT 10.0; rv:91.0) Gecko/20100101 Firefox/95.0"
+
+       ###########
+       # force_ipversion option will set the "-4" respectively "-6" parameter
+       # on command line of transfer and DNS lookup program.
+       # So the whole communication uses the selected IP version between both ends.
+       # needs GNU Wget or cURL installed for transfer and
+       # BIND's host for DNS lookup.
+       # default: "0" disabled
+       option force_ipversion "0"
+
+       ###########
+       # Normally the current (in the internet) registered ip is detected using the
+       # local defined name lookup policies (i.e. /etc/resolve.conf etc.)
+       # Specify here a DNS server to use instead of the defaults.
+       # you can use hostname or ip address
+       # i.e. "google-public-dns-a.google.com"
+       # default: none
+#      option dns_server "google-public-dns-a.google.com"
+
+       # By default every DNS call is made via UDP protocol
+       # Some internet provider offer modems that cache UDP DNS requests.
+       # They also redirect calls to external servers to local.
+       # To force the usage of TCP for DNS requests enable this option
+       # Needs BIND's host program be installed
+       # default: "0" disabled
+#      option force_dnstcp "0"
+
+       ###########
+       # If a Proxy is need to access HTTP/HTTPS pages on the WEB
+       # it can be configured here also for sending updates to the
+       # DDNS provider. If you configured use_https='1' above, you
+       # need to setup your HTTPS proxy here, otherwise your
+       # HTTP proxy. !!! You should not detect your current IP
+       # ip_source='web' (see above) because this request is also
+       # send via the configured proxy !!!
+       # Syntax: [user:password@]proxy:port !port is required !
+       # IPv6 address must be in squared brackets "[...]"
+       # default: none
+#      option proxy ''
+
+       ###########
+       # In some very special configurations i.e. Multi WAN environment
+       # in a NAT cascade it might be necessary to define
+       # a network to use for communication.
+       # should use option ip_source "web" (see above)
+       # Needs GNU Wget (with SSL support) or cURL to be installed.
+       # GNU Wget will use IP address and cURL the physical device 
+       # of the given network
+       # default: none
+#      option bind_network "wan7"
+
+       ########### Timer settings ########################
+
+       ###########
+       # defines the time interval to check if local IP has changed
+       # After the first start and first update send, the system will
+       # wait this time before verify if update was successful send.
+       # !!! checks below 5 minutes make no sense because the Internet
+       # needs about 5-10 minutes to sync an IP-change to all DNS servers !!!
+       # accepted unit entry’s: 'seconds' 'minutes' 'hours'
+       # minimum 5 minutes == 300 seconds
+       # default 10 minutes
+       option check_interval   '10'
+       option check_unit       'minutes'
+
+       ###########
+       # force to send an update to service provider, if no change was detected.
+       # consult DDNS providers documentation if your DDNS entry might timeout.
+       # accepted unit entry’s: 'minutes' 'hours' 'days'
+       # minimum needs to be greater or equal check interval (see above)
+       # A special setting of '0' is allowed, which forces the script to run once.
+       # It sends an update, verify if update was accepted by DNS
+       # (retry if not) and finish. Useful if you want to start by your own (i.e. cron)
+       # default 3 days == 72 hours
+       option force_interval   '72'
+       option force_unit       'hours'
+
+       ###########
+       # if error happen on detecting, sending or updating the
+       # script will retry the relevant action for retry_count times
+       # before stopping script execution.
+       # default: 5
+       option retry_count '5'
+
+       ###########
+       # if error happen on detecting, sending or updating the
+       # script will retry the relevant action.
+       # here you define the time to wait before retry is started
+       # accepted unit entry’s: 'seconds' 'minutes'
+       # default: 60 seconds
+       option retry_interval   '60'
+       option retry_unit       'seconds'
diff --git a/package/network/services/ddns-scripts/samples/getlocalip_sample.sh b/package/network/services/ddns-scripts/samples/getlocalip_sample.sh
new file mode 100755 (executable)
index 0000000..b98806b
--- /dev/null
@@ -0,0 +1,35 @@
+#!/bin/sh
+#
+# sample script for detecting local IP
+# 2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# activated inside /etc/config/ddns by setting
+#
+# option ip_source     'script'
+# option ip_script     '/usr/lib/ddns/getlocalip_sample.sh -6' !!! parameters ALLOWED
+#
+# the script is executed (not parsed) inside get_local_ip() function
+# of /usr/lib/ddns/dynamic_dns_functions.sh
+#
+# useful when this box is the only DDNS client in the network
+# IP adresses of "internal" boxes could be detected with this script
+# so no need to install ddns client on every "internal" box
+# On IPv6 every internal box normally has it's own external IP
+#
+# This script should
+#      - return the IP address via stdout      echo -n "...."  !!! without line feed
+#      - report errors via stderr              echo "...." >&2
+#      - return an error code ('0' for success)        exit 123
+
+case $1 in
+       -4)     echo -n "8.8.8.8"               # never append linefeed or simular
+               exit 0
+               ;;                              # IP's of Googles public DNS
+       -6)     echo -n "2001:4860:4860::8888"
+               exit 0
+               ;;
+       *)      echo "$0 - Invalid or missing parameter" >&2
+               exit 1
+esac
+echo "Should never come here" >&2
+exit 2
diff --git a/package/network/services/ddns-scripts/samples/slaac_sample.sh b/package/network/services/ddns-scripts/samples/slaac_sample.sh
new file mode 100755 (executable)
index 0000000..ea8f24d
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/sh
+#
+# script to determine and return SLAAC ipv6 address using prefix from a locally configured interface and the MAC address of the device
+# (c) 2018 Keve Mueller <keve at keve dot hu>
+#
+# activated inside /etc/config/ddns by setting
+#
+# option ip_source      'script'
+# option ip_script      '/usr/lib/ddns/slaac_sample.sh br-lan AA:BB:CC:DD:EE:FF'
+#
+# the script is executed (not parsed) inside get_local_ip() function
+# of /usr/lib/ddns/dynamic_dns_functions.sh
+#
+# useful when this box is the only DDNS client in the network and other clients use SLAAC
+# so no need to install ddns client on every "internal" box
+#
+# NB: this will not catch the actual IPV6 used by the host when it is configured to use temporary addresses
+
+#NB: we need a valid MAC address that is fully expanded with leading zeroes on all positions
+format_eui_64() {
+    local macaddr="$1"
+    echo ${macaddr:0:1}$(echo ${macaddr:1:1}|tr 0123456789abcdefABCDEF 23016745ab89efcd89efcd)${macaddr:3:2}:${macaddr:6:2}ff:fe${macaddr:9:2}:${macaddr:12:2}${macaddr:15:2}
+}
+
+# expand :: in an ipv6 address specification to the appropriate series of 0:
+# result will have 8 ipv6 fragments separated by single colon
+# NB: input must be a valid IPv6 address, e.g. ::1
+# NB: numbers are not prepended with leading zeroes
+expand_ipv6_colons() {
+    local ipv6=$1
+# we need :: to be in the middle, so prepend a 0 if the input starts with : and append 0 if it ends with it
+    if [ "${ipv6:0:1}" = ":" ]; then ipv6=0${ipv6}; fi
+    if [ "${ipv6: -1:1}" = ":" ]; then ipv6=${ipv6}0; fi
+# retain only the real colons
+    local colons=${ipv6//::|[0123456789abcdefABCDEF]/}
+# count them
+    local num_colons=${#colons}
+    local filler=":0:0:0:0:0:0:"
+# replace the :: with the appropriate substring from filler
+    local ipv6_x=${ipv6/::/${filler:0:(7-$num_colons)*2-1}}
+    echo $ipv6_x
+}
+
+# obtain the first ipv6 address of the device passed in $1
+addr_net=$(ip -6 -o addr show dev $1 scope global up | cut -d" " -f 7 | head -1)
+#addr_net=$1
+addr=${addr_net%/*}
+# TODO: we assume /64 subnet
+# get the first 64 bits of the address
+prefix=$(expand_ipv6_colons $addr | cut -d: -f -4)
+# compute the SLAAC 64 bits from the MAC
+suffix=$(format_eui_64 "$2")
+
+echo -n $prefix:$suffix
+exit 0
+
+#echo "Should never come here" >&2
+#exit 2
+
diff --git a/package/network/services/ddns-scripts/samples/update_sample.sh b/package/network/services/ddns-scripts/samples/update_sample.sh
new file mode 100644 (file)
index 0000000..316dfa5
--- /dev/null
@@ -0,0 +1,41 @@
+# sample script for sending user defined updates
+# 2014-2015 Christian Schoenebeck <christian dot schoenebeck at gmail dot com>
+#
+# activated inside /etc/config/ddns by setting
+#
+# option update_script '/usr/lib/ddns/update_sample.sh'
+#
+# the script is parsed (not executed) inside send_update() function
+# of /usr/lib/ddns/dynamic_dns_functions.sh
+# so you can use all available functions and global variables inside this script
+# already defined in dynamic_dns_updater.sh and dynamic_dns_functions.sh
+#
+# It make sence to define the update url ONLY inside this script
+# because it's anyway unique to the update script
+# otherwise it should work with the default scripts
+#
+# the code here is the copy of the default used inside send_update()
+#
+# tested with spdns.de
+local __URL="http://[USERNAME]:[PASSWORD]@update.spdns.de/nic/update?hostname=[DOMAIN]&myip=[IP]"
+# inside url we need domain, username and password
+[ -z "$domain" ]   && write_log 14 "Service section not configured correctly! Missing 'domain'"
+[ -z "$username" ] && write_log 14 "Service section not configured correctly! Missing 'username'"
+[ -z "$password" ] && write_log 14 "Service section not configured correctly! Missing 'password'"
+
+# do replaces in URL
+__URL=$(echo $__URL | sed -e "s#\[USERNAME\]#$URL_USER#g" -e "s#\[PASSWORD\]#$URL_PASS#g" \
+                            -e "s#\[PARAMENC\]#$URL_PENC#g" -e "s#\[PARAMOPT\]#$param_opt#g" \
+                            -e "s#\[DOMAIN\]#$domain#g"     -e "s#\[IP\]#$__IP#g")
+[ $use_https -ne 0 ] && __URL=$(echo $__URL | sed -e 's#^http:#https:#')
+
+do_transfer "$__URL" || return 1
+
+write_log 7 "DDNS Provider answered:\n$(cat $DATFILE)"
+
+# analyse provider answers
+# "good [IP_ADR]"      = successful
+# "nochg [IP_ADR]"     = no change but OK
+grep -i -E "good|nochg" $DATFILE >/dev/null 2>&1
+return $?      # "0" if "good" or "nochg" found
+
diff --git a/package/network/services/etherwake-nfqueue/Makefile b/package/network/services/etherwake-nfqueue/Makefile
new file mode 100644 (file)
index 0000000..08f4fd3
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2019 Mister Benjamin <144dbspl@gmail.com>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=etherwake-nfqueue
+PKG_RELEASE:=3
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/mister-benjamin/etherwake-nfqueue.git
+PKG_SOURCE_DATE:=2019-09-28
+PKG_SOURCE_VERSION:=f71c269b58585e93575fa3e9fcc1793806fb3080
+PKG_MIRROR_HASH:=4960dc592abc4ca06504c92ca09fc736c678353df0dcc32d4081e17b137a9164
+
+PKG_MAINTAINER:=Mister Benjamin <144dbspl@gmail.com>
+PKG_LICENSE:=GPL-2.0-or-later
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/etherwake-nfqueue
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libnetfilter-queue +nftables +kmod-nft-queue
+  TITLE:=Wake up computers on netfilter match
+  URL:=https://github.com/mister-benjamin/etherwake-nfqueue
+endef
+
+define Package/etherwake-nfqueue/description
+ Fork of etherwake with additional support for sending WOL packets
+ when a router added a filtered packet to an NFQUEUE.
+endef
+
+define Package/etherwake-nfqueue/conffiles
+/etc/config/etherwake-nfqueue
+endef
+
+define Package/etherwake-nfqueue/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/etherwake-nfqueue $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) files/$(PKG_NAME).config $(1)/etc/config/$(PKG_NAME)
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME)
+endef
+
+$(eval $(call BuildPackage,etherwake-nfqueue))
diff --git a/package/network/services/etherwake-nfqueue/README.md b/package/network/services/etherwake-nfqueue/README.md
new file mode 100644 (file)
index 0000000..b44ac9e
--- /dev/null
@@ -0,0 +1,378 @@
+# OpenWrt package feed for etherwake-nfqueue
+
+
+## Wake up computers on netfilter match
+
+This repository contains the OpenWrt package feed for
+[etherwake-nfqueue](https://github.com/mister-benjamin/etherwake-nfqueue),
+a fork of the **etherwake** Wake-on-LAN client, with support to send magic
+packets only after a queued packet is received from the Linux *nfnetlink_queue*
+subsystem.
+
+When running **etherwake-nfqueue** on a residential gateway or other type of
+router, it can wake up hosts on its network based on packet filtering rules.
+
+For instance, when your set-top box wants to record a TV programme and
+tries to access a network share on your NAS, which is in sleep or standby mode,
+**etherwake-nfqueue** can wake up your NAS. Or when you set up port forwarding
+to a host on your home network, **etherwake-nfqueue** can wake up your host
+when you try to access it over the Internet.
+
+The documentation below is mostly OpenWrt specific. For more information on
+etherwake-nfqueue itself and use case examples, please consult its
+[Readme](https://github.com/mister-benjamin/etherwake-nfqueue/blob/master/README.md).
+
+
+## Building the package
+
+Currently, no pre-built packages are provided. The following assumes that you
+already have a working OpenWrt build system for your target device.
+
+If you haven't, you can follow one of these guides:
+
+* If you only want to compile packages, and no firmware image:
+  [Build system – Installation](https://openwrt.org/docs/guide-developer/build-system/install-buildsystem) and
+  [Using the SDK](https://openwrt.org/docs/guide-developer/using_the_sdk)
+
+* To quickly build a firmware image off a development snapshot:
+  [Quick Image Building Guide](https://openwrt.org/docs/guide-developer/quickstart-build-images)
+
+* Or when you are completely new to using build systems:
+  [Beginners guide to building your own firmware](https://openwrt.org/docs/guide-user/additional-software/beginners-build-guide)
+
+### Dependencies
+
+**etherwake-nfqueue** depends on these OpenWrt packages:
+
+* libnetfilter-queue
+* iptables-mod-nfqueue
+
+They will be automatically selected and compiled for you. If they are not
+installed on your target device, *opkg* will try to resolve dependencies with
+packages in the repositories.
+
+### Adding the package feed
+
+First, you need to add the **etherwake-nfqueue** package feed to your build
+system.  In the root directory of your OpenWrt build system, find the file
+*feeds.conf* (or *feeds.conf.default* if the former shouldn't exist) and add
+the following line to it:
+
+```
+src-git ethernfq https://github.com/mister-benjamin/etherwake-nfqueue-openwrt.git
+```
+
+Then update and install the package feed:
+```
+user@host:~/openwrt$ scripts/feeds update ethernfq
+user@host:~/openwrt$ scripts/feeds install -a -p ethernfq
+```
+
+After that, enter OpenWrt's configuration menu
+```
+user@host:~/openwrt$ make menuconfig
+```
+and enable **etherwake-nfqueue** in the **Network** sub-menu. It can either be selected
+as built-in (\*) or module (M), depending on your decision to include it into a
+firmware image or just build the *opkg* package for installation.
+
+Then you should be able to compile the package:
+```
+user@host:~/openwrt$ make package/etherwake-nfqueue/compile
+```
+
+The path of the resulting package depends on your selected *Target System*.
+In case of the Linksys WRT1200AC, it can be found here:
+```
+bin/packages/arm_cortex-a9_vfpv3/ethernfq/etherwake-nfqueue_2019-09-10-67e9d4ca-1_arm_cortex-a9_vfpv3.ipk
+```
+
+
+## Installation
+
+One way to install the package is by simply copying it over to the device with *scp*:
+```
+user@host:~$ scp etherwake-nfqueue_2019-09-10-67e9d4ca-1_arm_cortex-a9_vfpv3.ipk root@gateway:~
+```
+And then, install it on the device:
+```
+root@gateway:~# opkg install etherwake-nfqueue_2019-09-10-67e9d4ca-1_arm_cortex-a9_vfpv3.ipk
+```
+
+
+## Configuration
+
+### WoL Targets
+
+After a fresh installation, no target is configured. Targets are referred
+to as the hosts to wake up. Multiple targets can coexist.
+
+Targets can be configured with OpenWrt's UCI.
+
+For example, to add a target called **nas**, with MAC address
+ **00:25:90:00:d5:fd**, which is reachable over the VLAN configured
+on **eth0.3**, issue this command sequence on your router:
+
+```
+uci add etherwake-nfqueue target
+uci set etherwake-nfqueue.@target[-1].name=nas
+uci set etherwake-nfqueue.@target[-1].mac=00:25:90:00:d5:fd
+uci set etherwake-nfqueue.@target[-1].interface=eth0.3
+uci commit
+```
+
+For each target, one instance of **etherwake-nfqueue** will be started.
+
+Each instance should bind to a different *nfnetlink_queue*. A queue can
+be referenced by its queue number. Counting starts from 0, which is the default.
+To use a different queue, provide the **nfqueue_num** option. The
+following could have been added to the sequence above to use queue 1 instead
+of 0:
+
+```
+uci set etherwake-nfqueue.@target[-1].nfqueue_num=1
+```
+
+The necessity of a queue number will probably become clear, when the iptables
+rules are configured in section [Setup firewall rules](#setup-firewall-rules).
+
+The full list of options for a target is:
+
+| Option      | Required | Description                                      |
+| ----------- | -------- | ------------------------------------------------ |
+| name        | no       | Name of the target, e.g. name=example            |
+| mac         | yes      | MAC address of the host to wake up, e.g. mac=00:22:44:66:88:aa |
+| nfqueue_num | no       | The queue number used for receiving filtered packets, default is nfqueue_num=0 |
+| interface   | no       | The interface used for sending the magic packet, default is interface=eth0 |
+| broadcast   | no       | Send magic packet to broadcast address, default is broadcast=off |
+| password    | no       | Set a password (required by some adapters), e.g. password=00:22:44:66:88:aa or 192.168.1.1 |
+| enabled     | no       | Optionally disable the target, default is enabled=true |
+
+After committing your changes, the settings are persisted to
+*/etc/config/etherwake-nfqueue*. This is an illustrative example:
+```
+config etherwake-nfqueue 'setup'
+        option sudo 'off'
+        option debug 'off'
+
+config target
+        option name 'nas'
+        option mac '00:25:90:00:d5:fd'
+        option interface 'eth0.3'
+
+config target
+        option name 'xyz-board'
+        option mac '00:25:90:00:d5:fc'
+        option nfqueue_num '1'
+        option enabled 'false'
+
+config target
+        option name 'ip-camera'
+        option mac '00:25:90:00:d5:fb'
+        option nfqueue_num '2'
+        option interface 'eth0.3'
+        option broadcast 'on'
+        option password '00:25:90:00:d5:fb'
+```
+
+When all target(s) are configured, restart the *etherwake-nfqueue* service:
+```
+/etc/init.d/etherwake-nfqueue restart
+```
+
+### Setting up filters
+
+Without any firewall rules which tell the kernel to match and add packets
+to a *nfnetlink_queue*, **etherwake-nfqueue** will never send out a magic
+packet to wake its target.
+
+#### Prerequisites
+
+In order to let the *netfilter* framework of the kernel see the packets,
+they need to pass through the router. This is usually not the case when
+hosts are on the same subnet and don't require network layer routing.
+The data will only pass through the router's switch on the link layer.
+
+As a consequence, we can only use packets as a trigger which need to be
+routed or bridged by the router. Packets being forwarded between WAN
+and LAN are of that type. For other SOHO use cases, partitioning your
+network by means of subnets or VLANs might be necessary. The latter
+is often used to set up a DMZ.
+
+For VLANs:
+
+* There's a mini howto referring to the **LuCI Web Interface**
+  *(Network -> Switch)* way of configuring VLANs:
+  [How-To: Creating an additional virtual switch on a typical home router](https://openwrt.org/docs/guide-user/network/vlan/creating_virtual_switches)
+
+* The manual approach is documented here:
+  [VLAN](https://openwrt.org/docs/guide-user/network/vlan/switch_configuration)
+
+Guides to setup a DMZ can be found here:
+
+* [Guide to set up DMZ via LUCI](https://forum.openwrt.org/t/guide-to-set-up-dmz-via-luci/21616)
+
+* [fw3 DMZ Configuration Using VLANs](https://openwrt.org/docs/guide-user/firewall/fw3_configurations/fw3_dmz)
+
+The physical switch layout is device specific. E.g. the layout for the Linksys
+WRT AC Series is documented
+[here](https://oldwiki.archive.openwrt.org/toh/linksys/wrt_ac_series#switch_layout).
+
+
+Using two LANs or VLANs with the same network address and bridging them again
+is a trick to setup a transparent (or bridging) firewall on the same subnet.
+This way, packets can be seen by *netfilter* on the router even if the
+packets are not routed. Unfortunately this doesn't help when the host
+which we want to wake up is offline, as the ARP requests for the destination
+IP address are not answered and thus the client trying to reach out to its
+destination will not send any *network layer* packets. We could use *arptables*
+instead to wake the host when someone requests its MAC address, but this
+would probably happen too often and no fine-grained control would be possible.
+
+As a workaround, it might be possible to configure a static ARP entry on your
+router (untested), e.g. with:
+```
+ip neigh add 192.168.0.10 lladdr 00:25:90:00:d5:fd nud permanent dev eth0.3
+```
+Note that this requires the *ip-full* OpenWrt package to be installed.
+
+To make your firewall rules work with bridging, you need to install the
+*kmod-br-netfilter* package and add `net.bridge.bridge-nf-call-iptables=1`
+to */etc/sysctl.conf*.
+
+
+#### Setup firewall rules
+
+One way to setup custom firewall rules in OpenWrt is through its
+*/etc/firewall.user* script. This file can also be edited by means of
+the **LuCI Web Interface** *(Network -> Firewall -> Custom Rules)*.
+
+The file is interpreted as a shell script, so we can simply use **iptables**
+to add our custom firewall rules.
+
+Notice the comment
+```
+# Internal uci firewall chains are flushed and recreated on reload, so
+# put custom rules into the root chains e.g. INPUT or FORWARD or into the
+# special user chains, e.g. input_wan_rule or postrouting_lan_rule.
+```
+
+Refer to [Packet flow](https://oldwiki.archive.openwrt.org/doc/uci/firewall#packet_flow)
+for usable chains. In the example below, the chains *forwarding_lan_rule* and
+*forwarding_wan_rule* are used. To inspect the rule sets of the different tables, one can
+use
+
+```
+iptables --list                  # default is --table filter
+iptables --table nat --list
+iptables --table mangle --list
+iptables --table raw --list      # requires kmod-ipt-raw
+```
+
+The following is an example of what could be added to */etc/firewall.user*:
+
+```
+iptables --insert forwarding_lan_rule\
+         --protocol tcp --in-interface=br-lan --out-interface=eth0.3\
+         --destination 192.168.0.10 --destination-port 445\
+         --match conntrack --ctstate NEW\
+         --match limit --limit 3/hour --limit-burst 1\
+         --jump NFQUEUE --queue-num 0 --queue-bypass\
+         --match comment --comment "Wake up NAS on LAN SMB"
+iptables --insert forwarding_lan_rule\
+         --protocol tcp --in-interface=br-lan --out-interface=eth0.3\
+         --destination 192.168.0.11 --match multiport --destination-ports 515,54921,631\
+         --match conntrack --ctstate NEW\
+         --match limit --limit 3/hour --limit-burst 1\
+         --jump NFQUEUE --queue-num 0 --queue-bypass\
+         --match comment --comment "Wake up NAS on print request"
+iptables --insert forwarding_lan_rule\
+         --protocol udp --in-interface=br-lan --out-interface=eth0.3\
+         --destination 192.168.0.11 --destination-port 161\
+         --match conntrack --ctstate NEW\
+         --match limit --limit 3/hour --limit-burst 1\
+         --jump NFQUEUE --queue-num 0 --queue-bypass\
+         --match comment --comment "Wake up NAS on print request"
+iptables --insert forwarding_wan_rule\
+         --protocol tcp --in-interface=eth1.2 --out-interface=eth0.3\
+         --destination 192.168.0.10 --destination-port 22\
+         --match conntrack --ctstate NEW\
+         --match limit --limit 3/hour --limit-burst 1\
+         --jump NFQUEUE --queue-num 0 --queue-bypass\
+         --match comment --comment "Wake up NAS on WAN SSH"
+```
+
+In this example, packets are filtered based on the protocol, their input
+and output interfaces, their destination (IP address) and their destination
+port(s).
+
+The option `--match conntrack --ctstate NEW` only matches packets of a new
+connection and `--match limit --limit 3/hour --limit-burst 1` limits the
+amount of packets that are matched. The latter option roughly matches
+only one packet per 20 minutes. The intention here is to not be too intrusive
+and avoid sending a lot of magic packets.
+
+The `--jump NFQUEUE --queue-num 0` options tell the *netfilter*
+framework to enqueue a matching packet to the NFQUEUE number 0. In this
+example, all four rules send the matching packets into queue 0. The
+additional option `--queue-bypass` helps in the situation, when
+**etherwake-nfqueue** isn't running. Packets will then be handled
+as if the rule wasn't present.
+
+
+## Disabling targets
+
+To disable targets, first find their index:
+```
+uci show etherwake-nfqueue
+```
+
+Then set its *enabled* option to false and restart the service.
+For index 0, it can be done like this:
+```
+uci set etherwake-nfqueue.@target[0].enabled=false
+/etc/init.d/etherwake-nfqueue restart
+```
+
+
+## Troubleshooting
+
+### Debug mode
+
+In order to see what's going on in syslog and get some debug output when
+starting the service, enable etherwake-nfqueue's debug mode:
+```
+uci set etherwake-nfqueue.setup.debug=on
+```
+In another user session tail the log:
+```
+logread -f
+```
+And then restart the service:
+```
+/etc/init.d/etherwake-nfqueue restart
+```
+
+### Inspect netfilter
+
+To inspect the working of your firewall rules, you can print statistics
+of the chains you used, e.g.:
+```
+iptables --verbose --list forwarding_lan_rule
+```
+
+If you happen to have the *procps-ng-watch* package installed, you can watch
+them:
+```
+watch iptables --verbose --list forwarding_lan_rule
+```
+
+To see, if your queues are in place, use:
+```
+cat /proc/net/netfilter/nfnetlink_queue
+```
+
+## Potential improvements
+
+* Add **LuCI Web Interface** configuration frontend for *targets* and *filter rules*
+* Add an option to set *nice* values for instances
diff --git a/package/network/services/etherwake-nfqueue/files/etherwake-nfqueue.config b/package/network/services/etherwake-nfqueue/files/etherwake-nfqueue.config
new file mode 100644 (file)
index 0000000..541bbe2
--- /dev/null
@@ -0,0 +1,21 @@
+config etherwake-nfqueue 'setup'
+       option sudo 'off'
+       option debug 'off'
+
+# You can add targets with uci:
+# # uci add etherwake-nfqueue target
+# Set a name for the target
+# # uci set etherwake-nfqueue.@target[-1].name=example
+# Set MAC address of the host to wake up
+# # uci set etherwake-nfqueue.@target[-1].mac=00:22:44:66:88:aa
+# Set the nfqueue num used for receiving filtered packets, defaults to 0
+# # uci set etherwake-nfqueue.@target[-1].nfqueue_num=0
+# Set the interface used for sending the magic packet, defaults to 'eth0'
+# # uci set etherwake-nfqueue.@target[-1].interface=eth0
+# Configure if it should be sent to broadcast address, defaults to off
+# # uci set etherwake-nfqueue.@target[-1].broadcast=off
+# Optionally provide a password (required by some adapters)
+# e.g. 00:22:44:66:88:aa or 192.168.1.1
+# # uci set etherwake-nfqueue.@target[-1].password=00:22:44:66:88:aa
+# Optionally disable the target, by default it is enabled
+# # uci set etherwake-nfqueue.@target[-1].enabled=false
diff --git a/package/network/services/etherwake-nfqueue/files/etherwake-nfqueue.init b/package/network/services/etherwake-nfqueue/files/etherwake-nfqueue.init
new file mode 100644 (file)
index 0000000..0be740d
--- /dev/null
@@ -0,0 +1,69 @@
+#!/bin/sh /etc/rc.common
+#
+# Copyright (C) 2019 Mister Benjamin <144dbspl@gmail.com>
+
+NAME='etherwake-nfqueue'
+
+START=60
+USE_PROCD=1
+
+PROGRAM=${NAME}
+
+start_service()
+{
+    local value
+
+    config_load ${NAME}
+
+    config_get_bool value setup sudo 0
+    [ "${value}" -ne 0 ] && PROGRAM="sudo ${PROGRAM}"
+
+    config_get_bool value setup debug 0
+    if [ "${value}" -ne 0 ]; then
+        PROCD_DEBUG=1
+        append PROGRAM '-D'
+    fi
+
+    config_foreach start_instance target
+}
+
+start_instance()
+{
+    local section="$1"
+    local value name mac
+
+    config_get_bool value "${section}" enabled 1
+    [ "${value}" -ne 1 ] && return 0
+
+    config_get value "${section}" name
+    [ -z "${value}" ] && value="{section}"
+    name=${value}
+
+    config_get mac "${section}" mac
+    [ -z "${mac}" ] && {
+        echo "${initscript}: Target ${name} has no MAC address"
+        return 1
+    }
+
+    procd_open_instance ${name}
+    procd_set_param command ${PROGRAM}
+    procd_set_param respawn
+    procd_set_param stdout 1
+    procd_set_param stderr 1
+
+    config_get_bool value "${section}" broadcast 0
+    [ "${value}" -ne 0 ] && procd_append_param command -b
+
+    config_get value "${section}" interface
+    [ -n "${value}" ] && procd_append_param command -i "${value}"
+
+    config_get value "${section}" password
+    [ -n "${value}" ] && procd_append_param command -p "${value}"
+
+    config_get value "${section}" nfqueue_num 0
+    procd_append_param command -q "${value}"
+
+    procd_append_param command "${mac}"
+
+    procd_close_instance
+}
diff --git a/package/network/services/etherwake/Makefile b/package/network/services/etherwake/Makefile
new file mode 100644 (file)
index 0000000..98063c0
--- /dev/null
@@ -0,0 +1,55 @@
+#
+# Copyright (C) 2007-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=etherwake
+PKG_VERSION:=1.09
+PKG_RELEASE:=5
+
+PKG_SOURCE:=$(PKG_NAME)_$(PKG_VERSION).orig.tar.gz
+PKG_SOURCE_URL:=http://ftp.debian.org/debian/pool/main/e/etherwake
+PKG_HASH:=54241c7689579dc86e29e6afbc6d60e69f97135091a1395c8a10f6d5a2daec1d
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(PKG_VERSION).orig
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/etherwake
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=WoL client for magic packets via ethernet frames
+  URL:=http://ftp.debian.org/debian/pool/main/e/etherwake
+  MAINTAINER:=Peter Wagner <tripolar@gmx.at>
+endef
+
+define Package/etherwake/description
+       You can wake up WOL compliant Computers which have been powered down to
+       sleep mode or start WOL compliant Computers with a BIOS feature.
+       WOL is an abbreviation for Wake-on-LAN. It is a standard that allows you
+       to turn on a computer from another location over a network connection.
+       ether-wake also supports WOL passwords.
+endef
+
+define Build/Compile
+       $(TARGET_CC) $(TARGET_CFLAGS) -D__UCLIBC__ $(TARGET_LDFLAGS) $(PKG_BUILD_DIR)/ether-wake.c -o $(PKG_BUILD_DIR)/etherwake
+endef
+
+define Package/etherwake/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/etherwake $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_DATA) files/$(PKG_NAME).config $(1)/etc/config/$(PKG_NAME)
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) files/$(PKG_NAME).init $(1)/etc/init.d/$(PKG_NAME)
+endef
+
+define Package/etherwake/conffiles
+/etc/config/etherwake
+endef
+
+$(eval $(call BuildPackage,etherwake))
diff --git a/package/network/services/etherwake/files/etherwake.config b/package/network/services/etherwake/files/etherwake.config
new file mode 100644 (file)
index 0000000..965cdcf
--- /dev/null
@@ -0,0 +1,28 @@
+config 'etherwake' 'setup'
+       # possible program paths
+       option 'pathes' '/usr/bin/etherwake /usr/bin/ether-wake'
+       # use sudo, defaults to off
+       option 'sudo' 'off'
+       # interface, defaults to 'eth0'
+       # -i <ifname>
+       option 'interface' ''
+       # send wake-up packet to the broadcast address, defaults to off
+       # -b
+       option 'broadcast' 'off'
+
+config 'target'
+       # name for the target
+       option 'name' 'example'
+       # mac address to wake up
+       option 'mac' '11:22:33:44:55:66'
+       # password in hex without any delimiters
+       option 'password' 'AABBCCDDEEFF'
+       # wake up on system start, defaults to off
+       option 'wakeonboot' 'off'
+
+# To add a new target use:
+#  uci add etherwake target
+#  uci set etherwake.@target[-1].name=example
+#  uci set etherwake.@target[-1].mac=11:22:33:44:55:66
+#  uci set etherwake.@target[-1].password=AABBCCDDEEFF
+#  uci set etherwake.@target[-1].wakeonboot=off
diff --git a/package/network/services/etherwake/files/etherwake.init b/package/network/services/etherwake/files/etherwake.init
new file mode 100644 (file)
index 0000000..0504cf1
--- /dev/null
@@ -0,0 +1,132 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009 OpenWrt.org
+
+NAME='etherwake'
+START=60
+PROGRAM=''
+
+start()
+{
+       local searchlist=''
+       local section=''
+       local value=''
+
+       config_load "${NAME}"
+
+       # check for available program
+       config_get searchlist 'setup' 'pathes'
+       PROGRAM=$(search_program "${searchlist}")
+       [ -z "${PROGRAM}" ] && {
+               echo "${initscript}: No ${NAME} program installed. Check: opkg list | grep ${NAME}"
+               exit 1
+       }
+
+       # sudo
+       config_get_bool value 'setup' 'sudo' '0'
+       [ "${value}" -ne 0 ] && PROGRAM="sudo ${PROGRAM}"
+
+       # interface
+       config_get value 'setup' 'interface'
+       [ -n "${value}" ] && append PROGRAM "-i ${value}"
+
+       # broadcast
+       config_get_bool value 'setup' 'broadcast' '0'
+       [ "${value}" -ne 0 ] && append PROGRAM '-b'
+
+       # wake up targets
+       config_foreach etherwake_start target $*
+}
+
+etherwake_start()
+{
+       local section="$1"
+       shift
+
+       local names="$*"
+
+       local value=''
+       local target=''
+
+       if [ -z "${names}" ]
+        then
+               # check if boot target
+               config_get_bool value "${section}" 'wakeonboot' '0'
+               [ "${value}" -eq 0 ] && return 0
+
+               # wake up target
+               do_etherwake "${section}"
+               return $?
+       else
+               # name
+               config_get value "${section}" 'name'
+               [ -z "${value}" ] && return 0
+
+               for target in ${names}
+                do
+                       [ "${value}" != "${target}" ] && continue
+
+                       # wake up target
+                       do_etherwake "${section}"
+                       return $?
+               done
+       fi
+}
+
+# execute etherwake command for target
+do_etherwake()
+{
+       local section="$1"
+       local value=''
+       local password=''
+       local args=''
+
+       # password
+       config_get value "${section}" 'password'
+       [ -n "${value}" ] && {
+               password=$(etherwake_password "${value}")
+               append args "-p ${password}"
+       }
+
+       # mac address
+       config_get value "${section}" 'mac'
+       [ -z "${value}" ] && { echo "${initscript}: Target ${section} has no MAC address"; return 1; }
+       append args "${value}"
+
+       # name
+       config_get value "${section}" 'name'
+       [ -z "${value}" ] && value="{section}"
+
+       # execute command
+       echo "${initscript}: Waking up ${value} via ${PROGRAM}${args:+ ${args}}"
+       ${PROGRAM} ${args}
+       return $?
+}
+
+
+# find first available program from searchlist
+search_program()
+{
+       local searchlist="$1"
+       local test=''
+       local program=''
+
+       for test in ${searchlist} ; do
+               [ -x "${test}" ] && {
+                       program="${test}"
+                       break;
+               }
+       done
+
+       [ -n "${program}" ] && echo "${program}"
+
+       return
+}
+
+# prepare hex password
+etherwake_password()
+{
+       local delimiter=':'
+       local password=`echo "$1" | sed "s/../&${delimiter}/g"`
+       echo "${password%${delimiter}}"
+       return
+}
diff --git a/package/network/services/etherwake/patches/110-format_security_fix.patch b/package/network/services/etherwake/patches/110-format_security_fix.patch
new file mode 100644 (file)
index 0000000..165d2ce
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/ether-wake.c
++++ b/ether-wake.c
+@@ -131,7 +131,7 @@ int main(int argc, char *argv[])
+               case 'D': debug++;                      break;
+               case 'i': ifname = optarg;      break;
+               case 'p': get_wol_pw(optarg); break;
+-              case 'u': printf(usage_msg); return 0;
++              case 'u': printf("%s\n", usage_msg); return 0;
+               case 'v': verbose++;            break;
+               case 'V': do_version++;         break;
+               case '?':
+@@ -140,7 +140,7 @@ int main(int argc, char *argv[])
+       if (verbose || do_version)
+               printf("%s\n", version_msg);
+       if (errflag) {
+-              fprintf(stderr, brief_usage_msg);
++              fprintf(stderr, "%s\n", brief_usage_msg);
+               return 3;
+       }
diff --git a/package/network/services/etherwake/patches/120-musl-compat.patch b/package/network/services/etherwake/patches/120-musl-compat.patch
new file mode 100644 (file)
index 0000000..e55f572
--- /dev/null
@@ -0,0 +1,17 @@
+--- a/ether-wake.c
++++ b/ether-wake.c
+@@ -78,14 +78,8 @@ static char usage_msg[] =
+ #include <linux/if.h>
+ #include <features.h>
+-#if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
+ #include <netpacket/packet.h>
+ #include <net/ethernet.h>
+-#else
+-#include <asm/types.h>
+-#include <linux/if_packet.h>
+-#include <linux/if_ether.h>
+-#endif
+ #include <netdb.h>
+ #include <netinet/ether.h>
diff --git a/package/network/services/krb5/Makefile b/package/network/services/krb5/Makefile
new file mode 100644 (file)
index 0000000..e02337b
--- /dev/null
@@ -0,0 +1,158 @@
+#
+# Copyright (C) 2009-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=krb5
+PKG_VERSION:=1.20.1
+PKG_RELEASE:=1
+
+PKG_MAINTAINER:=W. Michael Petullo <mike@flyn.org>
+
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=NOTICE
+PKG_CPE_ID:=cpe:/a:mit:kerberos
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://web.mit.edu/kerberos/dist/krb5/1.20
+PKG_HASH:=704aed49b19eb5a7178b34b2873620ec299db08752d6a8574f95d41879ab8851
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+PKG_BUILD_FLAGS:=no-mips16
+
+include $(INCLUDE_DIR)/package.mk
+
+MAKE_PATH:=src
+
+define Package/krb5/Default
+       SECTION:=net
+       CATEGORY:=Network
+       TITLE:=Kerberos
+       URL:=https://web.mit.edu/kerberos/
+endef
+
+define Package/krb5-libs
+       SECTION:=net
+       CATEGORY:=Network
+       TITLE:=Kerberos
+       DEPENDS:=+libncurses +libss +libcomerr
+       TITLE:=Kerberos 5 Shared Libraries
+       URL:=http://web.mit.edu/kerberos/
+endef
+
+define Package/krb5-server
+       $(call Package/krb5/Default)
+       DEPENDS:=+krb5-libs +libpthread
+       TITLE:=Kerberos 5 Server
+endef
+
+define Package/krb5-server-extras
+       $(call Package/krb5/Default)
+       DEPENDS:=+krb5-libs +libpthread
+       TITLE:=Kerberos 5 Admin Server
+endef
+
+define Package/krb5-client
+       $(call Package/krb5/Default)
+       DEPENDS:=+krb5-libs
+       TITLE:=Kerberos 5 Client
+endef
+
+define Package/krb5/description
+  Kerberos is a network authentication protocol. 
+  It is designed to provide strong authentication for client/server applications by using secret-key cryptography.
+endef
+
+CONFIGURE_PATH = ./src
+
+CONFIGURE_VARS += \
+       cross_compiling=yes \
+       krb5_cv_attr_constructor_destructor=yes,yes \
+       krb5_cv_sys_rcdir=/tmp \
+       ac_cv_func_regcomp=yes \
+       ac_cv_printf_positional=yes \
+       ac_cv_file__etc_environment=no \
+       ac_cv_file__etc_TIMEZONE=no \
+       ac_cv_header_keyutils_h=no
+
+CONFIGURE_ARGS += \
+       --localstatedir=/etc \
+       --with-system-ss \
+       --with-system-et \
+       --without-system-verto \
+       --without-tcl \
+       --without-tls-impl \
+       --without-libedit \
+       --without-readline \
+       --disable-rpath \
+       --disable-pkinit \
+       --with-size-optimizations \
+       --with-crypto-impl=builtin
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include $(1)/usr
+       $(INSTALL_DIR) $(1)/usr
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib $(1)/usr
+       # needed for samba4, to detect system-krb5
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/krb5-config $(1)/usr/bin
+       $(SED) 's,^\(prefix\|exec_prefix\)=.*,\1=$(STAGING_DIR)/usr,g' $(1)/usr/bin/krb5-config
+       $(INSTALL_DIR) $(2)/bin
+       $(LN) ../../usr/bin/krb5-config $(2)/bin/krb5-config
+endef
+
+define Package/krb5-libs/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_DIR) $(1)/usr/lib/krb5
+       $(INSTALL_DIR) $(1)/usr/lib/krb5/plugins
+       $(INSTALL_DIR) $(1)/usr/lib/krb5/plugins/kdb
+       $(INSTALL_DIR) $(1)/usr/lib/krb5/plugins/libkrb5
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/krb5/plugins/kdb/db2.so $(1)/usr/lib/krb5/plugins/kdb
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/*.so* $(1)/usr/lib
+endef
+
+define Package/krb5-client/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kdestroy $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kinit $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/klist $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kpasswd $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ksu $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/kvno $(1)/usr/bin
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/krb5-send-pr $(1)/usr/sbin
+endef
+
+# Removed some server-side software to reduce package size. This should be
+# put in a separate package if needed.
+define Package/krb5-server/install
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/krb5kdc $(1)/etc/init.d/krb5kdc
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kadmin.local $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kdb5_util $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/krb5kdc $(1)/usr/sbin
+endef
+
+define Package/krb5-server-extras/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kadmind $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kprop $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/kpropd $(1)/usr/sbin
+endef
+
+define Package/krb5-server/postinst
+mkdir -p $${IPKG_INSTROOT}/etc/krb5kdc
+touch $${IPKG_INSTROOT}/etc/krb5kdc/kadm5.acl
+endef
+
+$(eval $(call BuildPackage,krb5-libs))
+$(eval $(call BuildPackage,krb5-server))
+$(eval $(call BuildPackage,krb5-server-extras))
+$(eval $(call BuildPackage,krb5-client))
diff --git a/package/network/services/krb5/files/krb5kdc b/package/network/services/krb5/files/krb5kdc
new file mode 100644 (file)
index 0000000..fd428c9
--- /dev/null
@@ -0,0 +1,19 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009 OpenWrt.org
+
+START=60
+
+start() {
+       mkdir -p /var/tmp
+       mkdir -p /etc/krb5kdc
+       
+       [ -f /etc/krb5kdc/principal ] || ( echo; echo ) | kdb5_util create -s
+       
+       /usr/sbin/krb5kdc
+       [ -x /usr/sbin/kadmind ] && /usr/sbin/kadmind
+}
+
+stop() {
+       killall krb5kdc 2> /dev/null
+       [ -x /usr/sbin/kadmind ] && killall kadmind 2> /dev/null
+}
diff --git a/package/network/services/mwan3/Makefile b/package/network/services/mwan3/Makefile
new file mode 100644 (file)
index 0000000..b31f4ce
--- /dev/null
@@ -0,0 +1,117 @@
+#
+# Copyright (C) 2006-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mwan3
+PKG_VERSION:=2.11.8
+PKG_RELEASE:=1
+PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>, \
+               Aaron Goodman <aaronjg@alumni.stanford.edu>
+PKG_LICENSE:=GPL-2.0
+PKG_CONFIG_DEPENDS:=CONFIG_IPV6
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/mwan3
+   SECTION:=net
+   CATEGORY:=Network
+   SUBMENU:=Routing and Redirection
+   DEPENDS:= \
+     +ip \
+     +ipset \
+     +iptables \
+     +IPV6:ip6tables \
+     +iptables-mod-conntrack-extra \
+     +iptables-mod-ipopt \
+     +jshn
+   TITLE:=Multiwan hotplug script with connection tracking support
+   MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
+   PKGARCH:=all
+endef
+
+define Package/mwan3/description
+Hotplug script which makes configuration of multiple WAN interfaces simple
+and manageable. With loadbalancing/failover support for up to 250 wan
+interfaces, connection tracking and an easy to manage traffic ruleset.
+endef
+
+define Package/mwan3/conffiles
+/etc/config/mwan3
+/etc/mwan3.user
+endef
+
+define Package/mwan3/postinst
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ] && [ -x /etc/init.d/rpcd ]; then
+       /etc/init.d/rpcd restart
+fi
+exit 0
+endef
+
+define Package/mwan3/postrm
+#!/bin/sh
+if [ -z "$${IPKG_INSTROOT}" ] && [ -x /etc/init.d/rpcd ]; then
+       /etc/init.d/rpcd restart
+fi
+exit 0
+endef
+
+define Build/Compile
+       $(TARGET_CC) $(CFLAGS) $(LDFLAGS) $(FPIC) \
+               -shared \
+               -o $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 \
+               $(if $(CONFIG_IPV6),-DCONFIG_IPV6) \
+               $(PKG_BUILD_DIR)/sockopt_wrap.c \
+               -ldl
+endef
+
+define Package/mwan3/install
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/etc/config/mwan3 \
+               $(1)/etc/config/
+
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/iface
+       $(INSTALL_DATA) ./files/etc/hotplug.d/iface/15-mwan3 \
+               $(1)/etc/hotplug.d/iface/
+       $(INSTALL_DATA) ./files/etc/hotplug.d/iface/16-mwan3-user \
+               $(1)/etc/hotplug.d/iface/
+
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/etc/init.d/mwan3 \
+               $(1)/etc/init.d/
+
+       $(INSTALL_DIR) $(1)/lib/mwan3
+       $(INSTALL_DATA) ./files/lib/mwan3/common.sh \
+               $(1)/lib/mwan3/
+       $(INSTALL_DATA) ./files/lib/mwan3/mwan3.sh \
+               $(1)/lib/mwan3/
+
+       $(INSTALL_DIR) $(1)/usr/libexec/rpcd
+       $(INSTALL_BIN) ./files/usr/libexec/rpcd/mwan3 \
+               $(1)/usr/libexec/rpcd/
+
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) ./files/usr/sbin/mwan3 \
+               $(1)/usr/sbin/
+       $(INSTALL_BIN) ./files/usr/sbin/mwan3rtmon \
+               $(1)/usr/sbin/
+       $(INSTALL_BIN) ./files/usr/sbin/mwan3track \
+               $(1)/usr/sbin/
+
+       $(INSTALL_DIR) $(1)/etc
+       $(INSTALL_BIN) ./files/etc/mwan3.user \
+               $(1)/etc/
+
+       $(CP) $(PKG_BUILD_DIR)/libwrap_mwan3_sockopt.so.1.0 $(1)/lib/mwan3/
+
+       $(INSTALL_DIR) $(1)/etc/uci-defaults
+       $(INSTALL_DATA) ./files/etc/uci-defaults/mwan3-migrate-flush_conntrack \
+               $(1)/etc/uci-defaults/
+endef
+
+$(eval $(call BuildPackage,mwan3))
diff --git a/package/network/services/mwan3/files/etc/config/mwan3 b/package/network/services/mwan3/files/etc/config/mwan3
new file mode 100644 (file)
index 0000000..5302d80
--- /dev/null
@@ -0,0 +1,133 @@
+# For full documentation of mwan3 configuration:
+# https://openwrt.org/docs/guide-user/network/wan/multiwan/mwan3#mwan3_configuration
+
+config globals 'globals'
+       option mmx_mask '0x3F00'
+
+config interface 'wan'
+       option enabled '1'
+       list track_ip '1.0.0.1'
+       list track_ip '1.1.1.1'
+       list track_ip '208.67.222.222'
+       list track_ip '208.67.220.220'
+       option family 'ipv4'
+       option reliability '2'
+
+config interface 'wan6'
+       option enabled '0'
+       list track_ip '2606:4700:4700::1001'
+       list track_ip '2606:4700:4700::1111'
+       list track_ip '2620:0:ccd::2'
+       list track_ip '2620:0:ccc::2'
+       option family 'ipv6'
+       option reliability '2'
+
+config interface 'wanb'
+       option enabled '0'
+       list track_ip '1.0.0.1'
+       list track_ip '1.1.1.1'
+       list track_ip '208.67.222.222'
+       list track_ip '208.67.220.220'
+       option family 'ipv4'
+       option reliability '1'
+
+config interface 'wanb6'
+       option enabled '0'
+       list track_ip '2606:4700:4700::1001'
+       list track_ip '2606:4700:4700::1111'
+       list track_ip '2620:0:ccd::2'
+       list track_ip '2620:0:ccc::2'
+       option family 'ipv6'
+       option reliability '1'
+
+config member 'wan_m1_w3'
+       option interface 'wan'
+       option metric '1'
+       option weight '3'
+
+config member 'wan_m2_w3'
+       option interface 'wan'
+       option metric '2'
+       option weight '3'
+
+config member 'wanb_m1_w2'
+       option interface 'wanb'
+       option metric '1'
+       option weight '2'
+
+config member 'wanb_m1_w3'
+       option interface 'wanb'
+       option metric '1'
+       option weight '3'
+
+config member 'wanb_m2_w2'
+       option interface 'wanb'
+       option metric '2'
+       option weight '2'
+
+config member 'wan6_m1_w3'
+       option interface 'wan6'
+       option metric '1'
+       option weight '3'
+
+config member 'wan6_m2_w3'
+       option interface 'wan6'
+       option metric '2'
+       option weight '3'
+
+config member 'wanb6_m1_w2'
+       option interface 'wanb6'
+       option metric '1'
+       option weight '2'
+
+config member 'wanb6_m1_w3'
+       option interface 'wanb6'
+       option metric '1'
+       option weight '3'
+
+config member 'wanb6_m2_w2'
+       option interface 'wanb6'
+       option metric '2'
+       option weight '2'
+
+config policy 'wan_only'
+       list use_member 'wan_m1_w3'
+       list use_member 'wan6_m1_w3'
+
+config policy 'wanb_only'
+       list use_member 'wanb_m1_w2'
+       list use_member 'wanb6_m1_w2'
+
+config policy 'balanced'
+       list use_member 'wan_m1_w3'
+       list use_member 'wanb_m1_w3'
+       list use_member 'wan6_m1_w3'
+       list use_member 'wanb6_m1_w3'
+
+config policy 'wan_wanb'
+       list use_member 'wan_m1_w3'
+       list use_member 'wanb_m2_w2'
+       list use_member 'wan6_m1_w3'
+       list use_member 'wanb6_m2_w2'
+
+config policy 'wanb_wan'
+       list use_member 'wan_m2_w3'
+       list use_member 'wanb_m1_w2'
+       list use_member 'wan6_m2_w3'
+       list use_member 'wanb6_m1_w2'
+
+config rule 'https'
+       option sticky '1'
+       option dest_port '443'
+       option proto 'tcp'
+       option use_policy 'balanced'
+
+config rule 'default_rule_v4'
+       option dest_ip '0.0.0.0/0'
+       option use_policy 'balanced'
+       option family 'ipv4'
+
+config rule 'default_rule_v6'
+       option dest_ip '::/0'
+       option use_policy 'balanced'
+       option family 'ipv6'
diff --git a/package/network/services/mwan3/files/etc/hotplug.d/iface/15-mwan3 b/package/network/services/mwan3/files/etc/hotplug.d/iface/15-mwan3
new file mode 100644 (file)
index 0000000..6eac630
--- /dev/null
@@ -0,0 +1,89 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+initscript=/etc/init.d/mwan3
+. /lib/functions/procd.sh
+
+
+SCRIPTNAME="mwan3-hotplug"
+[ "$ACTION" = "ifup" ] || [ "$ACTION" = "ifdown" ] || [ "$ACTION" = "connected" ] || [ "$ACTION" = "disconnected" ] || exit 1
+[ -n "$INTERFACE" ] || exit 2
+[ "$FIRSTCONNECT" = "1" ] || [ "$MWAN3_SHUTDOWN" = "1" ] && exit 0
+
+if { [ "$ACTION" = "ifup" ] || [ "$ACTION" = "connected" ] ; } && [ -z "$DEVICE" ]; then
+       LOG notice "$ACTION called on $INTERFACE with no device set"
+       exit 3
+fi
+
+[ "$MWAN3_STARTUP" = "init" ] || procd_lock
+
+mwan3_init
+
+/etc/init.d/mwan3 running || {
+       [ "$MWAN3_STARTUP" = "init" ] || procd_lock
+       LOG notice "mwan3 hotplug $ACTION on $INTERFACE not called because globally disabled"
+       exit 0
+}
+
+$IPT4 -S mwan3_hook &>/dev/null || {
+       LOG warn "hotplug called on $INTERFACE before mwan3 has been set up"
+       exit 0
+}
+
+if [ "$MWAN3_STARTUP" != "init" ] && [ "$ACTION" = "ifup" ]; then
+       mwan3_set_user_iface_rules $INTERFACE $DEVICE
+fi
+
+config_get_bool enabled $INTERFACE 'enabled' '0'
+[ "${enabled}" -eq 1 ] || {
+       LOG notice "mwan3 hotplug on $INTERFACE not called because interface disabled"
+       exit 0
+}
+
+config_get initial_state $INTERFACE initial_state "online"
+if [ "$initial_state" = "offline" ]; then
+       status=$(cat $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS 2>/dev/null || echo unknown)
+       [ "$status" = "online" ] || status=offline
+else
+       status=online
+fi
+
+LOG notice "Execute $ACTION event on interface $INTERFACE (${DEVICE:-unknown})"
+
+case "$ACTION" in
+       connected)
+               mwan3_set_iface_hotplug_state $INTERFACE "online"
+               mwan3_set_policies_iptables
+               ;;
+       ifup)
+               mwan3_create_iface_iptables $INTERFACE $DEVICE
+               mwan3_create_iface_rules $INTERFACE $DEVICE
+               mwan3_set_iface_hotplug_state $INTERFACE "$status"
+               if [ "$MWAN3_STARTUP" != "init" ]; then
+                       mwan3_create_iface_route $INTERFACE $DEVICE
+                       mwan3_set_general_rules
+                       [ "$status" = "online" ] && mwan3_set_policies_iptables
+               fi
+               [ "$ACTION" = ifup ] && procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR2
+               ;;
+       disconnected)
+               mwan3_set_iface_hotplug_state $INTERFACE "offline"
+               mwan3_set_policies_iptables
+               ;;
+       ifdown)
+               mwan3_set_iface_hotplug_state $INTERFACE "offline"
+               mwan3_delete_iface_ipset_entries $INTERFACE
+               mwan3_delete_iface_rules $INTERFACE
+               mwan3_delete_iface_route $INTERFACE
+               mwan3_delete_iface_iptables $INTERFACE
+               procd_running mwan3 "track_$INTERFACE" && procd_send_signal mwan3 "track_$INTERFACE" USR1
+               mwan3_set_policies_iptables
+       ;;
+esac
+
+mwan3_flush_conntrack "$INTERFACE" "$ACTION"
+
+exit 0
diff --git a/package/network/services/mwan3/files/etc/hotplug.d/iface/16-mwan3-user b/package/network/services/mwan3/files/etc/hotplug.d/iface/16-mwan3-user
new file mode 100644 (file)
index 0000000..0960a26
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+[ -f "/etc/mwan3.user" ] && {
+       . /lib/functions.sh
+       . /lib/mwan3/mwan3.sh
+       initscript=/etc/init.d/mwan3
+       . /lib/functions/procd.sh
+
+       [ "$MWAN3_SHUTDOWN" != 1 ] && procd_lock
+
+       [ "$MWAN3_SHUTDOWN" != 1 ] && ! /etc/init.d/mwan3 running && {
+               exit 0
+       }
+
+       config_load mwan3
+
+       config_get_bool enabled "$INTERFACE" enabled 0
+       [ "${enabled}" -eq 1 ] || {
+               exit 0
+       }
+
+       [ -x /etc/mwan3.user ] || chmod 755 /etc/mwan3.user
+       env -i ACTION="$ACTION" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /etc/mwan3.user
+}
+
+exit 0
diff --git a/package/network/services/mwan3/files/etc/init.d/mwan3 b/package/network/services/mwan3/files/etc/init.d/mwan3
new file mode 100755 (executable)
index 0000000..33a1f46
--- /dev/null
@@ -0,0 +1,111 @@
+#!/bin/sh /etc/rc.common
+
+. "${IPKG_INSTROOT}/lib/functions/network.sh"
+. "${IPKG_INSTROOT}/lib/mwan3/mwan3.sh"
+
+START=19
+USE_PROCD=1
+SCRIPTNAME="mwan3-init"
+
+service_running() {
+       [ -d "$MWAN3_STATUS_DIR" ]
+}
+
+start_tracker() {
+       local enabled interface
+       interface=$1
+       config_get_bool enabled $interface 'enabled' '0'
+       [ $enabled -eq 0 ] && return
+       [ -z "$(config_get $interface track_ip)" ] && return
+
+       procd_open_instance "track_${1}"
+       procd_set_param command /usr/sbin/mwan3track $interface
+       procd_set_param respawn
+       procd_close_instance
+}
+
+start_service() {
+       local enabled hotplug_pids
+
+       mwan3_init
+       config_foreach start_tracker interface
+
+       mwan3_update_iface_to_table
+       mwan3_set_dynamic_ipset
+       mwan3_set_connected_ipset
+       mwan3_set_custom_ipset
+       mwan3_set_general_rules
+       mwan3_set_general_iptables
+       config_foreach mwan3_ifup interface "init"
+       wait $hotplug_pids
+       mwan3_set_policies_iptables
+       mwan3_set_user_rules
+
+       procd_open_instance rtmon_ipv4
+       procd_set_param command /usr/sbin/mwan3rtmon ipv4
+       procd_set_param respawn
+       procd_close_instance
+
+       if command -v ip6tables > /dev/null; then
+               procd_open_instance rtmon_ipv6
+               procd_set_param command /usr/sbin/mwan3rtmon ipv6
+               procd_set_param respawn
+               procd_close_instance
+       fi
+}
+
+stop_service() {
+       local ipset rule IP IPTR IPT family table tid
+
+       mwan3_init
+       config_foreach mwan3_interface_shutdown interface
+
+       for family in ipv4 ipv6; do
+               if [ "$family" = "ipv4" ]; then
+                       IPT="$IPT4"
+                       IPTR="$IPT4R"
+                       IP="$IP4"
+               elif [ "$family" = "ipv6" ]; then
+                       [ $NO_IPV6 -ne 0 ] && continue
+                       IPT="$IPT6"
+                       IPTR="$IPT6R"
+                       IP="$IP6"
+               fi
+
+               for tid in $($IP route list table all | sed -ne 's/.*table \([0-9]\+\).*/\1/p' | sort -u); do
+                       [ $tid -gt $MWAN3_INTERFACE_MAX ] && continue
+                       $IP route flush table $tid &> /dev/null
+               done
+
+               for rule in $($IP rule list | grep -E '^[1-3][0-9]{3}\:' | cut -d ':' -f 1); do
+                       $IP rule del pref $rule &> /dev/null
+               done
+               table="$($IPT -S)"
+               {
+                       echo "*mangle";
+                       [ -z "${table##*PREROUTING -j mwan3_hook*}" ] && echo "-D PREROUTING -j mwan3_hook"
+                       [ -z "${table##*OUTPUT -j mwan3_hook*}" ] && echo "-D OUTPUT -j mwan3_hook"
+                       echo "$table" | awk '{print "-F "$2}' | grep mwan3 | sort -u
+                       echo "$table" | awk '{print "-X "$2}' | grep mwan3 | sort -u
+                       echo "COMMIT"
+               } | $IPTR
+       done
+
+       # Needed for the firewall backend to release the ipsets reference
+       sleep 2
+       for ipset in $($IPS -n list | grep mwan3_); do
+               $IPS -q destroy $ipset
+       done
+
+       rm -rf $MWAN3_STATUS_DIR $MWAN3TRACK_STATUS_DIR
+
+}
+
+reload_service() {
+       stop
+       start
+}
+
+service_triggers() {
+       procd_add_reload_trigger 'mwan3'
+}
diff --git a/package/network/services/mwan3/files/etc/mwan3.user b/package/network/services/mwan3/files/etc/mwan3.user
new file mode 100644 (file)
index 0000000..2e8e517
--- /dev/null
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# This file is interpreted as shell script.
+# Put your custom mwan3 action here, they will
+# be executed with each netifd hotplug interface event
+# on interfaces for which mwan3 is enabled.
+#
+# There are three main environment variables that are passed to this script.
+#
+# $ACTION
+#      <ifup>         Is called by netifd and mwan3track.
+#      <ifdown>       Is called by netifd and mwan3track.
+#      <connected>    Is only called by mwan3track if tracking was successful.
+#      <disconnected> Is only called by mwan3track if tracking has failed.
+# $INTERFACE   Name of the interface an action relates to (e.g. "wan" or "wwan").
+# $DEVICE      Physical device name of the interface the action relates to (e.g. "eth0" or "wwan0").
+#               Note: On an ifdown event, $DEVICE is not available, use $INTERFACE instead.
+#
+# Further documentation can be found here:
+# https://openwrt.org/docs/guide-user/network/wan/multiwan/mwan3#alertsnotifications
diff --git a/package/network/services/mwan3/files/etc/uci-defaults/mwan3-migrate-flush_conntrack b/package/network/services/mwan3/files/etc/uci-defaults/mwan3-migrate-flush_conntrack
new file mode 100644 (file)
index 0000000..1691efa
--- /dev/null
@@ -0,0 +1,26 @@
+#!/bin/sh
+
+. /lib/functions.sh
+
+mwan3_migrate_flush_conntrack() {
+       local iface="$1"
+
+       config_get value "${iface}" flush_conntrack
+       case $value in
+               always)
+                       uci_remove mwan3 "$iface" flush_conntrack
+                       uci_add_list mwan3 "$iface" flush_conntrack ifup
+                       uci_add_list mwan3 "$iface" flush_conntrack ifdown
+                       ;;
+               never)
+                       uci_remove mwan3 "$iface" flush_conntrack
+                       ;;
+       esac
+
+       uci_commit mwan3
+}
+
+config_load mwan3
+config_foreach mwan3_migrate_flush_conntrack interface
+
+exit 0
diff --git a/package/network/services/mwan3/files/lib/mwan3/common.sh b/package/network/services/mwan3/files/lib/mwan3/common.sh
new file mode 100644 (file)
index 0000000..29ace60
--- /dev/null
@@ -0,0 +1,205 @@
+#!/bin/sh
+
+IP4="ip -4"
+IP6="ip -6"
+SCRIPTNAME="$(basename "$0")"
+
+MWAN3_STATUS_DIR="/var/run/mwan3"
+MWAN3_STATUS_IPTABLES_LOG_DIR="${MWAN3_STATUS_DIR}/iptables_log"
+MWAN3TRACK_STATUS_DIR="/var/run/mwan3track"
+
+MWAN3_INTERFACE_MAX=""
+
+MMX_MASK=""
+MMX_DEFAULT=""
+MMX_BLACKHOLE=""
+MM_BLACKHOLE=""
+
+MMX_UNREACHABLE=""
+MM_UNREACHABLE=""
+MAX_SLEEP=$(((1<<31)-1))
+
+command -v ip6tables > /dev/null
+NO_IPV6=$?
+
+IPS="ipset"
+IPT4="iptables -t mangle -w"
+IPT6="ip6tables -t mangle -w"
+IPT4R="iptables-restore -T mangle -w -n"
+IPT6R="ip6tables-restore -T mangle -w -n"
+
+LOG()
+{
+       local facility=$1; shift
+       # in development, we want to show 'debug' level logs
+       # when this release is out of beta, the comment in the line below
+       # should be removed
+       [ "$facility" = "debug" ] && return
+       logger -t "${SCRIPTNAME}[$$]" -p $facility "$*"
+}
+
+mwan3_get_true_iface()
+{
+       local family V
+       _true_iface=$2
+       config_get family "$2" family ipv4
+       if [ "$family" = "ipv4" ]; then
+               V=4
+       elif [ "$family" = "ipv6" ]; then
+               V=6
+       fi
+       ubus call "network.interface.${2}_${V}" status &>/dev/null && _true_iface="${2}_${V}"
+       export "$1=$_true_iface"
+}
+
+mwan3_get_src_ip()
+{
+       local family _src_ip interface true_iface device addr_cmd default_ip IP sed_str
+       interface=$2
+       mwan3_get_true_iface true_iface $interface
+
+       unset "$1"
+       config_get family "$interface" family ipv4
+       if [ "$family" = "ipv4" ]; then
+               addr_cmd='network_get_ipaddr'
+               default_ip="0.0.0.0"
+               sed_str='s/ *inet \([^ \/]*\).*/\1/;T; pq'
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ]; then
+               addr_cmd='network_get_ipaddr6'
+               default_ip="::"
+               sed_str='s/ *inet6 \([^ \/]*\).* scope.*/\1/;T; pq'
+               IP="$IP6"
+       fi
+
+       $addr_cmd _src_ip "$true_iface"
+       if [ -z "$_src_ip" ]; then
+               network_get_device device $true_iface
+               _src_ip=$($IP address ls dev $device 2>/dev/null | sed -ne "$sed_str")
+               if [ -n "$_src_ip" ]; then
+                       LOG warn "no src $family address found from netifd for interface '$true_iface' dev '$device' guessing $_src_ip"
+               else
+                       _src_ip="$default_ip"
+                       LOG warn "no src $family address found for interface '$true_iface' dev '$device'"
+               fi
+       fi
+       export "$1=$_src_ip"
+}
+
+mwan3_get_mwan3track_status()
+{
+       local track_ips pid
+       mwan3_list_track_ips()
+       {
+               track_ips="$1 $track_ips"
+       }
+       config_list_foreach "$1" track_ip mwan3_list_track_ips
+
+       if [ -n "$track_ips" ]; then
+               pid="$(pgrep -f "mwan3track $1$")"
+               if [ -n "$pid" ]; then
+                       if [ "$(cat /proc/"$(pgrep -P $pid)"/cmdline)" = "sleep${MAX_SLEEP}" ]; then
+                               tracking="paused"
+                       else
+                               tracking="active"
+                       fi
+               else
+                       tracking="down"
+               fi
+       else
+               tracking="not enabled"
+       fi
+       echo "$tracking"
+}
+
+mwan3_init()
+{
+       local bitcnt mmdefault source_routing
+
+       config_load mwan3
+
+       [ -d $MWAN3_STATUS_DIR ] || mkdir -p $MWAN3_STATUS_DIR/iface_state
+       [ -d "$MWAN3_STATUS_IPTABLES_LOG_DIR" ] || mkdir -p "$MWAN3_STATUS_IPTABLES_LOG_DIR"
+
+       # mwan3's MARKing mask (at least 3 bits should be set)
+       if [ -e "${MWAN3_STATUS_DIR}/mmx_mask" ]; then
+               MMX_MASK=$(cat "${MWAN3_STATUS_DIR}/mmx_mask")
+               MWAN3_INTERFACE_MAX=$(uci_get_state mwan3 globals iface_max)
+       else
+               config_get MMX_MASK globals mmx_mask '0x3F00'
+               echo "$MMX_MASK"| tr 'A-F' 'a-f' > "${MWAN3_STATUS_DIR}/mmx_mask"
+               LOG debug "Using firewall mask ${MMX_MASK}"
+
+               bitcnt=$(mwan3_count_one_bits MMX_MASK)
+               mmdefault=$(((1<<bitcnt)-1))
+               MWAN3_INTERFACE_MAX=$((mmdefault-3))
+               uci_toggle_state mwan3 globals iface_max "$MWAN3_INTERFACE_MAX"
+               LOG debug "Max interface count is ${MWAN3_INTERFACE_MAX}"
+       fi
+
+       # remove "linkdown", expiry and source based routing modifiers from route lines
+       config_get_bool source_routing globals source_routing 0
+       [ $source_routing -eq 1 ] && unset source_routing
+       MWAN3_ROUTE_LINE_EXP="s/offload//; s/linkdown //; s/expires [0-9]\+sec//; s/error [0-9]\+//; ${source_routing:+s/default\(.*\) from [^ ]*/default\1/;} p"
+
+       # mark mask constants
+       bitcnt=$(mwan3_count_one_bits MMX_MASK)
+       mmdefault=$(((1<<bitcnt)-1))
+       MM_BLACKHOLE=$((mmdefault-2))
+       MM_UNREACHABLE=$((mmdefault-1))
+
+       # MMX_DEFAULT should equal MMX_MASK
+       MMX_DEFAULT=$(mwan3_id2mask mmdefault MMX_MASK)
+       MMX_BLACKHOLE=$(mwan3_id2mask MM_BLACKHOLE MMX_MASK)
+       MMX_UNREACHABLE=$(mwan3_id2mask MM_UNREACHABLE MMX_MASK)
+}
+
+# maps the 1st parameter so it only uses the bits allowed by the bitmask (2nd parameter)
+# which means spreading the bits of the 1st parameter to only use the bits that are set to 1 in the 2nd parameter
+# 0 0 0 0 0 1 0 1 (0x05) 1st parameter
+# 1 0 1 0 1 0 1 0 (0xAA) 2nd parameter
+#     1   0   1          result
+mwan3_id2mask()
+{
+       local bit_msk bit_val result
+       bit_val=0
+       result=0
+       for bit_msk in $(seq 0 31); do
+               if [ $((($2>>bit_msk)&1)) = "1" ]; then
+                       if [ $((($1>>bit_val)&1)) = "1" ]; then
+                               result=$((result|(1<<bit_msk)))
+                       fi
+                       bit_val=$((bit_val+1))
+               fi
+       done
+       printf "0x%x" $result
+}
+
+# counts how many bits are set to 1
+# n&(n-1) clears the lowest bit set to 1
+mwan3_count_one_bits()
+{
+       local count n
+       count=0
+       n=$(($1))
+       while [ "$n" -gt "0" ]; do
+               n=$((n&(n-1)))
+               count=$((count+1))
+       done
+       echo $count
+}
+
+get_uptime() {
+       local uptime=$(cat /proc/uptime)
+       echo "${uptime%%.*}"
+}
+
+get_online_time() {
+       local time_n time_u iface
+       iface="$1"
+       time_u="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/ONLINE" 2>/dev/null)"
+       [ -z "${time_u}" ] || [ "${time_u}" = "0" ] || {
+               time_n="$(get_uptime)"
+               echo $((time_n-time_u))
+       }
+}
diff --git a/package/network/services/mwan3/files/lib/mwan3/mwan3.sh b/package/network/services/mwan3/files/lib/mwan3/mwan3.sh
new file mode 100644 (file)
index 0000000..a3e7c00
--- /dev/null
@@ -0,0 +1,1230 @@
+#!/bin/sh
+
+. "${IPKG_INSTROOT}/usr/share/libubox/jshn.sh"
+. "${IPKG_INSTROOT}/lib/mwan3/common.sh"
+
+CONNTRACK_FILE="/proc/net/nf_conntrack"
+IPv6_REGEX="([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,7}:|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}|"
+IPv6_REGEX="${IPv6_REGEX}[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})|"
+IPv6_REGEX="${IPv6_REGEX}:((:[0-9a-fA-F]{1,4}){1,7}|:)|"
+IPv6_REGEX="${IPv6_REGEX}fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}|"
+IPv6_REGEX="${IPv6_REGEX}::(ffff(:0{1,4}){0,1}:){0,1}((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])|"
+IPv6_REGEX="${IPv6_REGEX}([0-9a-fA-F]{1,4}:){1,4}:((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3}(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])"
+IPv4_REGEX="((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)"
+
+DEFAULT_LOWEST_METRIC=256
+
+mwan3_push_update()
+{
+       # helper function to build an update string to pass on to
+       # IPTR or IPS RESTORE. Modifies the 'update' variable in
+       # the local scope.
+       update="$update"$'\n'"$*";
+}
+
+mwan3_update_dev_to_table()
+{
+       local _tid
+       # shellcheck disable=SC2034
+       mwan3_dev_tbl_ipv4=" "
+       # shellcheck disable=SC2034
+       mwan3_dev_tbl_ipv6=" "
+
+       update_table()
+       {
+               local family curr_table device enabled
+               let _tid++
+               config_get family "$1" family ipv4
+               network_get_device device "$1"
+               [ -z "$device" ] && return
+               config_get enabled "$1" enabled
+               [ "$enabled" -eq 0 ] && return
+               curr_table=$(eval "echo  \"\$mwan3_dev_tbl_${family}\"")
+               export "mwan3_dev_tbl_$family=${curr_table}${device}=$_tid "
+       }
+       network_flush_cache
+       config_foreach update_table interface
+}
+
+mwan3_update_iface_to_table()
+{
+       local _tid
+       mwan3_iface_tbl=" "
+       update_table()
+       {
+               let _tid++
+               export mwan3_iface_tbl="${mwan3_iface_tbl}${1}=$_tid "
+       }
+       config_foreach update_table interface
+}
+
+mwan3_route_line_dev()
+{
+       # must have mwan3 config already loaded
+       # arg 1 is route device
+       local _tid route_line route_device route_family entry curr_table
+       route_line=$2
+       route_family=$3
+       route_device=$(echo "$route_line" | sed -ne "s/.*dev \([^ ]*\).*/\1/p")
+       unset "$1"
+       [ -z "$route_device" ] && return
+
+       curr_table=$(eval "echo \"\$mwan3_dev_tbl_${route_family}\"")
+       for entry in $curr_table; do
+               if [ "${entry%%=*}" = "$route_device" ]; then
+                       _tid=${entry##*=}
+                       export "$1=$_tid"
+                       return
+               fi
+       done
+}
+
+# counts how many bits are set to 1
+# n&(n-1) clears the lowest bit set to 1
+mwan3_count_one_bits()
+{
+       local count n
+       count=0
+       n=$(($1))
+       while [ "$n" -gt "0" ]; do
+               n=$((n&(n-1)))
+               count=$((count+1))
+       done
+       echo $count
+}
+
+mwan3_get_iface_id()
+{
+       local _tmp
+       [ -z "$mwan3_iface_tbl" ] && mwan3_update_iface_to_table
+       _tmp="${mwan3_iface_tbl##* ${2}=}"
+       _tmp=${_tmp%% *}
+       export "$1=$_tmp"
+}
+
+mwan3_set_custom_ipset_v4()
+{
+       local custom_network_v4
+
+       for custom_network_v4 in $($IP4 route list table "$1" | awk '{print $1}' | grep -E "$IPv4_REGEX"); do
+               LOG notice "Adding network $custom_network_v4 from table $1 to mwan3_custom_v4 ipset"
+               mwan3_push_update -! add mwan3_custom_ipv4 "$custom_network_v4"
+       done
+}
+
+mwan3_set_custom_ipset_v6()
+{
+       local custom_network_v6
+
+       for custom_network_v6 in $($IP6 route list table "$1" | awk '{print $1}' | grep -E "$IPv6_REGEX"); do
+               LOG notice "Adding network $custom_network_v6 from table $1 to mwan3_custom_v6 ipset"
+               mwan3_push_update -! add mwan3_custom_ipv6 "$custom_network_v6"
+       done
+}
+
+mwan3_set_custom_ipset()
+{
+       local update=""
+
+       mwan3_push_update -! create mwan3_custom_ipv4 hash:net
+       mwan3_push_update flush mwan3_custom_ipv4
+       config_list_foreach "globals" "rt_table_lookup" mwan3_set_custom_ipset_v4
+
+       if [ $NO_IPV6 -eq 0 ]; then
+               mwan3_push_update -! create mwan3_custom_ipv6 hash:net family inet6
+               mwan3_push_update flush mwan3_custom_ipv6
+               config_list_foreach "globals" "rt_table_lookup" mwan3_set_custom_ipset_v6
+       fi
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_custom_ipset.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_custom_ipset: $error"
+}
+
+
+mwan3_set_connected_ipv4()
+{
+       local connected_network_v4 error
+       local candidate_list cidr_list
+       local update=""
+
+       mwan3_push_update -! create mwan3_connected_ipv4 hash:net
+       mwan3_push_update flush mwan3_connected_ipv4
+
+       candidate_list=""
+       cidr_list=""
+       route_lists()
+       {
+               $IP4 route | awk '{print $1}'
+               $IP4 route list table 0 | awk '{print $2}'
+       }
+       for connected_network_v4 in $(route_lists | grep -E "$IPv4_REGEX"); do
+               if [ -z "${connected_network_v4##*/*}" ]; then
+                       cidr_list="$cidr_list $connected_network_v4"
+               else
+                       candidate_list="$candidate_list $connected_network_v4"
+               fi
+       done
+
+       for connected_network_v4 in $cidr_list; do
+               mwan3_push_update -! add mwan3_connected_ipv4 "$connected_network_v4"
+       done
+       for connected_network_v4 in $candidate_list; do
+               mwan3_push_update -! add mwan3_connected_ipv4 "$connected_network_v4"
+       done
+
+       mwan3_push_update add mwan3_connected_ipv4 224.0.0.0/3
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_connected_ipv4.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_connected_ipv4: $error"
+}
+
+mwan3_set_connected_ipv6()
+{
+       local connected_network_v6 error
+       local update=""
+       [ $NO_IPV6 -eq 0 ] || return
+
+       mwan3_push_update -! create mwan3_connected_ipv6 hash:net family inet6
+       mwan3_push_update flush mwan3_connected_ipv6
+
+       for connected_network_v6 in $($IP6 route | awk '{print $1}' | grep -E "$IPv6_REGEX"); do
+               mwan3_push_update -! add mwan3_connected_ipv6 "$connected_network_v6"
+       done
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_connected_ipv6.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_connected_ipv6: $error"
+}
+
+mwan3_set_connected_ipset()
+{
+       local error
+       local update=""
+
+       mwan3_push_update -! create mwan3_connected_ipv4 hash:net
+       mwan3_push_update flush mwan3_connected_ipv4
+
+       if [ $NO_IPV6 -eq 0 ]; then
+               mwan3_push_update -! create mwan3_connected_ipv6 hash:net family inet6
+               mwan3_push_update flush mwan3_connected_ipv6
+       fi
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_connected_ipset.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_connected_ipset: $error"
+}
+
+mwan3_set_dynamic_ipset()
+{
+       local error
+       local update=""
+
+       mwan3_push_update -! create mwan3_dynamic_ipv4 list:set
+       mwan3_push_update flush mwan3_dynamic_ipv4
+
+       if [ $NO_IPV6 -eq 0 ]; then
+               mwan3_push_update -! create mwan3_dynamic_ipv6 hash:net family inet6
+               mwan3_push_update flush mwan3_dynamic_ipv6
+       fi
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_dynamic_ipset.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_dynamic_ipset: $error"
+}
+
+mwan3_set_general_rules()
+{
+       local IP
+
+       for IP in "$IP4" "$IP6"; do
+               [ "$IP" = "$IP6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               RULE_NO=$((MM_BLACKHOLE+2000))
+               if [ -z "$($IP rule list | awk -v var="$RULE_NO:" '$1 == var')" ]; then
+                       $IP rule add pref $RULE_NO fwmark $MMX_BLACKHOLE/$MMX_MASK blackhole
+               fi
+
+               RULE_NO=$((MM_UNREACHABLE+2000))
+               if [ -z "$($IP rule list | awk -v var="$RULE_NO:" '$1 == var')" ]; then
+                       $IP rule add pref $RULE_NO fwmark $MMX_UNREACHABLE/$MMX_MASK unreachable
+               fi
+       done
+}
+
+mwan3_set_general_iptables()
+{
+       local IPT current update error family
+
+       for IPT in "$IPT4" "$IPT6"; do
+               [ "$IPT" = "$IPT6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               current="$($IPT -S)"$'\n'
+               update="*mangle"
+               if [ -n "${current##*-N mwan3_ifaces_in*}" ]; then
+                       mwan3_push_update -N mwan3_ifaces_in
+               fi
+
+               if [ "$IPT" = "$IPT6" ]; then
+                       family="ipv6"
+               else
+                       family="ipv4"
+               fi
+
+               for chain in custom connected dynamic; do
+                       echo "${current}" | grep -q "\-N mwan3_${chain}_${family}$"
+                       local ret="$?"
+                       if [ "$ret" = 1 ]; then
+                               mwan3_push_update -N mwan3_${chain}_${family}
+                               mwan3_push_update -A mwan3_${chain}_${family} \
+                                       -m set --match-set mwan3_${chain}_${family} dst \
+                                       -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+                       fi
+               done
+
+               if [ -n "${current##*-N mwan3_rules*}" ]; then
+                       mwan3_push_update -N mwan3_rules
+               fi
+
+               if [ -n "${current##*-N mwan3_hook*}" ]; then
+                       mwan3_push_update -N mwan3_hook
+                       # do not mangle ipv6 ra service
+                       if [ "$IPT" = "$IPT6" ]; then
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 133 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 134 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 135 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 136 \
+                                                 -j RETURN
+                               mwan3_push_update -A mwan3_hook \
+                                                 -p ipv6-icmp \
+                                                 -m icmp6 --icmpv6-type 137 \
+                                                 -j RETURN
+
+                       fi
+                       mwan3_push_update -A mwan3_hook \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -j CONNMARK --restore-mark --nfmask "$MMX_MASK" --ctmask "$MMX_MASK"
+                       mwan3_push_update -A mwan3_hook \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -j mwan3_ifaces_in
+
+                       for chain in custom connected dynamic; do
+                               mwan3_push_update -A mwan3_hook \
+                                       -m mark --mark 0x0/$MMX_MASK \
+                                       -j mwan3_${chain}_${family}
+                       done
+
+                       mwan3_push_update -A mwan3_hook \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -j mwan3_rules
+                       mwan3_push_update -A mwan3_hook \
+                                         -j CONNMARK --save-mark --nfmask "$MMX_MASK" --ctmask "$MMX_MASK"
+
+                       for chain in custom connected dynamic; do
+                               mwan3_push_update -A mwan3_hook \
+                                       -m mark ! --mark $MMX_DEFAULT/$MMX_MASK \
+                                       -j mwan3_${chain}_${family}
+                       done
+               fi
+
+               if [ -n "${current##*-A PREROUTING -j mwan3_hook*}" ]; then
+                       mwan3_push_update -A PREROUTING -j mwan3_hook
+               fi
+               if [ -n "${current##*-A OUTPUT -j mwan3_hook*}" ]; then
+                       mwan3_push_update -A OUTPUT -j mwan3_hook
+               fi
+               mwan3_push_update COMMIT
+               mwan3_push_update ""
+
+               echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-set_general_iptables-${family}.dump"
+               if [ "$IPT" = "$IPT4" ]; then
+                       error=$(echo "$update" | $IPT4R 2>&1) || LOG error "set_general_iptables (${family}): $error"
+               else
+                       error=$(echo "$update" | $IPT6R 2>&1) || LOG error "set_general_iptables (${family}): $error"
+               fi
+       done
+}
+
+mwan3_create_iface_iptables()
+{
+       local id family IPT IPTR current update error
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+               IPTR="$IPT4R"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IPT="$IPT6"
+               IPTR="$IPT6R"
+       else
+               return
+       fi
+
+       current="$($IPT -S)"$'\n'
+       update="*mangle"
+       if [ -n "${current##*-N mwan3_ifaces_in*}" ]; then
+               mwan3_push_update -N mwan3_ifaces_in
+       fi
+
+       if [ -n "${current##*-N mwan3_iface_in_$1$'\n'*}" ]; then
+               mwan3_push_update -N "mwan3_iface_in_$1"
+       else
+               mwan3_push_update -F "mwan3_iface_in_$1"
+       fi
+
+       for chain in custom connected dynamic; do
+               mwan3_push_update -A "mwan3_iface_in_$1" \
+                       -i "$2" \
+                       -m set --match-set mwan3_${chain}_${family} src \
+                       -m mark --mark "0x0/$MMX_MASK" \
+                       -m comment --comment "default" \
+                       -j MARK --set-xmark "$MMX_DEFAULT/$MMX_MASK"
+       done
+       mwan3_push_update -A "mwan3_iface_in_$1" \
+                         -i "$2" \
+                         -m mark --mark "0x0/$MMX_MASK" \
+                         -m comment --comment "$1" \
+                         -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+
+       if [ -n "${current##*-A mwan3_ifaces_in -m mark --mark 0x0/$MMX_MASK -j mwan3_iface_in_${1}$'\n'*}" ]; then
+               mwan3_push_update -A mwan3_ifaces_in \
+                                 -m mark --mark 0x0/$MMX_MASK \
+                                 -j "mwan3_iface_in_$1"
+               LOG debug "create_iface_iptables: mwan3_iface_in_$1 not in iptables, adding"
+       else
+               LOG debug "create_iface_iptables: mwan3_iface_in_$1 already in iptables, skip"
+       fi
+
+       mwan3_push_update COMMIT
+       mwan3_push_update ""
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-create_iface_iptables-${1}.dump"
+       error=$(echo "$update" | $IPTR 2>&1) || LOG error "create_iface_iptables (${1}): $error"
+}
+
+mwan3_delete_iface_iptables()
+{
+       local IPT update
+       config_get family "$1" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+       fi
+
+       if [ "$family" = "ipv6" ]; then
+               [ $NO_IPV6 -ne 0 ] && return
+               IPT="$IPT6"
+       fi
+
+       update="*mangle"
+
+       mwan3_push_update -D mwan3_ifaces_in \
+               -m mark --mark 0x0/$MMX_MASK \
+               -j "mwan3_iface_in_$1" &> /dev/null
+       mwan3_push_update -F "mwan3_iface_in_$1" &> /dev/null
+       mwan3_push_update -X "mwan3_iface_in_$1" &> /dev/null
+
+       mwan3_push_update COMMIT
+       mwan3_push_update ""
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-delete_iface_iptables-${1}.dump"
+       error=$(echo "$update" | $IPTR 2>&1) || LOG error "delete_iface_iptables (${1}): $error"
+}
+
+mwan3_extra_tables_routes()
+{
+       $IP route list table "$1"
+}
+
+mwan3_get_routes()
+{
+       {
+               $IP route list table main
+               config_list_foreach "globals" "rt_table_lookup" mwan3_extra_tables_routes
+       } | sed -ne "$MWAN3_ROUTE_LINE_EXP" | sort -u
+}
+
+mwan3_create_iface_route()
+{
+       local tid route_line family IP id tbl
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ]; then
+               IP="$IP6"
+       fi
+
+       tbl=$($IP route list table $id 2>/dev/null)$'\n'
+       mwan3_update_dev_to_table
+       mwan3_get_routes | while read -r route_line; do
+               mwan3_route_line_dev "tid" "$route_line" "$family"
+               { [ -z "${route_line##default*}" ] || [ -z "${route_line##fe80::/64*}" ]; } && [ "$tid" != "$id" ] && continue
+               if [ -z "$tid" ] || [ "$tid" = "$id" ]; then
+                       # possible that routes are already in the table
+                       # if 'connected' was called after 'ifup'
+                       [ -n "$tbl" ] && [ -z "${tbl##*$route_line$'\n'*}" ] && continue
+                       $IP route add table $id $route_line ||
+                               LOG debug "Route '$route_line' already added to table $id"
+               fi
+
+       done
+}
+
+mwan3_delete_iface_route()
+{
+       local id family
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       if [ -z "$id" ]; then
+               LOG warn "delete_iface_route: could not find table id for interface $1"
+               return 0
+       fi
+
+       if [ "$family" = "ipv4" ]; then
+               $IP4 route flush table "$id"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               $IP6 route flush table "$id"
+       fi
+}
+
+mwan3_create_iface_rules()
+{
+       local id family IP
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IP="$IP6"
+       else
+               return
+       fi
+
+       mwan3_delete_iface_rules "$1"
+
+       $IP rule add pref $((id+1000)) iif "$2" lookup "$id"
+       $IP rule add pref $((id+2000)) fwmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK" lookup "$id"
+       $IP rule add pref $((id+3000)) fwmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK" unreachable
+}
+
+mwan3_delete_iface_rules()
+{
+       local id family IP rule_id
+
+       config_get family "$1" family ipv4
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IP="$IP6"
+       else
+               return
+       fi
+
+       for rule_id in $(ip rule list | awk '$1 % 1000 == '$id' && $1 > 1000 && $1 < 4000 {print substr($1,0,4)}'); do
+               $IP rule del pref $rule_id
+       done
+}
+
+mwan3_delete_iface_ipset_entries()
+{
+       local id setname entry
+
+       mwan3_get_iface_id id "$1"
+
+       [ -n "$id" ] || return 0
+
+       for setname in $(ipset -n list | grep ^mwan3_rule_); do
+               for entry in $(ipset list "$setname" | grep "$(mwan3_id2mask id MMX_MASK | awk '{ printf "0x%08x", $1; }')" | cut -d ' ' -f 1); do
+                       $IPS del "$setname" $entry ||
+                               LOG notice "failed to delete $entry from $setname"
+               done
+       done
+}
+
+
+mwan3_set_policy()
+{
+       local id iface family metric probability weight device is_lowest is_offline IPT IPTR total_weight current update error
+
+       is_lowest=0
+       config_get iface "$1" interface
+       config_get metric "$1" metric 1
+       config_get weight "$1" weight 1
+
+       [ -n "$iface" ] || return 0
+       network_get_device device "$iface"
+       [ "$metric" -gt $DEFAULT_LOWEST_METRIC ] && LOG warn "Member interface $iface has >$DEFAULT_LOWEST_METRIC metric. Not appending to policy" && return 0
+
+       mwan3_get_iface_id id "$iface"
+
+       [ -n "$id" ] || return 0
+
+       [ "$(mwan3_get_iface_hotplug_state "$iface")" = "online" ]
+       is_offline=$?
+
+       config_get family "$iface" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+               IPTR="$IPT4R"
+       elif [ "$family" = "ipv6" ]; then
+               IPT="$IPT6"
+               IPTR="$IPT6R"
+       fi
+       current="$($IPT -S)"$'\n'
+       update="*mangle"
+
+       if [ "$family" = "ipv4" ] && [ $is_offline -eq 0 ]; then
+               if [ "$metric" -lt "$lowest_metric_v4" ]; then
+                       is_lowest=1
+                       total_weight_v4=$weight
+                       lowest_metric_v4=$metric
+               elif [ "$metric" -eq "$lowest_metric_v4" ]; then
+                       total_weight_v4=$((total_weight_v4+weight))
+                       total_weight=$total_weight_v4
+               else
+                       return
+               fi
+       elif [ "$family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ] && [ $is_offline -eq 0 ]; then
+               if [ "$metric" -lt "$lowest_metric_v6" ]; then
+                       is_lowest=1
+                       total_weight_v6=$weight
+                       lowest_metric_v6=$metric
+               elif [ "$metric" -eq "$lowest_metric_v6" ]; then
+                       total_weight_v6=$((total_weight_v6+weight))
+                       total_weight=$total_weight_v6
+               else
+                       return
+               fi
+       fi
+       if [ $is_lowest -eq 1 ]; then
+               mwan3_push_update -F "mwan3_policy_$policy"
+               mwan3_push_update -A "mwan3_policy_$policy" \
+                                 -m mark --mark 0x0/$MMX_MASK \
+                                 -m comment --comment \"$iface $weight $weight\" \
+                                 -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+       elif [ $is_offline -eq 0 ]; then
+               probability=$((weight*1000/total_weight))
+               if [ "$probability" -lt 10 ]; then
+                       probability="0.00$probability"
+               elif [ $probability -lt 100 ]; then
+                       probability="0.0$probability"
+               elif [ $probability -lt 1000 ]; then
+                       probability="0.$probability"
+               else
+                       probability="1"
+               fi
+
+               mwan3_push_update -I "mwan3_policy_$policy" \
+                                 -m mark --mark 0x0/$MMX_MASK \
+                                 -m statistic \
+                                 --mode random \
+                                 --probability "$probability" \
+                                 -m comment --comment \"$iface $weight $total_weight\" \
+                                 -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+       elif [ -n "$device" ]; then
+               echo "$current" | grep -q "^-A mwan3_policy_$policy.*--comment .* [0-9]* [0-9]*" ||
+                       mwan3_push_update -I "mwan3_policy_$policy" \
+                                         -o "$device" \
+                                         -m mark --mark 0x0/$MMX_MASK \
+                                         -m comment --comment \"out $iface $device\" \
+                                         -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+       fi
+       mwan3_push_update COMMIT
+       mwan3_push_update ""
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-set_policy-${1}.dump"
+       error=$(echo "$update" | $IPTR 2>&1) || LOG error "set_policy ($1): $error"
+}
+
+mwan3_create_policies_iptables()
+{
+       local last_resort lowest_metric_v4 lowest_metric_v6 total_weight_v4 total_weight_v6 policy IPT current update error
+
+       policy="$1"
+
+       config_get last_resort "$1" last_resort unreachable
+
+       if [ "$1" != "$(echo "$1" | cut -c1-15)" ]; then
+               LOG warn "Policy $1 exceeds max of 15 chars. Not setting policy" && return 0
+       fi
+
+       for IPT in "$IPT4" "$IPT6"; do
+               [ "$IPT" = "$IPT6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               current="$($IPT -S)"$'\n'
+               update="*mangle"
+               if [ -n "${current##*-N mwan3_policy_$1$'\n'*}" ]; then
+                       mwan3_push_update -N "mwan3_policy_$1"
+               fi
+
+               mwan3_push_update -F "mwan3_policy_$1"
+
+               case "$last_resort" in
+                       blackhole)
+                               mwan3_push_update -A "mwan3_policy_$1" \
+                                                 -m mark --mark 0x0/$MMX_MASK \
+                                                 -m comment --comment "blackhole" \
+                                                 -j MARK --set-xmark $MMX_BLACKHOLE/$MMX_MASK
+                               ;;
+                       default)
+                               mwan3_push_update -A "mwan3_policy_$1" \
+                                                 -m mark --mark 0x0/$MMX_MASK \
+                                                 -m comment --comment "default" \
+                                                 -j MARK --set-xmark $MMX_DEFAULT/$MMX_MASK
+                               ;;
+                       *)
+                               mwan3_push_update -A "mwan3_policy_$1" \
+                                                 -m mark --mark 0x0/$MMX_MASK \
+                                                 -m comment --comment "unreachable" \
+                                                 -j MARK --set-xmark $MMX_UNREACHABLE/$MMX_MASK
+                               ;;
+               esac
+               mwan3_push_update COMMIT
+               mwan3_push_update ""
+
+               echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-create_policies_iptables-${1}.dump"
+               if [ "$IPT" = "$IPT4" ]; then
+                       error=$(echo "$update" | $IPT4R 2>&1) || LOG error "create_policies_iptables ($1): $error"
+               else
+                       error=$(echo "$update" | $IPT6R 2>&1) || LOG error "create_policies_iptables ($1): $error"
+               fi
+       done
+
+       lowest_metric_v4=$DEFAULT_LOWEST_METRIC
+       total_weight_v4=0
+
+       lowest_metric_v6=$DEFAULT_LOWEST_METRIC
+       total_weight_v6=0
+
+       config_list_foreach "$1" use_member mwan3_set_policy
+}
+
+mwan3_set_policies_iptables()
+{
+       config_foreach mwan3_create_policies_iptables policy
+}
+
+mwan3_set_sticky_iptables()
+{
+       local interface="${1}"
+       local rule="${2}"
+       local ipv="${3}"
+       local policy="${4}"
+
+       local id iface
+       for iface in $(echo "$current" | grep "^-A $policy" | cut -s -d'"' -f2 | awk '{print $1}'); do
+               if [ "$iface" = "$interface" ]; then
+
+                       mwan3_get_iface_id id "$iface"
+
+                       [ -n "$id" ] || return 0
+                       if [ -z "${current##*-N mwan3_iface_in_${iface}$'\n'*}" ]; then
+                               mwan3_push_update -I "mwan3_rule_$rule" \
+                                                 -m mark --mark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK" \
+                                                 -m set ! --match-set "mwan3_rule_${ipv}_${rule}" src,src \
+                                                 -j MARK --set-xmark "0x0/$MMX_MASK"
+                               mwan3_push_update -I "mwan3_rule_$rule" \
+                                                 -m mark --mark "0/$MMX_MASK" \
+                                                 -j MARK --set-xmark "$(mwan3_id2mask id MMX_MASK)/$MMX_MASK"
+                       fi
+               fi
+       done
+}
+
+mwan3_set_sticky_ipset()
+{
+       local rule="$1"
+       local mmx="$2"
+       local timeout="$3"
+
+       local error
+       local update=""
+
+       mwan3_push_update -! create "mwan3_rule_ipv4_$rule" \
+               hash:ip,mark markmask "$mmx" \
+               timeout "$timeout"
+
+       [ $NO_IPV6 -eq 0 ] &&
+               mwan3_push_update -! create "mwan3_rule_ipv6_$rule" \
+                       hash:ip,mark markmask "$mmx" \
+                       timeout "$timeout" family inet6
+
+       echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/ipset-set_sticky_ipset-${rule}.dump"
+       error=$(echo "$update" | $IPS restore 2>&1) || LOG error "set_sticky_ipset (${rule}): $error"
+}
+
+mwan3_set_user_iptables_rule()
+{
+       local ipset family proto policy src_ip src_port src_iface src_dev
+       local sticky dest_ip dest_port use_policy timeout policy
+       local global_logging rule_logging loglevel rule_policy rule ipv
+
+       rule="$1"
+       ipv="$2"
+       rule_policy=0
+       config_get sticky "$1" sticky 0
+       config_get timeout "$1" timeout 600
+       config_get ipset "$1" ipset
+       config_get proto "$1" proto all
+       config_get src_ip "$1" src_ip
+       config_get src_iface "$1" src_iface
+       config_get src_port "$1" src_port
+       config_get dest_ip "$1" dest_ip
+       config_get dest_port "$1" dest_port
+       config_get use_policy "$1" use_policy
+       config_get family "$1" family any
+       config_get rule_logging "$1" logging 0
+       config_get global_logging globals logging 0
+       config_get loglevel globals loglevel notice
+
+       [ "$ipv" = "ipv6" ] && [ $NO_IPV6 -ne 0 ] && return
+       [ "$family" = "ipv4" ] && [ "$ipv" = "ipv6" ] && return
+       [ "$family" = "ipv6" ] && [ "$ipv" = "ipv4" ] && return
+
+       for ipaddr in "$src_ip" "$dest_ip"; do
+               if [ -n "$ipaddr" ] && { { [ "$ipv" = "ipv4" ] && echo "$ipaddr" | grep -qE "$IPv6_REGEX"; } ||
+                                                { [ "$ipv" = "ipv6" ] && echo "$ipaddr" | grep -qE $IPv4_REGEX; } }; then
+                       LOG warn "invalid $ipv address $ipaddr specified for rule $rule"
+                       return
+               fi
+       done
+
+       if [ -n "$src_iface" ]; then
+               network_get_device src_dev "$src_iface"
+               if [ -z "$src_dev" ]; then
+                       LOG notice "could not find device corresponding to src_iface $src_iface for rule $1"
+                       return
+               fi
+       fi
+
+       [ -z "$dest_ip" ] && unset dest_ip
+       [ -z "$src_ip" ] && unset src_ip
+       [ -z "$ipset" ] && unset ipset
+       [ -z "$src_port" ] && unset src_port
+       [ -z "$dest_port" ] && unset dest_port
+       if [ "$proto" != 'tcp' ] && [ "$proto" != 'udp' ]; then
+               [ -n "$src_port" ] && {
+                       LOG warn "src_port set to '$src_port' but proto set to '$proto' not tcp or udp. src_port will be ignored"
+               }
+
+               [ -n "$dest_port" ] && {
+                       LOG warn "dest_port set to '$dest_port' but proto set to '$proto' not tcp or udp. dest_port will be ignored"
+               }
+               unset src_port
+               unset dest_port
+       fi
+
+       if [ "$1" != "$(echo "$1" | cut -c1-15)" ]; then
+               LOG warn "Rule $1 exceeds max of 15 chars. Not setting rule" && return 0
+       fi
+
+       if [ -n "$ipset" ]; then
+               ipset="-m set --match-set $ipset dst"
+       fi
+
+       if [ -z "$use_policy" ]; then
+               return
+       fi
+
+       if [ "$use_policy" = "default" ]; then
+               policy="MARK --set-xmark $MMX_DEFAULT/$MMX_MASK"
+       elif [ "$use_policy" = "unreachable" ]; then
+               policy="MARK --set-xmark $MMX_UNREACHABLE/$MMX_MASK"
+       elif [ "$use_policy" = "blackhole" ]; then
+               policy="MARK --set-xmark $MMX_BLACKHOLE/$MMX_MASK"
+       else
+               rule_policy=1
+               policy="mwan3_policy_$use_policy"
+               if [ "$sticky" -eq 1 ]; then
+                       mwan3_set_sticky_ipset "$rule" "$MMX_MASK" "$timeout"
+               fi
+       fi
+
+       if [ $rule_policy -eq 1 ] && [ -n "${current##*-N $policy$'\n'*}" ]; then
+               mwan3_push_update -N "$policy"
+       fi
+
+       if [ $rule_policy -eq 1 ] && [ "$sticky" -eq 1 ]; then
+               if [ -n "${current##*-N mwan3_rule_$1$'\n'*}" ]; then
+                       mwan3_push_update -N "mwan3_rule_$1"
+               fi
+
+               mwan3_push_update -F "mwan3_rule_$1"
+               config_foreach mwan3_set_sticky_iptables interface "$rule" "$ipv" "$policy"
+
+
+               mwan3_push_update -A "mwan3_rule_$1" \
+                                 -m mark --mark 0/$MMX_MASK \
+                                 -j "$policy"
+               mwan3_push_update -A "mwan3_rule_$1" \
+                                 -m mark ! --mark 0xfc00/0xfc00 \
+                                 -j SET --del-set "mwan3_rule_${ipv}_${rule}" src,src
+               mwan3_push_update -A "mwan3_rule_$1" \
+                                 -m mark ! --mark 0xfc00/0xfc00 \
+                                 -j SET --add-set "mwan3_rule_${ipv}_${rule}" src,src
+               policy="mwan3_rule_$1"
+       fi
+       if [ "$global_logging" = "1" ] && [ "$rule_logging" = "1" ]; then
+               mwan3_push_update -A mwan3_rules \
+                                 -p "$proto" \
+                                 ${src_ip:+-s} $src_ip \
+                                 ${src_dev:+-i} $src_dev \
+                                 ${dest_ip:+-d} $dest_ip \
+                                 $ipset \
+                                 ${src_port:+-m} ${src_port:+multiport} ${src_port:+--sports} $src_port \
+                                 ${dest_port:+-m} ${dest_port:+multiport} ${dest_port:+--dports} $dest_port \
+                                 -m mark --mark 0/$MMX_MASK \
+                                 -m comment --comment "$1" \
+                                 -j LOG --log-level "$loglevel" --log-prefix "MWAN3($1)"
+       fi
+
+       mwan3_push_update -A mwan3_rules \
+                         -p "$proto" \
+                         ${src_ip:+-s} $src_ip \
+                         ${src_dev:+-i} $src_dev \
+                         ${dest_ip:+-d} $dest_ip \
+                         $ipset \
+                         ${src_port:+-m} ${src_port:+multiport} ${src_port:+--sports} $src_port \
+                         ${dest_port:+-m} ${dest_port:+multiport} ${dest_port:+--dports} $dest_port \
+                         -m mark --mark 0/$MMX_MASK \
+                         -j $policy
+
+}
+
+mwan3_set_user_iface_rules()
+{
+       local current iface update family error device is_src_iface
+       iface=$1
+       device=$2
+
+       if [ -z "$device" ]; then
+               LOG notice "set_user_iface_rules: could not find device corresponding to iface $iface"
+               return
+       fi
+
+       config_get family "$iface" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IPT="$IPT4"
+               IPTR="$IPT4R"
+       elif [ "$family" = "ipv6" ]; then
+               IPT="$IPT6"
+               IPTR="$IPT6R"
+       fi
+       $IPT -S | grep -q "^-A mwan3_rules.*-i $device" && return
+
+       is_src_iface=0
+
+       iface_rule()
+       {
+               local src_iface
+               config_get src_iface "$1" src_iface
+               [ "$src_iface" = "$iface" ] && is_src_iface=1
+       }
+       config_foreach iface_rule rule
+       [ $is_src_iface -eq 1 ] && mwan3_set_user_rules
+}
+
+mwan3_set_user_rules()
+{
+       local IPT IPTR ipv
+       local current update error
+
+       for ipv in ipv4 ipv6; do
+               if [ "$ipv" = "ipv4" ]; then
+                       IPT="$IPT4"
+                       IPTR="$IPT4R"
+               elif [ "$ipv" = "ipv6" ]; then
+                       IPT="$IPT6"
+                       IPTR="$IPT6R"
+               fi
+               [ "$ipv" = "ipv6" ] && [ $NO_IPV6 -ne 0 ] && continue
+               update="*mangle"
+               current="$($IPT -S)"$'\n'
+
+
+               if [ -n "${current##*-N mwan3_rules*}" ]; then
+                       mwan3_push_update -N "mwan3_rules"
+               fi
+
+               mwan3_push_update -F mwan3_rules
+
+               config_foreach mwan3_set_user_iptables_rule rule "$ipv"
+
+               mwan3_push_update COMMIT
+               mwan3_push_update ""
+
+               echo "$update" > "${MWAN3_STATUS_IPTABLES_LOG_DIR}/iptables-set_user_rules-${ipv}.dump"
+               error=$(echo "$update" | $IPTR 2>&1) || LOG error "set_user_rules (${ipv}): $error"
+       done
+
+
+}
+
+mwan3_interface_hotplug_shutdown()
+{
+       local interface status device ifdown
+       interface="$1"
+       ifdown="$2"
+       [ -f $MWAN3TRACK_STATUS_DIR/$interface/STATUS ] && {
+               status=$(cat $MWAN3TRACK_STATUS_DIR/$interface/STATUS)
+       }
+
+       [ "$status" != "online" ] && [ "$ifdown" != 1 ] && return
+
+       if [ "$ifdown" = 1 ]; then
+               env -i ACTION=ifdown \
+                       INTERFACE=$interface \
+                       DEVICE=$device \
+                       sh /etc/hotplug.d/iface/15-mwan3
+       else
+               [ "$status" = "online" ] && {
+                       env -i MWAN3_SHUTDOWN="1" \
+                               ACTION="disconnected" \
+                               INTERFACE="$interface" \
+                               DEVICE="$device" /sbin/hotplug-call iface
+               }
+       fi
+
+}
+
+mwan3_interface_shutdown()
+{
+       mwan3_interface_hotplug_shutdown $1
+       mwan3_track_clean $1
+}
+
+mwan3_ifup()
+{
+       local interface=$1
+       local caller=$2
+
+       local up l3_device status true_iface
+
+       if [ "${caller}" = "cmd" ]; then
+               # It is not necessary to obtain a lock here, because it is obtained in the hotplug
+               # script, but we still want to do the check to print a useful error message
+               /etc/init.d/mwan3 running || {
+                       echo 'The service mwan3 is global disabled.'
+                       echo 'Please execute "/etc/init.d/mwan3 start" first.'
+                       exit 1
+               }
+               config_load mwan3
+       fi
+       mwan3_get_true_iface true_iface $interface
+       status=$(ubus -S call network.interface.$true_iface status)
+
+       [ -n "$status" ] && {
+               json_load "$status"
+               json_get_vars up l3_device
+       }
+       hotplug_startup()
+       {
+               env -i MWAN3_STARTUP=$caller ACTION=ifup \
+                   INTERFACE=$interface DEVICE=$l3_device \
+                   sh /etc/hotplug.d/iface/15-mwan3
+       }
+
+       if [ "$up" != "1" ] || [ -z "$l3_device" ]; then
+               return
+       fi
+
+       if [ "${caller}" = "init" ]; then
+               hotplug_startup &
+               hotplug_pids="$hotplug_pids $!"
+       else
+               hotplug_startup
+       fi
+
+}
+
+mwan3_set_iface_hotplug_state() {
+       local iface=$1
+       local state=$2
+
+       echo "$state" > "$MWAN3_STATUS_DIR/iface_state/$iface"
+}
+
+mwan3_get_iface_hotplug_state() {
+       local iface=$1
+
+       cat "$MWAN3_STATUS_DIR/iface_state/$iface" 2>/dev/null || echo "offline"
+}
+
+mwan3_report_iface_status()
+{
+       local device result tracking IP IPT error
+
+       mwan3_get_iface_id id "$1"
+       network_get_device device "$1"
+       config_get enabled "$1" enabled 0
+       config_get family "$1" family ipv4
+
+       if [ "$family" = "ipv4" ]; then
+               IP="$IP4"
+               IPT="$IPT4"
+       fi
+
+       if [ "$family" = "ipv6" ]; then
+               IP="$IP6"
+               IPT="$IPT6"
+       fi
+
+       if [ -z "$id" ] || [ -z "$device" ]; then
+               result="offline"
+       else
+               error=0
+               [ -n "$($IP rule | awk '$1 == "'$((id+1000)):'"')" ] ||
+                       error=$((error+1))
+               [ -n "$($IP rule | awk '$1 == "'$((id+2000)):'"')" ] ||
+                       error=$((error+2))
+               [ -n "$($IP rule | awk '$1 == "'$((id+3000)):'"')" ] ||
+                       error=$((error+4))
+               [ -n "$($IPT -S mwan3_iface_in_$1 2> /dev/null)" ] ||
+                       error=$((error+8))
+               [ -n "$($IP route list table $id default dev $device 2> /dev/null)" ] ||
+                       error=$((error+16))
+       fi
+
+       if [ "$result" = "offline" ]; then
+               :
+       elif [ $error -eq 0 ]; then
+               online=$(get_online_time "$1")
+               network_get_uptime uptime "$1"
+               online="$(printf '%02dh:%02dm:%02ds\n' $((online/3600)) $((online%3600/60)) $((online%60)))"
+               uptime="$(printf '%02dh:%02dm:%02ds\n' $((uptime/3600)) $((uptime%3600/60)) $((uptime%60)))"
+               result="$(mwan3_get_iface_hotplug_state $1) $online, uptime $uptime"
+       elif [ $error -gt 0 ] && [ $error -ne 31 ]; then
+               result="error (${error})"
+       elif [ "$enabled" = "1" ]; then
+               result="offline"
+       else
+               result="disabled"
+       fi
+
+       tracking="$(mwan3_get_mwan3track_status $1)"
+       echo " interface $1 is $result and tracking is $tracking"
+}
+
+mwan3_report_policies()
+{
+       local ipt="$1"
+       local policy="$2"
+
+       local percent total_weight weight iface
+
+       total_weight=$($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
+
+       if [ -n "${total_weight##*[!0-9]*}" ]; then
+               for iface in $($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '{print $1}'); do
+                       weight=$($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
+                       percent=$((weight*100/total_weight))
+                       echo " $iface ($percent%)"
+               done
+       else
+               echo " $($ipt -S "$policy" | grep -v '.*--comment "out .*" .*$' | sed '/.*--comment \([^ ]*\) .*$/!d;s//\1/;q')"
+       fi
+}
+
+mwan3_report_policies_v4()
+{
+       local policy
+
+       for policy in $($IPT4 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               echo "$policy:" | sed 's/mwan3_policy_//'
+               mwan3_report_policies "$IPT4" "$policy"
+       done
+}
+
+mwan3_report_policies_v6()
+{
+       local policy
+
+       for policy in $($IPT6 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               echo "$policy:" | sed 's/mwan3_policy_//'
+               mwan3_report_policies "$IPT6" "$policy"
+       done
+}
+
+mwan3_report_connected_v4()
+{
+       if [ -n "$($IPT4 -S mwan3_connected_ipv4 2> /dev/null)" ]; then
+               $IPS -o save list mwan3_connected_ipv4 | grep add | cut -d " " -f 3
+       fi
+}
+
+mwan3_report_connected_v6()
+{
+       if [ -n "$($IPT6 -S mwan3_connected_ipv6 2> /dev/null)" ]; then
+               $IPS -o save list mwan3_connected_ipv6 | grep add | cut -d " " -f 3
+       fi
+}
+
+mwan3_report_rules_v4()
+{
+       if [ -n "$($IPT4 -S mwan3_rules 2> /dev/null)" ]; then
+               $IPT4 -L mwan3_rules -n -v 2> /dev/null | tail -n+3 | sed 's/mark.*//' | sed 's/mwan3_policy_/- /' | sed 's/mwan3_rule_/S /'
+       fi
+}
+
+mwan3_report_rules_v6()
+{
+       if [ -n "$($IPT6 -S mwan3_rules 2> /dev/null)" ]; then
+               $IPT6 -L mwan3_rules -n -v 2> /dev/null | tail -n+3 | sed 's/mark.*//' | sed 's/mwan3_policy_/- /' | sed 's/mwan3_rule_/S /'
+       fi
+}
+
+mwan3_flush_conntrack()
+{
+       local interface="$1"
+       local action="$2"
+
+       handle_flush() {
+               local flush_conntrack="$1"
+               local action="$2"
+
+               if [ "$action" = "$flush_conntrack" ]; then
+                       echo f > ${CONNTRACK_FILE}
+                       LOG info "Connection tracking flushed for interface '$interface' on action '$action'"
+               fi
+       }
+
+       if [ -e "$CONNTRACK_FILE" ]; then
+               config_list_foreach "$interface" flush_conntrack handle_flush "$action"
+       fi
+}
+
+mwan3_track_clean()
+{
+       rm -rf "${MWAN3_STATUS_DIR:?}/${1}" &> /dev/null
+       rmdir --ignore-fail-on-non-empty "$MWAN3_STATUS_DIR"
+}
diff --git a/package/network/services/mwan3/files/usr/libexec/rpcd/mwan3 b/package/network/services/mwan3/files/usr/libexec/rpcd/mwan3
new file mode 100755 (executable)
index 0000000..3fce9b0
--- /dev/null
@@ -0,0 +1,232 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /usr/share/libubox/jshn.sh
+. /lib/mwan3/common.sh
+
+report_connected_v4() {
+       local address
+
+       if [ -n "$($IPT4 -S mwan3_connected_ipv4 2> /dev/null)" ]; then
+               for address in $($IPS -o save list mwan3_connected_ipv4 | grep add | cut -d " " -f 3); do
+                       json_add_string "" "${address}"
+               done
+       fi
+}
+
+report_connected_v6() {
+       [ $NO_IPV6 -ne 0 ] && return
+       local address
+
+       if [ -n "$($IPT6 -S mwan3_connected_ipv6 2> /dev/null)" ]; then
+               for address in $($IPS -o save list mwan3_connected_ipv6 | grep add | cut -d " " -f 3); do
+                       json_add_string "" "${address}"
+               done
+       fi
+}
+
+report_policies() {
+       local ipt="$1"
+       local policy="$2"
+
+       local percent total_weight weight iface
+
+       total_weight=$($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | head -1 | awk '{print $3}')
+
+       for iface in $($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '{print $1}'); do
+               weight=$($ipt -S $policy | grep -v '.*--comment "out .*" .*$' | cut -s -d'"' -f2 | awk '$1 == "'$iface'"' | awk '{print $2}')
+               percent=$(($weight*100/$total_weight))
+               json_add_object
+               json_add_string interface "$iface"
+               json_add_int percent "$percent"
+               json_close_object
+       done
+}
+
+report_policies_v4() {
+       local policy
+
+       for policy in $($IPT4 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               json_add_array "${policy##*mwan3_policy_}"
+               report_policies "$IPT4" "$policy"
+               json_close_array
+       done
+}
+
+report_policies_v6() {
+       [ $NO_IPV6 -ne 0 ] && return
+       local policy
+
+       for policy in $($IPT6 -S | awk '{print $2}' | grep mwan3_policy_ | sort -u); do
+               json_add_array "${policy##*mwan3_policy_}"
+               report_policies "$IPT6" "$policy"
+               json_close_array
+       done
+}
+
+get_age() {
+       local time_p time_u
+       iface="$1"
+       time_p="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TIME")"
+       [ -z "${time_p}" ] || {
+               time_n="$(get_uptime)"
+               echo $((time_n-time_p))
+       }
+}
+
+get_offline_time() {
+       local time_n time_d iface
+       iface="$1"
+       time_d="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/OFFLINE")"
+       [ -z "${time_d}" ] || [ "${time_d}" = "0" ] || {
+               time_n="$(get_uptime)"
+               echo $((time_n-time_d))
+       }
+}
+
+get_mwan3_status() {
+       local iface="${1}"
+       local iface_select="${2}"
+       local running="0"
+       local age=0
+       local online=0
+       local offline=0
+       local enabled time_p time_n time_u time_d status track_status up uptime
+
+       if [ "${iface}" != "${iface_select}" ] && [ "${iface_select}" != "" ]; then
+               return
+       fi
+
+       track_status="$(mwan3_get_mwan3track_status "$1")"
+       [ "$track_status" = "active" ] && running="1"
+       age=$(get_age "$iface")
+       online=$(get_online_time "$iface")
+       offline=$(get_offline_time "$iface")
+
+       config_get enabled "$iface" enabled 0
+
+       if [ -d "${MWAN3_STATUS_DIR}" ]; then
+               network_get_uptime uptime "$iface"
+               network_is_up "$iface" && up="1"
+               if [ -f "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS" ]; then
+                       status="$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/STATUS")"
+               else
+                       status="notracking"
+               fi
+       else
+               uptime=0
+               up=0
+               status="unknown"
+       fi
+
+       json_add_object "${iface}"
+       json_add_int age "$age"
+       json_add_int online "${online}"
+       json_add_int offline "${offline}"
+       json_add_int uptime "${uptime}"
+       json_add_int "score" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/SCORE")"
+       json_add_int "lost" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOST")"
+       json_add_int "turn" "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/TURN")"
+       json_add_string "status" "${status}"
+       json_add_boolean "enabled" "${enabled}"
+       json_add_boolean "running" "${running}"
+       json_add_boolean "up" "${up}"
+       json_add_array "track_ip"
+       for file in $MWAN3TRACK_STATUS_DIR/${iface}/TRACK_*; do
+               [ -z "${file#*/TRACK_OUTPUT}" ] && continue
+               [ -z "${file#*/TRACK_\*}" ] && continue
+               track="${file#*/TRACK_}"
+               json_add_object
+               json_add_string ip "${track}"
+               json_add_string status "$(cat "${file}")"
+               json_add_int latency "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LATENCY_${track}")"
+               json_add_int packetloss "$(cat "$MWAN3TRACK_STATUS_DIR/${iface}/LOSS_${track}")"
+               json_close_object
+       done
+       json_close_array
+       json_close_object
+}
+
+main () {
+
+       case "$1" in
+               list)
+                       json_init
+                       json_add_object "status"
+                       json_add_string "section" "x"
+                       json_add_string "interface" "x"
+                       json_add_string "policies" "x"
+                       json_close_object
+                       json_dump
+                       ;;
+               call)
+                       case "$2" in
+                       status)
+                               local section iface
+                               read input;
+                               json_load "$input"
+                               json_get_var section section
+                               json_get_var iface interface
+
+                               config_load mwan3
+                               json_init
+                               case "$section" in
+                                       interfaces)
+                                               json_add_object interfaces
+                                               config_foreach get_mwan3_status interface "${iface}"
+                                               json_close_object
+                                               ;;
+                                       connected)
+                                               json_add_object connected
+                                               json_add_array ipv4
+                                               report_connected_v4
+                                               json_close_array
+                                               json_add_array ipv6
+                                               report_connected_v6
+                                               json_close_array
+                                               json_close_object
+                                               ;;
+                                       policies)
+                                               json_add_object policies
+                                               json_add_object ipv4
+                                               report_policies_v4
+                                               json_close_object
+                                               json_add_object ipv6
+                                               report_policies_v6
+                                               json_close_object
+                                               json_close_object
+                                               ;;
+                                       *)
+                                               # interfaces
+                                               json_add_object interfaces
+                                               config_foreach get_mwan3_status interface
+                                               json_close_object
+                                               # connected
+                                               json_add_object connected
+                                               json_add_array ipv4
+                                               report_connected_v4
+                                               json_close_array
+                                               json_add_array ipv6
+                                               report_connected_v6
+                                               json_close_array
+                                               json_close_object
+                                               # policies
+                                               json_add_object policies
+                                               json_add_object ipv4
+                                               report_policies_v4
+                                               json_close_object
+                                               json_add_object ipv6
+                                               report_policies_v6
+                                               json_close_object
+                                               json_close_object
+                                               ;;
+                               esac
+                               json_dump
+                               ;;
+                       esac
+                       ;;
+       esac
+}
+
+main "$@"
diff --git a/package/network/services/mwan3/files/usr/sbin/mwan3 b/package/network/services/mwan3/files/usr/sbin/mwan3
new file mode 100755 (executable)
index 0000000..ea3d4c6
--- /dev/null
@@ -0,0 +1,253 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+command_help() {
+       local cmd="$1"
+       local help="$2"
+
+       echo "$(printf "%-25s%s" "${cmd}" "${help}")"
+}
+
+help()
+{
+       cat <<EOF
+Syntax: mwan3 [command]
+
+Available commands:
+EOF
+       command_help "start" "Load iptables rules, ip rules and ip routes"
+       command_help "stop" "Unload iptables rules, ip rules and ip routes"
+       command_help "restart" "Reload iptables rules, ip rules and ip routes"
+       command_help "ifup <iface>" "Load rules and routes for specific interface"
+       command_help "ifdown <iface>" "Unload rules and routes for specific interface"
+       command_help "interfaces" "Show interfaces status"
+       command_help "policies" "Show currently active policy"
+       command_help "connected" "Show directly connected networks"
+       command_help "rules" "Show active rules"
+       command_help "status" "Show all status"
+       command_help "internal <ipv4|ipv6>" "Show internal configuration <default: ipv4>"
+       command_help "use <iface> <cmd>" "Run a command bound to <iface> and avoid mwan3 rules"
+}
+
+ifdown() {
+       if [ -z "$1" ]; then
+               echo "Error: Expecting interface. Usage: mwan3 ifdown <interface>"
+               exit 0
+       fi
+
+       if [ -n "$2" ]; then
+               echo "Error: Too many arguments. Usage: mwan3 ifdown <interface>"
+               exit 0
+       fi
+
+       mwan3_interface_hotplug_shutdown "$1" 1
+}
+
+ifup() {
+       . /etc/init.d/mwan3
+
+       if [ -z "$1" ]; then
+               echo "Expecting interface. Usage: mwan3 ifup <interface>"
+               exit 0
+       fi
+
+       if [ -n "$2" ]; then
+               echo "Too many arguments. Usage: mwan3 ifup <interface>"
+               exit 0
+       fi
+
+       mwan3_ifup "$1" "cmd"
+}
+
+interfaces()
+{
+       config_load mwan3
+
+       echo "Interface status:"
+       config_foreach mwan3_report_iface_status interface
+       echo
+}
+
+policies()
+{
+       echo "Current ipv4 policies:"
+       mwan3_report_policies_v4
+       echo
+       [ $NO_IPV6 -ne 0 ] && return
+       echo "Current ipv6 policies:"
+       mwan3_report_policies_v6
+       echo
+}
+
+connected()
+{
+       echo "Directly connected ipv4 networks:"
+       mwan3_report_connected_v4
+       echo
+       [ $NO_IPV6 -ne 0 ] && return
+       echo "Directly connected ipv6 networks:"
+       mwan3_report_connected_v6
+       echo
+}
+
+rules()
+{
+       echo "Active ipv4 user rules:"
+       mwan3_report_rules_v4
+       echo
+       [ $NO_IPV6 -ne 0 ] && return
+       echo "Active ipv6 user rules:"
+       mwan3_report_rules_v6
+       echo
+}
+
+status()
+{
+       interfaces
+       policies
+       connected
+       rules
+}
+
+internal()
+{
+       local family="$1"
+       local dash="-------------------------------------------------"
+
+       if [ -f "/etc/openwrt_release" ]; then
+               . /etc/openwrt_release
+       fi
+
+       local ipt ip output
+
+       if [ "$family" = "ipv6" ]; then
+               ipt="$IPT6"
+               ip="$IP6"
+       else
+               ipt="$IPT4"
+               ip="$IP4"
+       fi
+
+       echo "Software-Version"
+       echo "$dash"
+
+       if [ "$DISTRIB_RELEASE" != "" ]; then
+               echo "OpenWrt - $DISTRIB_RELEASE"
+       else
+               echo "OpenWrt - unknown"
+       fi
+
+       echo ""
+       echo "Output of \"$ip a show\""
+       echo "$dash"
+       output="$($ip a show)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+
+       echo ""
+       echo "Output of \"$ip route show\""
+       echo "$dash"
+       output="$($ip route show)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+
+       echo ""
+       echo "Output of \"$ip rule show\""
+       echo "$dash"
+       output="$($ip rule show)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+
+       echo ""
+       echo "Output of \"$ip route list table 1-250\""
+       echo "$dash"
+       local dump=0
+       for i in $(seq 1 250); do
+               output=$($ip route list table $i 2>/dev/null)
+               if [ "$output" != "" ];then
+                       dump=1
+                       echo "Routing table $i:"
+                       echo "$output"
+                       echo ""
+               fi
+       done
+       if [ "$dump" = "0" ]; then
+               echo "No data found"
+               echo ""
+       fi
+
+       echo "Output of \"$ipt -L -v -n\""
+       echo "$dash"
+       output="$($ipt -L -v -n)"
+       if [ "$output" != "" ]; then
+               echo "$output"
+       else
+               echo "No data found"
+       fi
+}
+
+start() {
+       /etc/init.d/mwan3 enable
+       /etc/init.d/mwan3 start
+}
+
+stop() {
+       /etc/init.d/mwan3 disable
+       /etc/init.d/mwan3 stop
+}
+
+restart() {
+       /etc/init.d/mwan3 enable
+       /etc/init.d/mwan3 stop
+       /etc/init.d/mwan3 start
+}
+
+use() {
+       # Run a command with the device, src_ip and fwmark set to avoid processing by mwan3
+       # firewall rules
+
+       local interface device src_ip family
+       mwan3_init
+
+       interface=$1 ; shift
+       [ -z "$*" ] && echo "no command specified for mwan3 use" && return
+       network_get_device device $interface
+       [ -z "$device" ] && echo "could not find device for $interface" && return
+
+       mwan3_get_src_ip src_ip $interface
+       [ -z "$src_ip" ] && echo "could not find src_ip for $interface" && return
+
+       config_get family $interface family
+       [ -z "$family" ] && echo "could not find family for $interface. Using ipv4." && family='ipv4'
+
+       echo "Running '$*' with DEVICE=$device SRCIP=$src_ip FWMARK=$MMX_DEFAULT FAMILY=$family"
+       # shellcheck disable=SC2048
+       FAMILY=$family DEVICE=$device SRCIP=$src_ip FWMARK=$MMX_DEFAULT LD_PRELOAD=/lib/mwan3/libwrap_mwan3_sockopt.so.1.0 $*
+
+}
+
+case "$1" in
+       ifup|ifdown|interfaces|policies|connected|rules|status|start|stop|restart|use|internal)
+               mwan3_init
+               # shellcheck disable=SC2048
+               $*
+       ;;
+       *)
+               help
+       ;;
+esac
+
+exit 0
diff --git a/package/network/services/mwan3/files/usr/sbin/mwan3rtmon b/package/network/services/mwan3/files/usr/sbin/mwan3rtmon
new file mode 100755 (executable)
index 0000000..d8ccffe
--- /dev/null
@@ -0,0 +1,172 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/mwan3.sh
+
+trap_with_arg()
+{
+       func="$1" ; shift
+       pid="$1" ; shift
+       for sig ; do
+               # shellcheck disable=SC2064
+               trap "$func $sig $pid" "$sig"
+       done
+}
+
+func_trap()
+{
+       kill -${1} ${2} 2>/dev/null
+}
+
+mwan3_add_all_routes()
+{
+       local tid IP IPT route_line family active_tbls tid initial_state error
+       local ipv=$1
+
+       add_active_tbls()
+       {
+               let tid++
+               config_get family "$1" family ipv4
+               config_get initial_state "$1" initial_state "online"
+               [ "$family" != "$ipv" ] && return
+               if $IPT -S "mwan3_iface_in_$1" &> /dev/null; then
+                       active_tbls="$active_tbls${tid} "
+               fi
+       }
+
+       add_route()
+       {
+               let tid++
+               [ -n "${active_tbls##* $tid *}" ] && return
+               error=$($IP route add table $tid $route_line 2>&1) ||
+                       LOG warn "failed to add $route_line to table $tid - error: $error"
+       }
+
+       mwan3_update_dev_to_table
+       [ "$ipv" = "ipv6" ] && [ $NO_IPV6 -ne 0 ] && return
+       if [ "$ipv" = "ipv4" ]; then
+               IP="$IP4"
+               IPT="$IPT4"
+       elif [ "$ipv" = "ipv6" ]; then
+               IP="$IP6"
+               IPT="$IPT6"
+       fi
+       tid=0
+       active_tbls=" "
+       config_foreach add_active_tbls interface
+       [ "$active_tbls" = " " ] && return
+       mwan3_get_routes | while read -r route_line; do
+               mwan3_route_line_dev "tid" "$route_line" "$ipv"
+               if [ -n "$tid" ] && [ -z "${active_tbls##* $tid *}" ]; then
+                       $IP route add table $tid $route_line
+               elif [ -n "${route_line##default*}" ] && [ -n "${route_line##fe80::/64*}" ]; then
+                       config_foreach add_route interface
+               fi
+       done
+}
+
+mwan3_rtmon_route_handle()
+{
+       local action route_line family tbl device line tid
+
+       route_line=${1##"Deleted "}
+       route_family=$2
+
+       if [ "$route_line" = "$1" ]; then
+               action="replace"
+               $IPS -! add mwan3_connected_${route_family} ${route_line%% *}
+       else
+               action="del"
+               mwan3_set_connected_${route_family}
+       fi
+
+       if [ -z "${route_line##*linkdown*}" ]; then
+               LOG debug "attempting to add link on down interface - $route_line"
+       fi
+
+       if [ "$route_family" = "ipv4" ]; then
+               IP="$IP4"
+       elif [ "$route_family" = "ipv6" ] && [ $NO_IPV6 -eq 0 ]; then
+               IP="$IP6"
+       else
+               LOG warn "route update called with invalid family - $route_family"
+               return
+       fi
+       route_line=$(echo "$route_line" | sed -ne "$MWAN3_ROUTE_LINE_EXP")
+
+       handle_route() {
+               local error
+               local iface=$1
+               tbl=$($IP route list table $tid 2>/dev/null)$'\n'
+
+               if [ -n "$iface" ] && [ "$(mwan3_get_mwan3track_status $iface)" != "active" ]; then
+                       LOG debug "interface $iface is disabled - skipping '$route_line'";
+                       return
+               fi
+
+               # check that action needs to be performed. May not need to take action if we
+               # got a delete event, but table was already flushed
+               if [ $action = "del" ] && [ -n "${tbl##*$route_line$'\n'*}" ]; then
+                       LOG debug "skipping already deleted route table $tid - skipping '$route_line'"
+                       return
+               fi
+
+               network_get_device device "$iface"
+               LOG debug "adjusting route $device: '$IP route $action table $tid $route_line'"
+               error=$($IP route "$action" table $tid $route_line 2>&1)||
+                       LOG warn "failed: '$IP route $action table $tid $route_line' - error: $error"
+       }
+       handle_route_cb(){
+               local iface=$1
+               let tid++
+               config_get family "$iface" family ipv4
+               [ "$family" != "$route_family" ] && return
+               handle_route "$iface"
+       }
+
+       mwan3_update_dev_to_table
+       mwan3_route_line_dev "tid" "$route_line" "$route_family"
+
+       if [ -n "$tid" ]; then
+               handle_route
+       elif [ -n "${route_line##default*}" ] && [ -n "${route_line##fe80::/64*}" ]; then
+               config_foreach handle_route_cb interface
+       fi
+}
+
+main()
+{
+       local IP family
+
+       mwan3_init
+
+       family=$1
+       [ -z $family ] && family=ipv4
+       if [ "$family" = "ipv6" ]; then
+               if [ $NO_IPV6 -ne 0 ]; then
+                       LOG warn "mwan3rtmon started for ipv6, but ipv6 not enabled on system"
+                       exit 1
+               fi
+               IP="$IP6"
+       else
+               IP="$IP4"
+       fi
+       sh -c "echo \$\$; exec $IP monitor route" | {
+               read -r monitor_pid
+               trap_with_arg func_trap "$monitor_pid" SIGINT SIGTERM SIGKILL
+               KILL -SIGSTOP $$
+               while IFS='' read -r line; do
+                       [ -z "${line##*table*}" ] && continue
+                       LOG debug "handling route update $family '$line'"
+                       mwan3_rtmon_route_handle "$line" "$family"
+               done
+       } &
+       child=$!
+       trap_with_arg func_trap "$child" SIGINT SIGTERM SIGKILL
+       mwan3_set_connected_${family}
+       mwan3_add_all_routes ${family}
+       kill -SIGCONT $child
+       wait $child
+}
+main "$@"
diff --git a/package/network/services/mwan3/files/usr/sbin/mwan3track b/package/network/services/mwan3/files/usr/sbin/mwan3track
new file mode 100755 (executable)
index 0000000..162bdbb
--- /dev/null
@@ -0,0 +1,413 @@
+#!/bin/sh
+
+. /lib/functions.sh
+. /lib/functions/network.sh
+. /lib/mwan3/common.sh
+
+INTERFACE=""
+DEVICE=""
+
+IFDOWN_EVENT=0
+IFUP_EVENT=0
+
+stop_subprocs() {
+       [ -n "$SLEEP_PID" ] && kill "$SLEEP_PID" && unset SLEEP_PID
+       [ -n "$TRACK_PID" ] && kill "$TRACK_PID" && unset TRACK_PID
+}
+
+WRAP() {
+       # shellcheck disable=SC2048
+       FAMILY=$FAMILY DEVICE=$DEVICE SRCIP=$SRC_IP FWMARK=$MMX_DEFAULT LD_PRELOAD=/lib/mwan3/libwrap_mwan3_sockopt.so.1.0 $*
+}
+
+clean_up() {
+       LOG notice "Stopping mwan3track for interface \"${INTERFACE}\". Status was \"${STATUS}\""
+       stop_subprocs
+       exit 0
+}
+
+if_down() {
+       LOG info "Detect ifdown event on interface ${INTERFACE} (${DEVICE})"
+       IFDOWN_EVENT=1
+       stop_subprocs
+}
+
+if_up() {
+       LOG info "Detect ifup event on interface ${INTERFACE} (${DEVICE})"
+       IFDOWN_EVENT=0
+       IFUP_EVENT=1
+       STARTED=1
+       stop_subprocs
+}
+
+ping_test_host() {
+       if [ "$FAMILY" = "ipv6" ]; then
+               echo "::1"
+       else
+               echo "127.0.0.1"
+       fi
+}
+
+get_ping_command() {
+       if [ -x "/usr/bin/ping" ] && /usr/bin/ping -${FAMILY#ipv} -c1 -q $(ping_test_host) &>/dev/null; then
+               # -4 option added in iputils c3e68ac6 so need to check if we can use it
+               # or if we must use ping and ping6
+               echo "/usr/bin/ping -${FAMILY#ipv}"
+       elif [ "$FAMILY" = "ipv6" ] && [ -x "/usr/bin/ping6" ]; then
+               echo "/usr/bin/ping6"
+       elif [ "$FAMILY" = "ipv4" ] && [ -x "/usr/bin/ping" ]; then
+               echo "/usr/bin/ping"
+       elif [ -x "/bin/ping" ]; then
+               echo "/bin/ping -${FAMILY#ipv}"
+       else
+               return 1
+       fi
+}
+
+validate_track_method() {
+       case "$1" in
+               ping)
+                       PING=$(get_ping_command)
+                       if [ $? -ne 0 ]; then
+                               LOG warn "Missing ping. Please enable BUSYBOX_DEFAULT_PING and recompile busybox or install iputils-ping package."
+                               return 1
+                       fi
+                       ;;
+               arping)
+                       command -v arping 1>/dev/null 2>&1 || {
+                               LOG warn "Missing arping. Please install iputils-arping package."
+                               return 1
+                       }
+                       ;;
+               httping)
+                       command -v httping 1>/dev/null 2>&1 || {
+                               LOG warn "Missing httping. Please install httping package."
+                               return 1
+                       }
+                       ;;
+               nping-*)
+                       command -v nping 1>/dev/null 2>&1 || {
+                               LOG warn "Missing nping. Please install nping package."
+                               return 1
+                       }
+                       ;;
+               *)
+                       LOG warn "Unsupported tracking method: $track_method"
+                       return 2
+                       ;;
+       esac
+}
+
+validate_wrap() {
+       [ -x /lib/mwan3/libwrap_mwan3_sockopt.so.1.0 ] && return
+       LOG error "Missing libwrap_mwan3_sockopt. Please reinstall mwan3." &&
+               exit 1
+}
+
+disconnected() {
+       local status="$(cat ${MWAN3TRACK_STATUS_DIR}/${INTERFACE}/STATUS)"
+
+       STATUS='offline'
+       echo "offline" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+       get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/OFFLINE
+       echo "0" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/ONLINE
+       score=0
+       [ "$1" = 1 ] && return
+
+       # Only execute disconnectd action if status was online or disconnecting
+       if [ "$status" = "online" ] || [ "$status" = "disconnecting" ]; then
+               LOG notice "Interface $INTERFACE ($DEVICE) is offline"
+               env -i ACTION="disconnected" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+       else
+               LOG notice "Skip disconnected event for $INTERFACE ($DEVICE)"
+       fi
+}
+
+connected() {
+       STATUS='online'
+       echo "online" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+       echo "0" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/OFFLINE
+       get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/ONLINE
+       score=$((down+up))
+       host_up_count=0
+       lost=0
+       turn=0
+       loss=0
+       LOG notice "Interface $INTERFACE ($DEVICE) is online"
+       env -i FIRSTCONNECT=$1 ACTION="connected" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+}
+
+disconnecting() {
+       if [ "$STATUS" != "disconnecting" ] ; then
+               STATUS="disconnecting"
+               echo "disconnecting" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+               LOG notice "Interface $INTERFACE ($DEVICE) is disconnecting"
+               env -i ACTION="disconnecting" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+       fi
+}
+
+connecting() {
+       if [ "$STATUS" != "connecting" ] ; then
+               STATUS="connecting"
+               echo "connecting" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+               LOG notice "Interface $INTERFACE ($DEVICE) is connecting"
+               env -i ACTION="connecting" INTERFACE="$INTERFACE" DEVICE="$DEVICE" /sbin/hotplug-call iface
+       fi
+}
+
+disabled() {
+       STATUS='disabled'
+       echo "disabled" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+       STARTED=0
+}
+
+firstconnect() {
+       local true_iface
+       network_flush_cache
+
+       mwan3_get_true_iface true_iface $INTERFACE
+       network_get_device DEVICE $true_iface
+
+       if [ "$STATUS" != "online" ]; then
+               config_get STATUS $INTERFACE initial_state "online"
+       fi
+
+       if ! network_is_up $true_iface || [ -z "$DEVICE" ]; then
+               disabled
+               return
+       fi
+
+       mwan3_get_src_ip SRC_IP $INTERFACE
+
+       LOG debug "firstconnect: called on $INTERFACE/$true_iface ($DEVICE). Status is $STATUS. SRC_IP is $SRC_IP"
+
+       STARTED=1
+       if [ "$STATUS" = "offline" ]; then
+               disconnected 1
+       else
+               connected 1
+       fi
+}
+
+update_status() {
+       local track_ip=$1
+
+       echo "$2" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_${track_ip}
+       [ -z "$3" ] && return
+       echo "$3" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/LATENCY_${track_ip}
+       echo "$4" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/LOSS_${track_ip}
+}
+
+main() {
+       local reliability count timeout interval failure_interval
+       local recovery_interval down up size
+       local keep_failure_interval check_quality failure_latency
+       local recovery_latency failure_loss recovery_loss
+
+       local max_ttl httping_ssl track_ips do_log
+
+       INTERFACE=$1
+       STATUS=""
+       STARTED=0
+       TRACK_OUTPUT=$MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_OUTPUT
+
+       mwan3_init
+
+       mkdir -p $MWAN3TRACK_STATUS_DIR/$INTERFACE
+
+       trap clean_up TERM
+       trap if_down USR1
+       trap if_up USR2
+
+       config_get FAMILY $INTERFACE family ipv4
+       config_get track_method $INTERFACE track_method ping
+       config_get_bool httping_ssl $INTERFACE httping_ssl 0
+       validate_track_method $track_method || {
+               track_method=ping
+               if validate_track_method $track_method; then
+                       LOG warn "Using ping to track interface $INTERFACE avaliability"
+               else
+                       LOG err "No track method avaliable"
+                       exit 1
+               fi
+       }
+       config_get reliability $INTERFACE reliability 1
+       config_get count $INTERFACE count 1
+       config_get timeout $INTERFACE timeout 4
+       config_get interval $INTERFACE interval 10
+       config_get down $INTERFACE down 5
+       config_get up $INTERFACE up 5
+       config_get size $INTERFACE size 56
+       config_get max_ttl $INTERFACE max_ttl 60
+       config_get failure_interval $INTERFACE failure_interval $interval
+       config_get_bool keep_failure_interval $INTERFACE keep_failure_interval 0
+       config_get recovery_interval $INTERFACE recovery_interval $interval
+       config_get_bool check_quality $INTERFACE check_quality 0
+       config_get failure_latency $INTERFACE failure_latency 1000
+       config_get recovery_latency $INTERFACE recovery_latency 500
+       config_get failure_loss $INTERFACE failure_loss 40
+       config_get recovery_loss $INTERFACE recovery_loss 10
+       local sleep_time result ping_status loss latency
+       mwan3_list_track_ips()
+       {
+               track_ips="$track_ips $1"
+       }
+       config_list_foreach "$1" track_ip mwan3_list_track_ips
+
+       local score=$((down+up))
+       local host_up_count=0
+       local lost=0
+       local turn=0
+
+       firstconnect
+       while true; do
+               [ $STARTED -eq 0 ] && { sleep $MAX_SLEEP & SLEEP_PID=$!; wait; }
+               unset SLEEP_PID
+               sleep_time=$interval
+               for track_ip in $track_ips; do
+                       if [ $host_up_count -lt $reliability ]; then
+                               case "$track_method" in
+                                       ping)
+                                               if [ $check_quality -eq 0 ]; then
+                                                       WRAP $PING -n -c $count -W $timeout -s $size -t $max_ttl -q $track_ip &> /dev/null &
+                                                       TRACK_PID=$!
+                                                       wait $TRACK_PID
+                                                       result=$?
+                                               else
+                                                       WRAP $PING -n -c $count -W $timeout -s $size -t $max_ttl -q $track_ip 2>/dev/null > $TRACK_OUTPUT &
+                                                       TRACK_PID=$!
+                                                       wait $TRACK_PID
+                                                       ping_status=$?
+                                                       loss="$(sed $TRACK_OUTPUT -ne 's/.*\([0-9]\+\)% packet loss.*/\1/p')"
+                                                       if [ "$ping_status" -ne 0 ] || [ "$loss" -eq 100 ]; then
+                                                               latency=999999
+                                                               loss=100
+                                                       else
+                                                               latency="$(sed $TRACK_OUTPUT -ne 's%\(rtt\|round-trip\).* = [^/]*/\([0-9]\+\).*%\2%p')"
+                                                       fi
+                                               fi
+                                       ;;
+                                       arping)
+                                               WRAP arping -I $DEVICE -c $count -w $timeout -q $track_ip &> /dev/null &
+                                               TRACK_PID=$!
+                                               wait $TRACK_PID
+                                               result=$?
+                                       ;;
+                                       httping)
+                                               if [ "$httping_ssl" -eq 1 ]; then
+                                                       WRAP httping -c $count -t $timeout -q "https://$track_ip" &> /dev/null &
+                                               else
+                                                       WRAP httping -c $count -t $timeout -q "http://$track_ip" &> /dev/null &
+                                               fi
+                                               TRACK_PID=$!
+                                               wait $TRACK_PID
+                                               result=$?
+                                       ;;
+                                       nping-*)
+                                               WRAP nping -c $count $track_ip --${FAMILY#nping-} > $TRACK_OUTPUT &
+                                               TRACK_PID=$!
+                                               wait $TRACK_PID
+                                               result=$(grep $TRACK_OUTPUT Lost | awk '{print $12}')
+                                       ;;
+                               esac
+                               do_log=""
+                               if [ $check_quality -eq 0 ]; then
+                                       if [ $result -eq 0 ]; then
+                                               let host_up_count++
+                                               update_status "$track_ip" "up"
+
+                                               [ $score -le $up ] && do_log="success"
+                                       else
+                                               let lost++
+                                               update_status "$track_ip" "down"
+
+                                               [ $score -gt $up ] && do_log="failed"
+                                       fi
+                                       [ -n "$do_log" ] && LOG info "Check ($track_method) ${do_log} for target \"$track_ip\" on interface $INTERFACE ($DEVICE). Current score: $score"
+
+                               else
+                                       if [ "$loss" -ge "$failure_loss" ] || [ "$latency" -ge "$failure_latency" ]; then
+                                               let lost++
+                                               update_status "$track_ip" "down" $latency $loss
+
+                                               [ $score -gt $up ] && do_log="failed"
+                                       elif [ "$loss" -le "$recovery_loss" ] && [ "$latency" -le "$recovery_latency" ]; then
+                                               let host_up_count++
+                                               update_status "$track_ip" "up" $latency $loss
+
+                                               [ $score -le $up ] && do_log="success"
+                                       else
+                                               echo "skipped" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_${track_ip}
+                                       fi
+                                       [ -n "$do_log" ] && LOG info "Check (${track_method}: latency=${latency}ms loss=${loss}%) ${do_log} for target \"$track_ip\" on interface $INTERFACE ($DEVICE). Current score: $score"
+                               fi
+                       else
+                               echo "skipped" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TRACK_${track_ip}
+                       fi
+               done
+
+               if [ $host_up_count -lt $reliability ]; then
+                       let score--
+
+                       if [ $score -lt $up ]; then
+                               score=0
+                               [ ${keep_failure_interval} -eq 1 ] && sleep_time=$failure_interval
+                       elif [ $score -eq $up ]; then
+                               disconnecting
+                               sleep_time=$failure_interval
+                               disconnected
+                       elif [ $score -gt $up ]; then
+                               disconnecting
+                               sleep_time=$failure_interval
+                       fi
+               else
+                       if [ $score -lt $((down+up)) ] && [ $lost -gt 0 ]; then
+                               LOG info "Lost $((lost*count)) ping(s) on interface $INTERFACE ($DEVICE). Current score: $score"
+                       fi
+
+                       let score++
+                       lost=0
+
+                       if [ $score -lt $up ]; then
+                               connecting
+                               sleep_time=$recovery_interval
+                       elif [ $score -eq $up ]; then
+                               connecting
+                               sleep_time=$recovery_interval
+                               connected
+                       elif [ $score -gt $up ]; then
+                               echo "online" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/STATUS
+                               score=$((down+up))
+                       fi
+               fi
+
+               let turn++
+               mkdir -p "$MWAN3TRACK_STATUS_DIR/${1}"
+               echo "${lost}" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/LOST
+               echo "${score}" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/SCORE
+               echo "${turn}" > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TURN
+               get_uptime > $MWAN3TRACK_STATUS_DIR/$INTERFACE/TIME
+
+               host_up_count=0
+               if [ "${IFDOWN_EVENT}" -eq 0 ] && [ "${IFUP_EVENT}" -eq 0 ]; then
+                       sleep "${sleep_time}" &
+                       SLEEP_PID=$!
+                       wait
+                       unset SLEEP_PID
+               fi
+
+               if [ "${IFDOWN_EVENT}" -eq 1 ]; then
+                       LOG debug "Register ifdown event on interface ${INTERFACE} (${DEVICE})"
+                       disconnected
+                       disabled
+                       IFDOWN_EVENT=0
+               fi
+               if [ "${IFUP_EVENT}" -eq 1 ]; then
+                       LOG debug "Register ifup event on interface ${INTERFACE} (${DEVICE})"
+                       firstconnect
+                       IFUP_EVENT=0
+               fi
+       done
+}
+
+main "$@"
diff --git a/package/network/services/mwan3/src/sockopt_wrap.c b/package/network/services/mwan3/src/sockopt_wrap.c
new file mode 100644 (file)
index 0000000..695e575
--- /dev/null
@@ -0,0 +1,255 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2020 Aaron Goodman <aaronjg@alumni.stanford.edu>. All Rights Reserved.
+ */
+
+/*
+ * sockopt_wrap.c provides a shared library that intercepts syscalls to various
+ * networking functions to bind the sockets a source IP address and network device
+ * and to set the firewall mark on otugoing packets. Parameters are set using the
+ * DEVICE, SRCIP, FWMARK environment variables.
+ *
+ *  Additionally the FAMILY environment variable can be set to either 'ipv4' or
+ *  'ipv6' to cause sockets opened with ipv6 or ipv4 to fail, respectively.
+ *
+ *  Each environment variable is optional, and if not set, the library will not
+ *  enforce the particular parameter.
+ */
+
+#define _GNU_SOURCE
+#include <dlfcn.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <arpa/inet.h>
+#include <net/ethernet.h>
+#include <linux/if_packet.h>
+#include <net/if.h>
+
+static int (*next_socket)(int domain, int type, int protocol);
+static int (*next_setsockopt)(int sockfd, int level, int optname,
+                              const void *optval, socklen_t optlen);
+static int (*next_bind)(int sockfd, const struct sockaddr *addr, socklen_t addrlen);
+static int (*next_close)(int fd);
+static ssize_t (*next_send)(int sockfd, const void *buf, size_t len, int flags);
+static ssize_t (*next_sendto)(int sockfd, const void *buf, size_t len, int flags,
+                              const struct sockaddr *dest_addr, socklen_t addrlen);
+static ssize_t (*next_sendmsg)(int sockfd, const struct msghdr *msg, int flags);
+static int (*next_connect)(int sockfd, const struct sockaddr *addr,
+                           socklen_t addrlen);
+static int device=0;
+static struct sockaddr_in source4 = {0};
+#ifdef CONFIG_IPV6
+static struct sockaddr_in6 source6 = {0};
+#endif
+static struct sockaddr * source = 0;
+static int sockaddr_size = 0;
+static int is_bound [1024] = {0};
+
+#define next_func(x)\
+void set_next_##x(){\
+       if (next_##x) return;\
+       next_##x = dlsym(RTLD_NEXT, #x);\
+       dlerror_handle();\
+       return;\
+}
+
+void dlerror_handle()
+{
+       char *msg;
+       if ((msg = dlerror()) != NULL) {
+               fprintf(stderr, "socket: dlopen failed : %s\n", msg);
+               fflush(stderr);
+               exit(EXIT_FAILURE);
+       }
+}
+
+next_func(bind);
+next_func(close);
+next_func(setsockopt);
+next_func(socket);
+next_func(send);
+next_func(sendto);
+next_func(sendmsg);
+next_func(connect);
+
+void dobind(int sockfd)
+{
+       if (source && sockfd < 1024 && !is_bound[sockfd]) {
+               set_next_bind();
+               if (next_bind(sockfd, source, sockaddr_size)) {
+                       perror("failed to bind to ip address");
+                       next_close(sockfd);
+                       exit(EXIT_FAILURE);
+               }
+               is_bound[sockfd] = 1;
+       }
+}
+
+int connect(int sockfd, const struct sockaddr *addr, socklen_t addrlen)
+{
+       set_next_connect();
+       dobind(sockfd);
+       return next_connect(sockfd, addr, addrlen);
+}
+
+ssize_t send(int sockfd, const void *buf, size_t len, int flags)
+{
+       set_next_send();
+       dobind(sockfd);
+       return next_send(sockfd, buf, len, flags);
+}
+
+ssize_t sendto(int sockfd, const void *buf, size_t len, int flags,
+               const struct sockaddr *dest_addr, socklen_t addrlen)
+{
+       set_next_sendto();
+       dobind(sockfd);
+       return next_sendto(sockfd, buf, len, flags, dest_addr, addrlen);
+}
+
+ssize_t sendmsg(int sockfd, const struct msghdr *msg, int flags)
+{
+       set_next_sendmsg();
+       dobind(sockfd);
+       return next_sendmsg(sockfd, msg, flags);
+}
+
+int bind (int sockfd, const struct sockaddr *addr, socklen_t addrlen)
+{
+       set_next_bind();
+       if (device && addr->sa_family == AF_PACKET) {
+               ((struct sockaddr_ll*)addr)->sll_ifindex=device;
+       }
+       else if (source && addr->sa_family == AF_INET) {
+               ((struct sockaddr_in*)addr)->sin_addr = source4.sin_addr;
+       }
+#ifdef CONFIG_IPV6
+       else if (source && addr->sa_family == AF_INET6) {
+               ((struct sockaddr_in6*)addr)->sin6_addr = source6.sin6_addr;
+       }
+#endif
+       if (sockfd < 1024)
+               is_bound[sockfd] = 1;
+       return next_bind(sockfd, addr, addrlen);
+}
+
+int close (int sockfd)
+{
+       set_next_close();
+       if (sockfd < 1024)
+               is_bound[sockfd]=0;
+       return next_close(sockfd);
+}
+
+int setsockopt(int sockfd, int level, int optname, const void *optval, socklen_t optlen)
+{
+       set_next_setsockopt();
+       if (level == SOL_SOCKET && (optname == SO_MARK || optname == SO_BINDTODEVICE))
+               return 0;
+       return next_setsockopt(sockfd, level, optname, optval, optlen);
+}
+
+int socket(int domain, int type, int protocol)
+{
+       int handle;
+
+       const char *socket_str = getenv("DEVICE");
+       const char *srcip_str = getenv("SRCIP");
+       const char *fwmark_str = getenv("FWMARK");
+       const char *family_str = getenv("FAMILY");
+       const int iface_len = socket_str ? strnlen(socket_str, IFNAMSIZ) : 0;
+       int has_family = family_str && *family_str != 0;
+       int has_srcip = srcip_str && *srcip_str != 0;
+       const int fwmark = fwmark_str ? (int)strtol(fwmark_str, NULL, 0) : 0;
+
+       set_next_close();
+       set_next_socket();
+       set_next_send();
+       set_next_setsockopt();
+       set_next_sendmsg();
+       set_next_sendto();
+       set_next_connect();
+       if(has_family) {
+#ifdef CONFIG_IPV6
+               if(domain == AF_INET && strncmp(family_str,"ipv6",4) == 0)
+                       return -1;
+#endif
+               if(domain == AF_INET6 && strncmp(family_str,"ipv4",4) == 0)
+                       return -1;
+       }
+
+       if (domain != AF_INET
+#ifdef CONFIG_IPV6
+           && domain != AF_INET6
+#endif
+               ) {
+               return next_socket(domain, type, protocol);
+       }
+
+
+       if (iface_len > 0) {
+               if (iface_len == IFNAMSIZ) {
+                       fprintf(stderr,"socket: Too long iface name\n");
+                       fflush(stderr);
+                       exit(EXIT_FAILURE);
+               }
+       }
+
+       if (has_srcip) {
+               int s;
+               void * addr_buf;
+               if (domain == AF_INET) {
+                       addr_buf = &source4.sin_addr;
+                       sockaddr_size=sizeof source4;
+                       memset(&source4, 0, sockaddr_size);
+                       source4.sin_family = domain;
+                       source = (struct sockaddr*)&source4;
+               }
+#ifdef CONFIG_IPV6
+               else {
+                       addr_buf = &source6.sin6_addr;
+                       sockaddr_size=sizeof source6;
+                       memset(&source6, 0, sockaddr_size);
+                       source6.sin6_family=domain;
+                       source = (struct sockaddr*)&source6;
+               }
+#endif
+               s = inet_pton(domain, srcip_str, addr_buf);
+               if (s == 0) {
+                       fprintf(stderr, "socket: ip address invalid format for family %s\n",
+                               domain == AF_INET ? "AF_INET" : domain == AF_INET6 ?
+                               "AF_INET6" : "unknown");
+                       return -1;
+               }
+               if (s < 0) {
+                       perror("inet_pton");
+                       exit(EXIT_FAILURE);
+               }
+       }
+
+       handle = next_socket(domain, type, protocol);
+       if (handle == -1 ) {
+               return handle;
+       }
+
+       if (iface_len > 0) {
+               device=if_nametoindex(socket_str);
+               if (next_setsockopt(handle, SOL_SOCKET, SO_BINDTODEVICE,
+                                   socket_str, iface_len + 1)) {
+                       perror("socket: setting interface name failed with error");
+                       next_close(handle);
+                       exit(EXIT_FAILURE);
+               }
+       }
+
+       if (fwmark > 0) {
+               if (next_setsockopt(handle, SOL_SOCKET, SO_MARK,
+                                   &fwmark, sizeof fwmark)) {
+                       perror("failed setting mark for socket");
+                       next_close(handle);
+                       exit(EXIT_FAILURE);
+               }
+       }
+       return handle;
+}
diff --git a/package/network/services/netatalk/Makefile b/package/network/services/netatalk/Makefile
new file mode 100644 (file)
index 0000000..9b397ac
--- /dev/null
@@ -0,0 +1,99 @@
+#
+# Copyright (C) 2009-2013 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=netatalk
+PKG_VERSION:=3.2.0
+PKG_RELEASE:=1
+
+#PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@SF/netatalk
+PKG_HASH:=0c2b4b47450bc7ac95a268d1033471f572a3e06b64131fcef9b66e73663b6d08
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+PKG_FIXUP:=autoreconf
+
+PKG_CPE_ID:=cpe:/a:netatalk:netatalk
+
+PKG_BUILD_DEPENDS:=libevent2
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/netatalk
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=Filesystem
+  DEPENDS:=+libattr +libdb47 +libgcrypt +libopenssl +libevent2
+  TITLE:=netatalk
+  URL:=http://netatalk.sourceforge.net
+  MAINTAINER:=Alexandru Ardelean <ardeleanalex@gmail.com>
+endef
+
+define Package/netatalk/decription
+  Netatalk is a freely-available Open Source AFP fileserver.
+  It also provides a kernel level implementation of the AppleTalk
+  Protocol Suite.
+endef
+
+TARGET_CFLAGS += -std=gnu99
+
+CONFIGURE_ARGS += \
+       --disable-afs \
+       --disable-hfs \
+       --enable-debugging \
+       --disable-shell-check \
+       --disable-timelord \
+       --disable-a2boot \
+       --disable-cups \
+       --disable-tcp-wrappers \
+       --with-cnid-default-backend=dbd \
+       --with-bdb="$(STAGING_DIR)/usr/" \
+       --with-libevent=no \
+       --with-libgcrypt-dir="$(STAGING_DIR)/usr" \
+       --with-ssl-dir="$(STAGING_DIR)/usr" \
+       --with-uams-path="/usr/lib/uams" \
+       --without-acls \
+       --without-kerberos \
+       --without-mysql \
+       --with-mysql-config=false \
+       --without-pam \
+       --disable-admin-group \
+       --disable-srvloc \
+       --disable-zeroconf \
+       $(if $(CONFIG_SHADOW_PASSWORDS),--with-shadow,--without-shadow) \
+       --without-dtrace \
+       --without-ldap
+
+define Package/netatalk/conffiles
+/etc/afp.conf
+/etc/extmap.conf
+/etc/netatalk/
+endef
+
+define Package/netatalk/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_DIR) $(1)/usr/lib/uams
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libatalk.so* $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/dbd $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/ad $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/afppasswd $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/sbin/afpd $(1)/usr/sbin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/sbin/cnid_dbd $(1)/usr/sbin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/sbin/cnid_metad $(1)/usr/sbin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/uams/*.so $(1)/usr/lib/uams/
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/afp.conf $(1)/etc/
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/etc/extmap.conf $(1)/etc/
+       $(INSTALL_BIN) ./files/afpd.init $(1)/etc/init.d/afpd
+endef
+
+$(eval $(call BuildPackage,netatalk))
diff --git a/package/network/services/netatalk/files/afpd.init b/package/network/services/netatalk/files/afpd.init
new file mode 100644 (file)
index 0000000..8fab349
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2010-2012 OpenWrt.org
+
+START=80
+STOP=10
+
+USE_PROCD=1
+
+start_service() {
+        mkdir -p /var/netatalk/CNID/
+
+       procd_open_instance
+       procd_set_param command /usr/sbin/afpd -d -F /etc/afp.conf
+       procd_set_param file /etc/afp.conf
+       procd_set_param respawn
+       procd_close_instance
+
+       procd_open_instance
+       procd_set_param command /usr/sbin/cnid_metad -d
+       procd_set_param respawn
+       procd_close_instance
+}
+
diff --git a/package/network/services/nsd/Makefile b/package/network/services/nsd/Makefile
new file mode 100644 (file)
index 0000000..33cd8b8
--- /dev/null
@@ -0,0 +1,134 @@
+#
+# Copyright (C) 2014-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=nsd
+PKG_VERSION:=4.6.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://www.nlnetlabs.nl/downloads/nsd
+PKG_HASH:=3f60a3a13ec3f68e84bfa7e19daff663c82bcf1de96e4f53f2246525e773a27a
+
+PKG_MAINTAINER:=Vasilis Tsiligiannis <acinonyx@openwrt.gr>
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/nsd/default
+  TITLE:=NSD Name Server Daemon
+  URL:=https://www.nlnetlabs.nl/projects/nsd/
+  SECTION:=net
+  CATEGORY:=Network
+  SUBMENU:=IP Addresses and Names
+endef
+
+define Package/nsd/default/description
+  NSD is an authoritative only, high performance, simple and open source name
+  server.
+endef
+
+define Package/nsd
+  $(Package/nsd/default)
+  TITLE += (with SSL support)
+  DEPENDS += +libopenssl
+  VARIANT:=ssl
+endef
+
+define Package/nsd/description
+  $(Package/nsd/default/description)
+endef
+
+define Package/nsd-nossl
+  $(Package/nsd/default)
+  TITLE += (without SSL support)
+  VARIANT:=nossl
+endef
+
+define Package/nsd-nossl/description
+  $(Package/nsd/default/description)
+endef
+
+define Package/nsd-checkconf/description
+  $(Package/nsd/default/description)
+endef
+
+define Package/nsd-control
+  $(Package/nsd/default)
+  TITLE += remote control utility
+  DEPENDS += +libopenssl
+endef
+
+define Package/nsd-control/description
+  $(Package/nsd/default/description)
+endef
+
+define Package/nsd-control-setup
+  $(Package/nsd/default)
+  TITLE += SSL keys setup script
+  DEPENDS += +openssl-util
+endef
+
+define Package/nsd-control-setup/description
+  $(Package/nsd/default/description)
+endef
+
+CONFIGURE_ARGS+= \
+       --enable-packed \
+       --enable-recvmmsg \
+       --enable-tcp-fastopen \
+       --disable-checking \
+       --with-user="network" \
+       --without-libevent \
+       $(if $(CONFIG_IPV6),--with,--without)-ipv6
+
+CONFIGURE_VARS+= \
+       ac_cv_c_va_list_def=no \
+       ac_cv_c_strptime_needs_defs=no
+
+ifeq ($(BUILD_VARIANT),ssl)
+       CONFIGURE_ARGS += --with-ssl="$(STAGING_DIR)/usr"
+else
+       CONFIGURE_ARGS += --without-ssl
+endif
+
+define Package/nsd/conffiles
+/etc/nsd/
+endef
+
+define Package/nsd/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/{nsd,nsd-checkconf} $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc/nsd
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/nsd/nsd.conf.sample $(1)/etc/nsd/nsd.conf
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/nsd.init $(1)/etc/init.d/nsd
+endef
+
+define Package/nsd-control/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/nsd-control $(1)/usr/sbin/
+endef
+
+define Package/nsd-control-setup/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/nsd-control-setup $(1)/usr/sbin/
+endef
+
+Package/nsd-nossl/install = $(Package/nsd/install)
+Package/nsd-nossl/conffiles = $(Package/nsd/conffiles)
+
+$(eval $(call BuildPackage,nsd))
+$(eval $(call BuildPackage,nsd-nossl))
+$(eval $(call BuildPackage,nsd-control))
+$(eval $(call BuildPackage,nsd-control-setup))
diff --git a/package/network/services/nsd/files/nsd.init b/package/network/services/nsd/files/nsd.init
new file mode 100644 (file)
index 0000000..8b1cf1d
--- /dev/null
@@ -0,0 +1,16 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2014 OpenWrt.org
+
+START=60
+USE_PROCD=1
+PROG=/usr/sbin/nsd
+
+start_service() {
+       mkdir -p /var/db/nsd
+       chown network /var/db/nsd
+       chmod 640 /etc/nsd/*.conf 2>/dev/null
+       chgrp network /etc/nsd/*.conf 2>/dev/null
+       procd_open_instance
+       procd_set_param command "$PROG" -d
+       procd_close_instance
+}
diff --git a/package/network/services/nsd/patches/010-Fix-build-with-without-ssl.patch b/package/network/services/nsd/patches/010-Fix-build-with-without-ssl.patch
new file mode 100644 (file)
index 0000000..71cb67b
--- /dev/null
@@ -0,0 +1,43 @@
+From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
+From: Eneas U de Queiroz <cotequeiroz@gmail.com>
+Date: Thu, 9 Feb 2023 13:48:31 -0300
+Subject: [PATCH] Fix build with --without-ssl
+
+Don't include COMMON_OBJ when compiling nsd-control without SSL.
+
+Without SSL, nsd-control's only purpose is to print out an error
+message.  There's no need to include any other object files then.
+
+*** THIS PATCH SHOULD NOT BE APPLIED TO NSD'S NEXT RELEASE ***
+
+Signed-off-by: Eneas U de Queiroz <cotequeiroz@gmail.com>
+
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -85,7 +85,7 @@ NSD_OBJ=$(COMMON_OBJ) $(XFRD_OBJ) difffi
+ ALL_OBJ=$(NSD_OBJ) nsd-checkconf.o nsd-checkzone.o nsd-control.o nsd-mem.o xfr-inspect.o
+ NSD_CHECKCONF_OBJ=$(COMMON_OBJ) nsd-checkconf.o
+ NSD_CHECKZONE_OBJ=$(COMMON_OBJ) $(XFRD_OBJ) dbaccess.o dbcreate.o difffile.o ipc.o mini_event.o netio.o server.o zonec.o zparser.o zlexer.o nsd-checkzone.o verify.o
+-NSD_CONTROL_OBJ=$(COMMON_OBJ) nsd-control.o
++NSD_CONTROL_OBJ=@NSD_CONTROL_COMMON_OBJ@ nsd-control.o
+ CUTEST_OBJ=$(COMMON_OBJ) $(XFRD_OBJ) dbaccess.o dbcreate.o difffile.o ipc.o mini_event.o netio.o server.o verify.o zonec.o zparser.o zlexer.o cutest_dname.o cutest_dns.o cutest_iterated_hash.o cutest_run.o cutest_radtree.o cutest_rbtree.o cutest_namedb.o cutest_options.o cutest_region.o cutest_rrl.o cutest_udb.o cutest_udbrad.o cutest_util.o cutest_bitset.o cutest_popen3.o cutest_iter.o cutest_event.o cutest.o qtest.o
+ NSD_MEM_OBJ=$(COMMON_OBJ) $(XFRD_OBJ) dbaccess.o dbcreate.o difffile.o ipc.o mini_event.o netio.o verify.o server.o zonec.o zparser.o zlexer.o nsd-mem.o
+ all:  $(TARGETS) $(MANUALS)
+--- a/configure.ac
++++ b/configure.ac
+@@ -1015,6 +1015,7 @@ AC_SUBST(ratelimit_default)
+ # we need SSL for TSIG (and maybe also for NSEC3).
+ CHECK_SSL
+ if test x$HAVE_SSL = x"yes"; then
++      AC_SUBST(NSD_CONTROL_COMMON_OBJ,'$(COMMON_OBJ)')
+       ACX_LIB_SSL
+       # remove space after -ldl if there.
+       LIBS=`echo "$LIBS" | sed -e 's/ $//'`
+@@ -1091,6 +1092,7 @@ AC_INCLUDES_DEFAULT
+ else
+       AC_MSG_WARN([No SSL, therefore remote-control is disabled])
+       AC_MSG_WARN([No SSL, therefore TLS is disabled])
++      AC_SUBST(NSD_CONTROL_COMMON_OBJ,)
+ fi
+ AC_ARG_ENABLE(nsec3, AS_HELP_STRING([--disable-nsec3],[Disable NSEC3 support]))
diff --git a/package/network/services/socat/Makefile b/package/network/services/socat/Makefile
new file mode 100644 (file)
index 0000000..2f3ca78
--- /dev/null
@@ -0,0 +1,93 @@
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=socat
+PKG_VERSION:=1.7.4.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://www.dest-unreach.org/socat/download
+PKG_HASH:=fbd42bd2f0e54a3af6d01bdf15385384ab82dbc0e4f1a5e153b3e0be1b6380ac
+
+PKG_MAINTAINER:=Ted Hess <thess@kitschensync.net>
+PKG_LICENSE:=GPL-2.0-or-later OpenSSL
+PKG_LICENSE_FILES:=COPYING COPYING.OpenSSL
+PKG_CPE_ID:=cpe:/a:dest-unreach:socat
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/socat
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libpthread +librt +SOCAT_SSL:libopenssl
+  TITLE:=A multipurpose relay (SOcket CAT)
+  URL:=http://www.dest-unreach.org/socat/
+endef
+
+define Package/socat/description
+       SoCat (for SOcket CAT) establishes two bidirectional byte streams and
+       transfers data between them.
+       Data channels may be files, pipes, devices (terminal or modem, etc.), or
+       sockets (Unix, IPv4, IPv6, raw, UDP, TCP, SSL). It provides forking,
+       logging and tracing, different modes for interprocess communication and
+       many more options.
+endef
+
+define Package/socat/config
+config SOCAT_SSL
+        bool "SSL support"
+        depends on PACKAGE_socat
+        default n
+        help
+          Implements SSL support in socat (using libopenssl).
+endef
+
+define Package/socat/conffiles
+/etc/config/socat
+endef
+
+CONFIGURE_ARGS += \
+       --disable-libwrap \
+       --disable-readline \
+       --enable-termios
+
+ifneq ($(CONFIG_SOCAT_SSL),y)
+  CONFIGURE_ARGS+= --disable-openssl
+endif
+
+# PowerPC has different TERMIOS bits
+ifneq ($(findstring powerpc,$(CONFIG_ARCH)),)
+  CONFIGURE_VARS += \
+         sc_cv_sys_crdly_shift=12 \
+         sc_cv_sys_tabdly_shift=10 \
+         sc_cv_sys_csize_shift=8
+else
+  CONFIGURE_VARS += \
+         sc_cv_sys_crdly_shift=9 \
+         sc_cv_sys_tabdly_shift=11 \
+         sc_cv_sys_csize_shift=4
+endif
+
+CONFIGURE_VARS += \
+       sc_cv_termios_ispeed="no" \
+       ac_cv_header_bsd_libutil_h=no \
+       ac_cv_lib_bsd_openpty=no \
+       BUILD_DATE=$(SOURCE_DATE_EPOCH)
+
+define Package/socat/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/socat $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_CONF) ./files/socat.config $(1)/etc/config/socat
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/socat.init $(1)/etc/init.d/socat
+endef
+
+$(eval $(call BuildPackage,socat))
diff --git a/package/network/services/socat/files/socat.config b/package/network/services/socat/files/socat.config
new file mode 100644 (file)
index 0000000..196ab9c
--- /dev/null
@@ -0,0 +1,6 @@
+# forward port 8000 on IPv6 to IPv4 host port 80
+# change enable to '1' to use this example
+config socat 'http'
+       option enable '0'
+       option SocatOptions '-d -d TCP6-LISTEN:8000,fork TCP4:192.168.1.20:80'
+       option user 'nobody'
diff --git a/package/network/services/socat/files/socat.init b/package/network/services/socat/files/socat.init
new file mode 100644 (file)
index 0000000..03573a0
--- /dev/null
@@ -0,0 +1,61 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2008-2014 OpenWrt.org
+
+START=99
+STOP=99
+
+USE_PROCD=1
+PROG=/usr/bin/socat
+NAME=socat
+
+validate_section_socat()
+{
+       uci_load_validate socat socat "$1" "$2" \
+               'enable:bool:1' \
+               'SocatOptions:or(string, list(string))' \
+               'user:string:root'
+}
+
+append_param_command()
+{
+       procd_append_param command "$1"
+}
+
+socat_instance()
+{
+       local is_list
+       local user
+
+       [ "$2" = 0 ] || {
+               echo "validation failed"
+               return 1
+       }
+
+       [ "$enable" = "0" ] && return 1
+
+       procd_open_instance
+       procd_set_param command "$PROG"
+       config_get is_list "$1" SocatOptions_LENGTH
+       if [ -z "$is_list" ]; then
+               procd_append_param command $SocatOptions
+       else
+               config_list_foreach "$1" SocatOptions append_param_command
+       fi
+       config_get user "$1" user
+       if [ -n "$user" ]; then
+               procd_set_param user $user
+       fi
+       procd_set_param stdout 1
+       procd_set_param stderr 1
+       procd_close_instance
+}
+
+start_service () {
+       config_load "$NAME"
+       config_foreach validate_section_socat socat socat_instance
+}
+
+service_triggers() {
+       procd_add_reload_trigger "$NAME"
+       procd_add_validation validate_section_socat
+}
diff --git a/package/network/services/socat/patches/200-openssl-deprecated.patch b/package/network/services/socat/patches/200-openssl-deprecated.patch
new file mode 100644 (file)
index 0000000..a958284
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/xio-openssl.c
++++ b/xio-openssl.c
+@@ -8,6 +8,8 @@
+ #if WITH_OPENSSL      /* make this address configure dependend */
+ #include <openssl/conf.h>
+ #include <openssl/x509v3.h>
++#include <openssl/dh.h>
++#include <openssl/bn.h>
+ #include "xioopen.h"
diff --git a/package/network/services/wifidog/Makefile b/package/network/services/wifidog/Makefile
new file mode 100644 (file)
index 0000000..a044e87
--- /dev/null
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2006,2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=wifidog
+PKG_VERSION:=1.3.0
+PKG_RELEASE:=9
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_URL:=https://github.com/wifidog/wifidog-gateway
+PKG_SOURCE_VERSION:=$(PKG_VERSION)
+PKG_MIRROR_HASH:=9ffd9f3ae54baceb723abb7a04e27a9b6a3ff1479f8a3bfda9b8a496e8b4050f
+
+PKG_MAINTAINER:=Michael Haas <haas@computerlinguist.org>
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=COPYING
+
+PKG_FIXUP:=autoreconf
+PKG_INSTALL:=0
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/wifidog/Default
+  SUBMENU:=Captive Portals
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+iptables-mod-extra +iptables-mod-ipopt +iptables-mod-nat-extra +libpthread
+  TITLE:=A wireless captive portal solution
+  URL:=http://www.wifidog.org
+endef
+
+define Package/wifidog
+$(call Package/wifidog/Default)
+  VARIANT:=normal
+endef
+
+define Package/wifidog-tls
+$(call Package/wifidog/Default)
+  DEPENDS+= +PACKAGE_wifidog-tls:libwolfssl
+  VARIANT:=tls
+endef
+
+
+define Package/wifidog/description
+       The Wifidog project is a complete and embeddable captive
+       portal solution for wireless community groups or individuals
+       who wish to open a free Hotspot while still preventing abuse
+       of their Internet connection.
+endef
+
+define Package/wifidog-tls/description
+$(call Package/wifidog/description)
+
+This variant can talk TLS to the auth server.
+endef
+
+define Package/wifidog/conffiles
+/etc/wifidog.conf
+endef
+
+Package/wifidog-tls/conffiles = $(Package/wifidog/conffiles)
+
+ifeq ($(BUILD_VARIANT),tls)
+
+CONFIGURE_ARGS += \
+  --enable-wolfssl
+
+endif
+
+define Package/wifidog/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wifidog $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wdctl $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libhttpd.so.* $(1)/usr/lib/
+       $(INSTALL_DIR) $(1)/etc
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog.conf $(1)/etc/
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/wifidog-msg.html $(1)/etc/
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/wifidog.init $(1)/etc/init.d/wifidog
+endef
+
+Package/wifidog-tls/install = $(Package/wifidog/install)
+
+$(eval $(call BuildPackage,wifidog))
+$(eval $(call BuildPackage,wifidog-tls))
diff --git a/package/network/services/wifidog/files/wifidog.init b/package/network/services/wifidog/files/wifidog.init
new file mode 100644 (file)
index 0000000..4d864a0
--- /dev/null
@@ -0,0 +1,21 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006 OpenWrt.org
+START=65
+
+USE_PROCD=1
+
+extra_command "status" "Print the status of the service"
+
+start_service() {
+    procd_open_instance
+    # -s: log to syslog
+    # -f: run in foreground
+    procd_set_param command /usr/bin/wifidog -s -f
+    procd_set_param respawn # respawn automatically if something died
+    procd_set_param file /etc/wifidog.conf
+    procd_close_instance
+}
+
+status_service() {
+    /usr/bin/wdctl status
+}
diff --git a/package/network/services/wifidog/patches/010-simple_http-Convert-to-WolfSSL.patch b/package/network/services/wifidog/patches/010-simple_http-Convert-to-WolfSSL.patch
new file mode 100644 (file)
index 0000000..82c4d11
--- /dev/null
@@ -0,0 +1,350 @@
+From 9588b78eb0a53c40ce96606f5329eec9df86217c Mon Sep 17 00:00:00 2001
+From: Christian Marangi <ansuelsmth@gmail.com>
+Date: Thu, 14 Dec 2023 15:00:52 +0100
+Subject: [PATCH] simple_http: Convert to WolfSSL
+
+Fully convert to WolfSSL as recent version of WolfSSL dropped the
+support shims for CyaSSL.
+
+Signed-off-by: Christian Marangi <ansuelsmth@gmail.com>
+---
+ configure.in      |  45 ++++++++---------
+ src/simple_http.c | 122 +++++++++++++++++++++++-----------------------
+ 2 files changed, 81 insertions(+), 86 deletions(-)
+
+--- a/configure.in
++++ b/configure.in
+@@ -85,48 +85,45 @@ AC_SUBST(enable_latex_docs)
+ # Acutally perform the doxygen check
+ BB_ENABLE_DOXYGEN
+-# Enable cyassl?
+-AC_DEFUN([BB_CYASSL],
++# Enable wolfssl?
++AC_DEFUN([BB_WOLFSSL],
+ [
+-AC_ARG_ENABLE(cyassl, [  --enable-cyassl        enable TLS support for auth server communication (no)], [], [enable_cyassl=no])
+-if test "x$enable_cyassl" = xyes; then
+-        # CyaSSL has been renamed wolfSSL. Old method names are still available
+-        # via cyassl/ssl.h, which maps old methods to new methods via macros.
+-        # To find the proper lib to link against (cyassl or wolfssl), we do have
+-        # the use the new naming scheme below as cyassl/ssl.h is not available for
+-        # AC_SEARCH_LIBS
+-        AC_CHECK_HEADERS(cyassl/ssl.h)
+-        AC_SEARCH_LIBS([CyaTLSv1_client_method], [cyassl], [], [
+-            AC_SEARCH_LIBS([wolfTLSv1_client_method], [wolfssl], [], [
+-                            AC_MSG_ERROR([unable to locate SSL lib: either wolfSSL or CyaSSL needed.])
+-            ])
++AC_ARG_ENABLE(wolfssl, [  --enable-wolfssl        enable TLS support for auth server communication (no)], [], [enable_wolfssl=no])
++if test "x$enable_wolfssl" = xyes; then
++        AC_CHECK_HEADERS(wolfssl/ssl.h, [], [],
++        [
++                #include <wolfssl/options.h>
++        ])
++        AC_SEARCH_LIBS([wolfTLSv1_client_method], [wolfssl], [], [
++                AC_MSG_ERROR([unable to locate SSL lib: wolfSSL needed.])
+         ])
+-        AC_MSG_CHECKING([for the CyaSSL SNI enabled])
++        AC_MSG_CHECKING([for the Wolfssl SNI enabled])
+         AC_LINK_IFELSE([AC_LANG_PROGRAM(
+         [[
+                 #define HAVE_SNI
+-                #include <cyassl/ssl.h>
++                #include <wolfssl/options.h>
++                #include <wolfssl/ssl.h>
+         ]], [[
+-                CYASSL_CTX *ctx;
+-                CyaSSL_Init();
+-                ctx = CyaSSL_CTX_new(CyaTLSv1_client_method());
+-                CyaSSL_CTX_UseSNI(ctx, CYASSL_SNI_HOST_NAME, "wifidog.org", 11);
++                WOLFSSL_CTX *ctx;
++                wolfSSL_Init();
++                ctx = wolfSSL_CTX_new(wolfTLSv1_client_method());
++                wolfSSL_CTX_UseSNI(ctx, WOLFSSL_SNI_HOST_NAME, "wifidog.org", 11);
+         ]])], [enabled_sni=yes], [enabled_sni=no])
+         if test "x$enabled_sni" = xyes; then
+                 AC_MSG_RESULT([yes])
+-                AC_DEFINE([HAVE_SNI],, "Compile with CyaSSL SNI support")
++                AC_DEFINE([HAVE_SNI],, "Compile with wolfssl SNI support")
+         else
+                 AC_MSG_RESULT([no])
+         fi
+-        AC_DEFINE(USE_CYASSL,, "Compile with CyaSSL support")
++        AC_DEFINE(USE_WOLFSSL,, "Compile with wolfssl support")
+ fi
+ ])
+-# Actually perform the cyassl check
+-BB_CYASSL
++# Actually perform the wolfssl check
++BB_WOLFSSL
+--- a/src/simple_http.c
++++ b/src/simple_http.c
+@@ -28,6 +28,7 @@
+ #include <arpa/inet.h>
+ #include <errno.h>
+ #include <unistd.h>
++#include <pthread.h>
+ #include <string.h>
+ #include <syslog.h>
+@@ -36,17 +37,14 @@
+ #include "debug.h"
+ #include "pstring.h"
+-#ifdef USE_CYASSL
+-#include <cyassl/ssl.h>
++#ifdef USE_WOLFSSL
++#include <wolfssl/options.h>
++#include <wolfssl/ssl.h>
+ #include "conf.h"
+-/* For CYASSL_MAX_ERROR_SZ */
+-#include <cyassl/ctaocrypt/types.h>
+-/* For COMPRESS_E */
+-#include <cyassl/ctaocrypt/error-crypt.h>
+ #endif
+-#ifdef USE_CYASSL
+-static CYASSL_CTX *get_cyassl_ctx(const char *hostname);
++#ifdef USE_WOLFSSL
++static WOLFSSL_CTX *get_wolfssl_ctx(const char *hostname);
+ #endif
+ /**
+@@ -133,48 +131,48 @@ http_get(const int sockfd, const char *r
+     return NULL;
+ }
+-#ifdef USE_CYASSL
++#ifdef USE_WOLFSSL
+-static CYASSL_CTX *cyassl_ctx = NULL;
+-static pthread_mutex_t cyassl_ctx_mutex = PTHREAD_MUTEX_INITIALIZER;
++static WOLFSSL_CTX *wolfssl_ctx = NULL;
++static pthread_mutex_t wolfssl_ctx_mutex = PTHREAD_MUTEX_INITIALIZER;
+-#define LOCK_CYASSL_CTX() do { \
+-      debug(LOG_DEBUG, "Locking CyaSSL Context"); \
+-      pthread_mutex_lock(&cyassl_ctx_mutex); \
+-      debug(LOG_DEBUG, "CyaSSL Context locked"); \
++#define LOCK_WOLFSSL_CTX() do { \
++      debug(LOG_DEBUG, "Locking WolfSSL Context"); \
++      pthread_mutex_lock(&wolfssl_ctx_mutex); \
++      debug(LOG_DEBUG, "WolfSSL Context locked"); \
+ } while (0)
+-#define UNLOCK_CYASSL_CTX() do { \
+-      debug(LOG_DEBUG, "Unlocking CyaSSL Context"); \
+-      pthread_mutex_unlock(&cyassl_ctx_mutex); \
+-      debug(LOG_DEBUG, "CyaSSL Context unlocked"); \
++#define UNLOCK_WOLFSSL_CTX() do { \
++      debug(LOG_DEBUG, "Unlocking WolfSSL Context"); \
++      pthread_mutex_unlock(&wolfssl_ctx_mutex); \
++      debug(LOG_DEBUG, "WolfSSL Context unlocked"); \
+ } while (0)
+-static CYASSL_CTX *
+-get_cyassl_ctx(const char *hostname)
++static WOLFSSL_CTX *
++get_wolfssl_ctx(const char *hostname)
+ {
+     int err;
+-    CYASSL_CTX *ret;
++    WOLFSSL_CTX *ret;
+     s_config *config = config_get_config();
+-    LOCK_CYASSL_CTX();
++    LOCK_WOLFSSL_CTX();
+-    if (NULL == cyassl_ctx) {
+-        CyaSSL_Init();
+-        /* Create the CYASSL_CTX */
++    if (NULL == wolfssl_ctx) {
++        wolfSSL_Init();
++        /* Create the WOLFSSL_CTX */
+         /* Allow TLSv1.0 up to TLSv1.2 */
+-        if ((cyassl_ctx = CyaSSL_CTX_new(CyaTLSv1_client_method())) == NULL) {
+-            debug(LOG_ERR, "Could not create CYASSL context.");
+-            UNLOCK_CYASSL_CTX();
++        if ((wolfssl_ctx = wolfSSL_CTX_new(wolfTLSv1_client_method())) == NULL) {
++            debug(LOG_ERR, "Could not create WOLFSSL context.");
++            UNLOCK_WOLFSSL_CTX();
+             return NULL;
+         }
+         if (config->ssl_cipher_list) {
+             debug(LOG_INFO, "Setting SSL cipher list to [%s]", config->ssl_cipher_list);
+-            err = CyaSSL_CTX_set_cipher_list(cyassl_ctx, config->ssl_cipher_list);
++            err = wolfSSL_CTX_set_cipher_list(wolfssl_ctx, config->ssl_cipher_list);
+             if (SSL_SUCCESS != err) {
+                 debug(LOG_ERR, "Could not load SSL cipher list (error %d)", err);
+-                UNLOCK_CYASSL_CTX();
++                UNLOCK_WOLFSSL_CTX();
+                 return NULL;
+             }
+         }
+@@ -183,12 +181,12 @@ get_cyassl_ctx(const char *hostname)
+         if (config->ssl_use_sni) {
+             debug(LOG_INFO, "Setting SSL using SNI for hostname %s",
+                 hostname);
+-            err = CyaSSL_CTX_UseSNI(cyassl_ctx, CYASSL_SNI_HOST_NAME, hostname,
++            err = wolfSSL_CTX_UseSNI(wolfssl_ctx, WOLFSSL_SNI_HOST_NAME, hostname,
+                       strlen(hostname));
+             if (SSL_SUCCESS != err) {
+                 debug(LOG_ERR, "Could not setup SSL using SNI for hostname %s",
+                     hostname);
+-                UNLOCK_CYASSL_CTX();
++                UNLOCK_WOLFSSL_CTX();
+                 return NULL;
+             }
+         }
+@@ -196,28 +194,28 @@ get_cyassl_ctx(const char *hostname)
+         if (config->ssl_verify) {
+             /* Use trusted certs */
+-            /* Note: CyaSSL requires that the certificates are named by their hash values */
++            /* Note: WolfSSL requires that the certificates are named by their hash values */
+             debug(LOG_INFO, "Loading SSL certificates from %s", config->ssl_certs);
+-            err = CyaSSL_CTX_load_verify_locations(cyassl_ctx, NULL, config->ssl_certs);
++            err = wolfSSL_CTX_load_verify_locations(wolfssl_ctx, NULL, config->ssl_certs);
+             if (err != SSL_SUCCESS) {
+                 debug(LOG_ERR, "Could not load SSL certificates (error %d)", err);
+                 if (err == ASN_UNKNOWN_OID_E) {
+-                    debug(LOG_ERR, "Error is ASN_UNKNOWN_OID_E - try compiling cyassl/wolfssl with --enable-ecc");
++                    debug(LOG_ERR, "Error is ASN_UNKNOWN_OID_E - try compiling wolfssl/wolfssl with --enable-ecc");
+                 } else {
+                     debug(LOG_ERR, "Make sure that SSLCertPath points to the correct path in the config file");
+                     debug(LOG_ERR, "Or disable certificate loading with 'SSLPeerVerification No'.");
+                 }
+-                UNLOCK_CYASSL_CTX();
++                UNLOCK_WOLFSSL_CTX();
+                 return NULL;
+             }
+         } else {
+-            CyaSSL_CTX_set_verify(cyassl_ctx, SSL_VERIFY_NONE, 0);
++            wolfSSL_CTX_set_verify(wolfssl_ctx, SSL_VERIFY_NONE, 0);
+             debug(LOG_INFO, "Disabling SSL certificate verification!");
+         }
+     }
+-    ret = cyassl_ctx;
+-    UNLOCK_CYASSL_CTX();
++    ret = wolfssl_ctx;
++    UNLOCK_WOLFSSL_CTX();
+     return ret;
+ }
+@@ -237,20 +235,20 @@ https_get(const int sockfd, const char *
+     fd_set readfds;
+     struct timeval timeout;
+     unsigned long sslerr;
+-    char sslerrmsg[CYASSL_MAX_ERROR_SZ];
++    char sslerrmsg[WOLFSSL_MAX_ERROR_SZ];
+     size_t reqlen = strlen(req);
+     char readbuf[MAX_BUF];
+     char *retval;
+     pstr_t *response = pstr_new();
+-    CYASSL *ssl = NULL;
+-    CYASSL_CTX *ctx = NULL;
++    WOLFSSL *ssl = NULL;
++    WOLFSSL_CTX *ctx = NULL;
+     s_config *config;
+     config = config_get_config();
+-    ctx = get_cyassl_ctx(hostname);
++    ctx = get_wolfssl_ctx(hostname);
+     if (NULL == ctx) {
+-        debug(LOG_ERR, "Could not get CyaSSL Context!");
++        debug(LOG_ERR, "Could not get WolfSSL Context!");
+         goto error;
+     }
+@@ -260,28 +258,28 @@ https_get(const int sockfd, const char *
+         goto error;
+     }
+-    /* Create CYASSL object */
+-    if ((ssl = CyaSSL_new(ctx)) == NULL) {
+-        debug(LOG_ERR, "Could not create CyaSSL context.");
++    /* Create WOLFSSL object */
++    if ((ssl = wolfSSL_new(ctx)) == NULL) {
++        debug(LOG_ERR, "Could not create WolfSSL context.");
+         goto error;
+     }
+     if (config->ssl_verify) {
+         // Turn on domain name check
+         // Loading of CA certificates and verification of remote host name
+         // go hand in hand - one is useless without the other.
+-        CyaSSL_check_domain_name(ssl, hostname);
++        wolfSSL_check_domain_name(ssl, hostname);
+     }
+-    CyaSSL_set_fd(ssl, sockfd);
++    wolfSSL_set_fd(ssl, sockfd);
+     debug(LOG_DEBUG, "Sending HTTPS request to auth server: [%s]\n", req);
+-    numbytes = CyaSSL_send(ssl, req, (int)reqlen, 0);
++    numbytes = wolfSSL_send(ssl, req, (int)reqlen, 0);
+     if (numbytes <= 0) {
+-        sslerr = (unsigned long)CyaSSL_get_error(ssl, numbytes);
+-        CyaSSL_ERR_error_string(sslerr, sslerrmsg);
+-        debug(LOG_ERR, "CyaSSL_send failed: %s", sslerrmsg);
++        sslerr = (unsigned long)wolfSSL_get_error(ssl, numbytes);
++        wolfSSL_ERR_error_string(sslerr, sslerrmsg);
++        debug(LOG_ERR, "WolfSSL_send failed: %s", sslerrmsg);
+         goto error;
+     } else if ((size_t) numbytes != reqlen) {
+-        debug(LOG_ERR, "CyaSSL_send failed: only %d bytes out of %d bytes sent!", numbytes, reqlen);
++        debug(LOG_ERR, "WolfSSL_send failed: only %d bytes out of %d bytes sent!", numbytes, reqlen);
+         goto error;
+     }
+@@ -300,14 +298,14 @@ https_get(const int sockfd, const char *
+                         /** We don't have to use FD_ISSET() because there
+                        *  was only one fd. */
+             memset(readbuf, 0, MAX_BUF);
+-            numbytes = CyaSSL_read(ssl, readbuf, MAX_BUF - 1);
++            numbytes = wolfSSL_read(ssl, readbuf, MAX_BUF - 1);
+             if (numbytes < 0) {
+-                sslerr = (unsigned long)CyaSSL_get_error(ssl, numbytes);
+-                CyaSSL_ERR_error_string(sslerr, sslerrmsg);
++                sslerr = (unsigned long)wolfSSL_get_error(ssl, numbytes);
++                wolfSSL_ERR_error_string(sslerr, sslerrmsg);
+                 debug(LOG_ERR, "An error occurred while reading from server: %s", sslerrmsg);
+                 goto error;
+             } else if (numbytes == 0) {
+-                /* CyaSSL_read returns 0 on a clean shutdown or if the peer closed the
++                /* WolfSSL_read returns 0 on a clean shutdown or if the peer closed the
+                    connection. We can't distinguish between these cases right now. */
+                 done = 1;
+             } else {
+@@ -326,7 +324,7 @@ https_get(const int sockfd, const char *
+     close(sockfd);
+-    CyaSSL_free(ssl);
++    wolfSSL_free(ssl);
+     retval = pstr_to_string(response);
+     debug(LOG_DEBUG, "HTTPS Response from Server: [%s]", retval);
+@@ -334,7 +332,7 @@ https_get(const int sockfd, const char *
+  error:
+     if (ssl) {
+-        CyaSSL_free(ssl);
++        wolfSSL_free(ssl);
+     }
+     if (sockfd >= 0) {
+         close(sockfd);
+@@ -344,4 +342,4 @@ https_get(const int sockfd, const char *
+     return NULL;
+ }
+-#endif                          /* USE_CYASSL */
++#endif                          /* USE_WOLFSSL */
diff --git a/package/network/services/wifidog/patches/011-use-tls-above-1.patch b/package/network/services/wifidog/patches/011-use-tls-above-1.patch
new file mode 100644 (file)
index 0000000..53120f8
--- /dev/null
@@ -0,0 +1,32 @@
+--- a/configure.in
++++ b/configure.in
+@@ -94,7 +94,7 @@ if test "x$enable_wolfssl" = xyes; then
+         [
+                 #include <wolfssl/options.h>
+         ])
+-        AC_SEARCH_LIBS([wolfTLSv1_client_method], [wolfssl], [], [
++        AC_SEARCH_LIBS([wolfSSLv23_client_method], [wolfssl], [], [
+                 AC_MSG_ERROR([unable to locate SSL lib: wolfSSL needed.])
+         ])
+@@ -107,7 +107,7 @@ if test "x$enable_wolfssl" = xyes; then
+         ]], [[
+                 WOLFSSL_CTX *ctx;
+                 wolfSSL_Init();
+-                ctx = wolfSSL_CTX_new(wolfTLSv1_client_method());
++                ctx = wolfSSL_CTX_new(wolfSSLv23_client_method());
+                 wolfSSL_CTX_UseSNI(ctx, WOLFSSL_SNI_HOST_NAME, "wifidog.org", 11);
+         ]])], [enabled_sni=yes], [enabled_sni=no])
+--- a/src/simple_http.c
++++ b/src/simple_http.c
+@@ -160,8 +160,7 @@ get_wolfssl_ctx(const char *hostname)
+     if (NULL == wolfssl_ctx) {
+         wolfSSL_Init();
+         /* Create the WOLFSSL_CTX */
+-        /* Allow TLSv1.0 up to TLSv1.2 */
+-        if ((wolfssl_ctx = wolfSSL_CTX_new(wolfTLSv1_client_method())) == NULL) {
++        if ((wolfssl_ctx = wolfSSL_CTX_new(wolfSSLv23_client_method())) == NULL) {
+             debug(LOG_ERR, "Could not create WOLFSSL context.");
+             UNLOCK_WOLFSSL_CTX();
+             return NULL;
diff --git a/package/network/services/wifidog/patches/020-Modify-get-ip-from-iface-method.patch b/package/network/services/wifidog/patches/020-Modify-get-ip-from-iface-method.patch
new file mode 100644 (file)
index 0000000..9a13ba1
--- /dev/null
@@ -0,0 +1,26 @@
+From 37b2dda9b1d62eb91028f6d590beddd36f7b79c8 Mon Sep 17 00:00:00 2001
+From: Nathan Samson <nathan@nathansamson.be>
+Date: Mon, 1 Feb 2016 21:37:22 +0100
+Subject: [PATCH] Modify get ip from iface method.
+
+This used to use a RAW socket, while now it used a DGRAM socket.
+Previously it failed with operation not permitted, while this version
+seems to work reliably.
+
+--- a/src/util.c
++++ b/src/util.c
+@@ -174,11 +174,13 @@ get_iface_ip(const char *ifname)
+     u_int32_t ip;
+     /* Create a socket */
+-    if ((sockd = socket(AF_INET, SOCK_RAW, htons(0x8086))) < 0) {
++    if ((sockd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+         debug(LOG_ERR, "socket(): %s", strerror(errno));
+         return NULL;
+     }
++     /* I want to get an IPv4 IP address */
++    if_data.ifr_addr.sa_family = AF_INET;
+     /* Get IP of internal interface */
+     strncpy(if_data.ifr_name, ifname, 15);
+     if_data.ifr_name[15] = '\0';
diff --git a/package/network/services/wifischedule/LICENSE b/package/network/services/wifischedule/LICENSE
new file mode 100644 (file)
index 0000000..e313028
--- /dev/null
@@ -0,0 +1,11 @@
+Copyright (c) 2016, prpl Foundation
+
+Permission to use, copy, modify, and/or distribute this software for any purpose with or without 
+fee is hereby granted, provided that the above copyright notice and this permission notice appear 
+in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE 
+FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 
+LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, 
+ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
diff --git a/package/network/services/wifischedule/Makefile b/package/network/services/wifischedule/Makefile
new file mode 100644 (file)
index 0000000..8c26f70
--- /dev/null
@@ -0,0 +1,58 @@
+# Copyright (c) 2016, prpl Foundation
+#
+# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+# fee is hereby granted, provided that the above copyright notice and this permission notice appear
+# in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+# FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+# Author: Nils Koenig <openwrt@newk.it> 
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=wifischedule
+PKG_VERSION:=1
+PKG_RELEASE:=3
+PKG_LICENSE:=PRPL
+
+PKG_MAINTAINER:=Nils Koenig <openwrt@newk.it> 
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/wifischedule
+  SUBMENU:=Wireless
+  TITLE:=Turns WiFi on and off according to a schedule
+  SECTION:=net
+  CATEGORY:=Network
+  PKGARCH:=all
+endef
+
+define Package/wifischedule/description
+Turns WiFi on and off according to a schedule defined in UCI.
+endef
+
+define Package/wifischedule/conffiles
+/etc/config/wifi_schedule
+endef
+
+define Build/Prepare
+endef
+
+define Build/Configure
+endef
+
+define Build/Compile
+endef
+
+define Package/wifischedule/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) ./net/usr/bin/wifi_schedule.sh $(1)/usr/bin/wifi_schedule.sh
+       $(INSTALL_DIR) $(1)/etc/config
+       $(INSTALL_DATA) ./net/etc/config/wifi_schedule $(1)/etc/config/wifi_schedule
+endef
+
+$(eval $(call BuildPackage,wifischedule))
diff --git a/package/network/services/wifischedule/README.md b/package/network/services/wifischedule/README.md
new file mode 100644 (file)
index 0000000..6d53da5
--- /dev/null
@@ -0,0 +1,87 @@
+# wifischedule
+Turns WiFi on and off according to a schedule on an openwrt router
+
+## Components
+* wifischedule: Shell script that creates cron jobs based on configuration provided in UCI and does all the other logic of enabling and disabling wifi with the use of `/sbin/wifi` and `/usr/bin/iwinfo`. Can be used standalone.
+* luci-app-wifischedule: LUCI frontend for creating the UCI configuration and triggering the actions. Depends on wifischedule.
+
+
+## Use cases
+You can create user-defined events when to enable or disable WiFi. 
+There are various use cases why you would like to do so:
+
+1. Reduce power consumption and therefore reduce CO2 emissions.
+2. Reduce emitted electromagnatic radiation.
+3. Force busincess hours when WiFi is available.
+
+Regarding 1: Please note, that you need to unload the wireless driver modules in order to get the most effect of saving power.
+In my test scenario only disabling WiFi saves about ~0.4 Watt, unloading the modules removes another ~0.4 Watt.
+
+Regarding 2: Think of a wireless accesspoint e.g. in your bedrom, kids room where you want to remove the ammount of radiation emitted.
+
+Regarding 3: E.g. in a company, why would wireless need to be enabled weekends if no one is there working? 
+Or think of an accesspoint in your kids room when you want the youngsters to sleep after 10 pm instead of facebooking...
+
+## Configuration
+You can create an arbitrary number of schedule events. Please note that there is on sanity check done wheather the start / stop times overlap or make sense.
+If start and stop time are equal, this leads to disabling the WiFi at the given time.
+
+Logging if enabled is done to the file `/var/log/wifi_schedule.log` and can be reviewed through the "View Logfile" tab.
+The cron jobs created can be reviewed through the "View Cron Jobs" tab.
+
+Please note that the "Unload Modules" function is currently considered as experimental. You can manually add / remove modules in the text field.
+The button "Determine Modules Automatically" tries to make a best guess determining regarding the driver module and its dependencies.
+When un-/loading the modules, there is a certain number of retries (`module_load`) performed.
+
+The option "Force disabling wifi even if stations associated" does what it says - when activated it simply shuts down WiFi.
+When unchecked, its checked every `recheck_interval` minutes if there are still stations associated. Once the stations disconnect, WiFi is disabled. To ignore associated stations add their MAC to `ignore_stations`.
+
+Please note, that the parameters `module_load`, `recheck_interval` and `ignore_stations` are only accessible through uci.
+
+## UCI Configuration `wifi_schedule`
+UCI configuration file: `/etc/config/wifi_schedule`:
+
+```
+config global
+        option logging '0'
+        option enabled '0'
+        option recheck_interval '10'
+        option modules_retries '10'
+#       option ignore_stations 'AA:AA:AA:AA:AA:AA BB:BB:BB:BB:BB:BB'
+
+config entry 'Businesshours'
+        option enabled '0'
+        option daysofweek 'Monday Tuesday Wednesday Thursday Friday'
+        option starttime '06:00'
+        option stoptime '22:00'
+        option forcewifidown '0'
+
+config entry 'Weekend'
+        option enabled '0'
+        option daysofweek 'Saturday Sunday'
+        option starttime '00:00'
+        option stoptime '00:00'
+        option forcewifidown '1'
+```
+
+## Script: `wifi_schedule.sh`
+This is the script that does the work. Make your changes to the UCI config file: `/etc/config/wifi_schedule`
+
+Then call the script as follows in order to get the necessary cron jobs created:
+
+`wifi_schedule.sh cron`
+
+All commands:
+```
+wifi_schedule.sh cron|start|stop|forcestop|recheck|getmodules|savemodules|help
+
+    cron: Create cronjob entries.
+    start: Start wifi.
+    stop: Stop wifi gracefully, i.e. check if there are stations associated and if so keep retrying.
+    forcestop: Stop wifi immediately.
+    recheck: Recheck if wifi can be disabled now.
+    getmodules: Returns a list of modules used by the wireless driver(s)
+    savemodules: Saves a list of automatic determined modules to UCI
+    help: This description.
+```
diff --git a/package/network/services/wifischedule/net/etc/config/wifi_schedule b/package/network/services/wifischedule/net/etc/config/wifi_schedule
new file mode 100644 (file)
index 0000000..96943fb
--- /dev/null
@@ -0,0 +1,20 @@
+config global
+        option logging '0'
+        option enabled '0'
+        option recheck_interval '10'
+        option modules_retries '10'
+#       option ignore_stations 'AA:AA:AA:AA:AA:AA BB:BB:BB:BB:BB:BB'
+
+config entry 'Businesshours'
+        option enabled '0'
+        option daysofweek 'Monday Tuesday Wednesday Thursday Friday'
+        option starttime '06:00'
+        option stoptime '22:00'
+        option forcewifidown '0'
+
+config entry 'Weekend'
+        option enabled '0'
+        option daysofweek 'Saturday Sunday'
+        option starttime '00:00'
+        option stoptime '00:00'
+        option forcewifidown '1'
diff --git a/package/network/services/wifischedule/net/usr/bin/wifi_schedule.sh b/package/network/services/wifischedule/net/usr/bin/wifi_schedule.sh
new file mode 100755 (executable)
index 0000000..be483d0
--- /dev/null
@@ -0,0 +1,326 @@
+#!/bin/sh
+
+# Copyright (c) 2016, prpl Foundation
+#
+# Permission to use, copy, modify, and/or distribute this software for any purpose with or without
+# fee is hereby granted, provided that the above copyright notice and this permission notice appear
+# in all copies.
+# 
+# THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE
+# INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE
+# FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
+# ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+#
+# Author: Nils Koenig <openwrt@newk.it>
+
+SCRIPT=$0
+LOCKFILE=/tmp/wifi_schedule.lock
+LOGFILE=/tmp/log/wifi_schedule.log
+LOGGING=0 #default is off
+PACKAGE=wifi_schedule
+GLOBAL=${PACKAGE}.@global[0]
+
+_log()
+{
+    if [ ${LOGGING} -eq 1 ]; then
+        local ts=$(date)
+        echo "$ts $@" >> ${LOGFILE}
+    fi
+}
+
+_exit()
+{
+    local rc=$1
+    lock -u ${LOCKFILE}
+    exit ${rc}
+}
+
+_cron_restart()
+{
+    /etc/init.d/cron restart > /dev/null
+}
+
+_add_cron_script()
+{
+    (crontab -l ; echo "$1") | sort | uniq | crontab -
+    _cron_restart
+}
+
+_rm_cron_script()
+{
+    crontab -l | grep -v "$1" |  sort | uniq | crontab -
+    _cron_restart
+}
+
+_get_uci_value_raw()
+{
+    local value
+    value=$(uci get $1 2> /dev/null)
+    local rc=$?
+    echo ${value}
+    return ${rc}
+}
+
+_get_uci_value()
+{
+    local value
+    value=$(_get_uci_value_raw $1)
+    local rc=$?
+    if [ ${rc} -ne 0 ]; then
+        _log "Could not determine UCI value $1"
+        return 1
+    fi
+    echo ${value}
+}
+
+_format_dow_list()
+{
+    local dow=$1
+    local flist=""
+    local day
+    for day in ${dow}
+    do
+        if [ ! -z ${flist} ]; then
+            flist="${flist},"
+        fi
+        flist="${flist}${day:0:3}"
+    done
+    echo ${flist}
+}
+
+
+_enable_wifi_schedule()
+{
+    local entry=$1
+    local starttime
+    local stoptime
+    starttime=$(_get_uci_value ${PACKAGE}.${entry}.starttime) || _exit 1
+    stoptime=$(_get_uci_value ${PACKAGE}.${entry}.stoptime) || _exit 1
+
+    local dow
+    dow=$(_get_uci_value_raw ${PACKAGE}.${entry}.daysofweek) || _exit 1 
+    
+    local fdow=$(_format_dow_list "$dow")
+    local forcewifidown
+    forcewifidown=$(_get_uci_value ${PACKAGE}.${entry}.forcewifidown)
+    local stopmode="stop"
+    if [ $forcewifidown -eq 1 ]; then
+        stopmode="forcestop"
+    fi
+
+
+    local stop_cron_entry="$(echo ${stoptime} | awk -F':' '{print $2, $1}') * * ${fdow} ${SCRIPT} ${stopmode}" # ${entry}"
+    _add_cron_script "${stop_cron_entry}"
+
+    if [[ $starttime != $stoptime ]]                             
+    then                                                         
+        local start_cron_entry="$(echo ${starttime} | awk -F':' '{print $2, $1}') * * ${fdow} ${SCRIPT} start" # ${entry}"
+        _add_cron_script "${start_cron_entry}"
+    fi
+
+    return 0
+}
+
+_get_wireless_interfaces()
+{
+    local n=$(cat /proc/net/wireless | wc -l)
+    cat /proc/net/wireless | tail -n $(($n - 2))|awk -F':' '{print $1}'| sed  's/ //' 
+}
+
+
+get_module_list()
+{
+    local mod_list
+    local _if
+    for _if in $(_get_wireless_interfaces)
+    do
+        local mod=$(basename $(readlink -f /sys/class/net/${_if}/device/driver))
+        local mod_dep=$(modinfo ${mod} | awk '{if ($1 ~ /depends/) print $2}')
+        mod_list=$(echo -e "${mod_list}\n${mod},${mod_dep}" | sort | uniq)
+    done
+    echo $mod_list | tr ',' ' '
+}
+
+save_module_list_uci()
+{
+    local list=$(get_module_list)
+    uci set ${GLOBAL}.modules="${list}"
+    uci commit ${PACKAGE}
+}
+
+_unload_modules()
+{
+    local list=$(_get_uci_value ${GLOBAL}.modules) 
+    local retries
+    retries=$(_get_uci_value ${GLOBAL}.modules_retries) || _exit 1
+    _log "unload_modules ${list} (retries: ${retries})"
+    local i=0
+    while [[ ${i} -lt ${retries}  &&  "${list}" != "" ]]
+    do  
+        i=$(($i+1))
+        local mod
+        local first=0
+        for mod in ${list}
+        do
+            if [ $first -eq 0 ]; then
+                list=""
+                first=1
+            fi
+            rmmod ${mod} > /dev/null 2>&1
+            if [ $? -ne 0 ]; then
+                list="$list $mod"
+            fi
+        done
+    done
+}
+
+
+_load_modules()
+{
+    local list=$(_get_uci_value ${GLOBAL}.modules)
+    local retries
+    retries=$(_get_uci_value ${GLOBAL}.modules_retries) || _exit 1
+    _log "load_modules ${list} (retries: ${retries})"
+    local i=0
+    while [[ ${i} -lt ${retries}  &&  "${list}" != "" ]]
+    do  
+        i=$(($i+1))
+        local mod
+        local first=0
+        for mod in ${list}
+        do
+            if [ $first -eq 0 ]; then
+                list=""
+                first=1
+            fi
+            modprobe ${mod} > /dev/null 2>&1
+            rc=$? 
+            if [ $rc -ne 255 ]; then
+                list="$list $mod"
+            fi
+        done
+    done
+}
+
+_create_cron_entries()
+{
+    local entries=$(uci show ${PACKAGE} 2> /dev/null | awk -F'.' '{print $2}' | grep -v '=' | grep -v '@global\[0\]' | uniq | sort)
+    local _entry
+    for entry in ${entries}
+    do 
+        local status
+        status=$(_get_uci_value ${PACKAGE}.${entry}.enabled) || _exit 1
+        if [ ${status} -eq 1 ]
+        then
+            _enable_wifi_schedule ${entry}
+        fi
+    done
+}
+
+check_cron_status()
+{
+    local global_enabled
+    global_enabled=$(_get_uci_value ${GLOBAL}.enabled) || _exit 1
+    _rm_cron_script "${SCRIPT}"
+    if [ ${global_enabled} -eq 1 ]; then
+        _create_cron_entries
+    fi
+}
+
+disable_wifi()
+{
+    _rm_cron_script "${SCRIPT} recheck"
+    /sbin/wifi down
+    local unload_modules
+    unload_modules=$(_get_uci_value_raw ${GLOBAL}.unload_modules) || _exit 1
+    if [[ "${unload_modules}" == "1" ]]; then
+        _unload_modules
+    fi    
+}
+
+soft_disable_wifi()
+{
+    local _disable_wifi=1
+    local iwinfo=/usr/bin/iwinfo
+    if [ ! -e ${iwinfo} ]; then
+        _log "${iwinfo} not available, skipping"
+        return 1
+    fi
+
+    local ignore_stations=$(_get_uci_value_raw ${GLOBAL}.ignore_stations)
+    [ -n "${ignore_stations}" ] && _log "Ignoring station(s) ${ignore_stations}"
+
+    # check if no stations are associated
+    local _if
+    for _if in $(_get_wireless_interfaces)
+    do
+        local stations=$(${iwinfo} ${_if} assoclist | grep -o -E '([[:xdigit:]]{1,2}:){5}[[:xdigit:]]{1,2}')
+        if [ -n "${ignore_stations}" ]; then
+            stations=$(echo "${stations}" | grep -vwi -E "${ignore_stations// /|}")
+        fi
+
+        if [ -n "${stations}" ]; then
+            _disable_wifi=0
+            _log "Station(s) $(echo ${stations}) associated on ${_if}"
+        fi
+    done
+
+    if [ ${_disable_wifi} -eq 1 ]; then
+        _log "No stations associated, disable wifi."
+        disable_wifi
+    else
+        _log "Could not disable wifi due to associated stations, retrying..."
+        local recheck_interval=$(_get_uci_value ${GLOBAL}.recheck_interval)
+        _add_cron_script "*/${recheck_interval} * * * * ${SCRIPT} recheck"
+    fi
+}
+
+enable_wifi()
+{
+    _rm_cron_script "${SCRIPT} recheck"
+    local unload_modules
+    unload_modules=$(_get_uci_value_raw ${GLOBAL}.unload_modules) || _exit 1
+    if [[ "${unload_modules}" == "1" ]]; then
+        _load_modules
+    fi
+    /sbin/wifi
+}
+
+usage()
+{
+    echo ""
+    echo "$0 cron|start|stop|forcestop|recheck|getmodules|savemodules|help"
+    echo ""
+    echo "    UCI Config File: /etc/config/${PACKAGE}"
+    echo ""
+    echo "    cron: Create cronjob entries."
+    echo "    start: Start wifi."
+    echo "    stop: Stop wifi gracefully, i.e. check if there are stations associated and if so keep retrying."
+    echo "    forcestop: Stop wifi immediately."
+    echo "    recheck: Recheck if wifi can be disabled now."
+    echo "    getmodules: Returns a list of modules used by the wireless driver(s)"
+    echo "    savemodules: Saves a list of automatic determined modules to UCI"
+    echo "    help: This description."
+    echo ""
+}
+
+###############################################################################
+# MAIN
+###############################################################################
+LOGGING=$(_get_uci_value ${GLOBAL}.logging) || _exit 1
+_log ${SCRIPT} $1 $2
+lock ${LOCKFILE}
+
+case "$1" in
+    cron) check_cron_status ;;
+    start) enable_wifi ;;
+    forcestop) disable_wifi ;;
+    stop) soft_disable_wifi ;;
+    recheck) soft_disable_wifi ;;
+    getmodules) get_module_list ;;
+    savemodules) save_module_list_uci ;;
+    help|--help|-h|*) usage ;;
+esac
+
+_exit 0
diff --git a/package/network/services/xinetd/Makefile b/package/network/services/xinetd/Makefile
new file mode 100644 (file)
index 0000000..9ac1f1c
--- /dev/null
@@ -0,0 +1,70 @@
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=xinetd
+PKG_VERSION:=2.3.15
+PKG_RELEASE:=15
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=$(PKG_NAME)-2-3-15
+PKG_SOURCE_URL:=https://github.com/xinetd-org/xinetd
+PKG_MIRROR_HASH:=ef2258416a278ec7aebaa1e3501c0b59f5ae5e0ea7f1f0220b20143eb208881f
+
+PKG_MAINTAINER:=Florian Eckert <fe@dev.tdt.de>
+PKG_LICENSE:=xinetd
+PKG_LICENSE_FILES:=COPYRIGHT
+PKG_CPE_ID:=cpe:/a:xinetd:xinetd
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/xinetd
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=A powerful and secure super-server
+  URL:=https://github.com/xinetd-org
+endef
+
+define Package/xinetd/description
+       xinetd has access control mechanisms, extensive logging capabilities,
+       the ability to make services available based on time, can place limits
+       on the number of servers that can be started, and has deployable
+       defence mechanisms to protect against port scanners, among other
+       things.
+endef
+
+define Package/xinetd/conffiles
+/etc/config/xinetd
+/etc/xinetd.d
+endef
+
+TARGET_CFLAGS += -DNO_RPC
+TARGET_CPPFLAGS += -DHAVE_RLIM_T
+
+CONFIGURE_ARGS += \
+       --without-libwrap \
+       --with-loadavg
+
+CONFIGURE_VARS += \
+       ac_cv_header_rpc_pmap_clnt_h=no \
+       ac_cv_header_rpc_rpc_h=no \
+       ac_cv_header_rpc_rpcent_h=no
+
+define Package/xinetd/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/xinetd $(1)/usr/sbin/
+       $(INSTALL_DIR) $(1)/etc/config/
+       $(INSTALL_DATA) ./files/xinetd.uci.conf.sample $(1)/etc/config/xinetd
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/xinetd.init $(1)/etc/init.d/xinetd
+       $(INSTALL_DIR) $(1)/etc/xinetd.d
+endef
+
+$(eval $(call BuildPackage,xinetd))
diff --git a/package/network/services/xinetd/files/xinetd.init b/package/network/services/xinetd/files/xinetd.init
new file mode 100644 (file)
index 0000000..5e89b5b
--- /dev/null
@@ -0,0 +1,147 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+. ${IPKG_INSTROOT}/lib/functions.sh
+
+START=50
+STOP=10
+
+USE_PROCD=1
+
+PROG="/usr/sbin/xinetd"
+
+PIDFILE="/var/run/xinetd.pid"
+
+CONF_FILE="/etc/config/xinetd"
+GENERATED_CONF_FILE="/var/run/xinetd.conf"
+OTHER_CONF_DIR="/tmp/xinetd.d"
+
+ServiceEntry="false"
+ListName=""
+ListValue=""
+
+
+# redefined callback for sections when calling config_load
+config_cb() {
+
+       # write out last list option (from last section) if exist and clear
+       if [ "$ListName" != "" ]; then
+               echo -e "\t$ListName = $ListVals" >> $GENERATED_CONF_FILE
+       fi
+
+       ListName=""
+       ListVals=""
+
+       # "close" last service entry (from last section) if exist
+       if [ "$ServiceEntry" = "true" ]; then                           # at least one service section "opened"
+               echo "}" >> $GENERATED_CONF_FILE                        # "close" open service section in config
+               ServiceEntry="false"
+       fi
+
+       if [ $# -eq 0 ]; then                                           # end of config reached
+               return
+       fi
+
+       local type="$1"
+       local name="$(uci -q get xinetd.$2.name || echo $2)"
+
+       if [ "$type" = "service" ]; then
+
+               if [ "$ServiceEntry" = "true" ]; then
+                       echo "}" >> $GENERATED_CONF_FILE                # "close" previous opened service section in config
+               fi
+
+               ServiceEntry="true"
+
+               echo "" >> $GENERATED_CONF_FILE
+               echo "service $name" >> $GENERATED_CONF_FILE
+               echo "{" >> $GENERATED_CONF_FILE
+
+               # redefined callback for options when calling config_load
+               option_cb() {
+                       local option="$1"
+                       local value="$2"
+
+                       # for the redirect option we have to convert the '[ip address]:port' notation
+                       # in config file to 'ip_address port' in the xinetd config file
+                       if [ "$option" = "redirect" ] && [ -n "$value" ]; then
+                               local redirect_ip=""
+                               local redirect_port=""
+
+                               redirect_ip="$(echo ${value%:*})"
+                               redirect_ip="$(echo ${redirect_ip//\[/})"
+                               redirect_ip="$(echo ${redirect_ip//\]/})"
+
+                               redirect_port="$(echo ${value##*:})"
+
+                               echo -e "\t$option = $redirect_ip $redirect_port" >> $GENERATED_CONF_FILE
+                       else
+                               [ -n "$value" ] && [ "$option" != "name" ] && echo -e "\t$option = $value" >> $GENERATED_CONF_FILE
+                       fi
+               }
+
+               # redefined callback for lists when calling config_load
+               list_cb() {
+                       local name="$1"
+                       local value="$2"
+
+                       # write out last list option if new list starts
+                       if [ -n "$ListName" ] && [ "$ListName" != "$name" ]; then
+
+                               echo -e "\t$ListName = $ListVals" >> $GENERATED_CONF_FILE
+
+                               ListName=""
+                               ListVals=""
+                       fi
+
+                       # new list option
+                       if [ -z "$ListName" ]; then
+
+                               ListName="$name"
+                               ListVals="$value"
+                       else
+                               ListVals="$ListVals $value"
+                       fi
+               }
+       else                                                            # ignore non 'service' sections
+               return 0
+       fi
+}
+
+generate_config() {
+       echo "# Auto-generated config file from $CONF_FILE" > $GENERATED_CONF_FILE
+       echo "# Do not edit, changes to this file will be lost on upgrades" >> $GENERATED_CONF_FILE
+       echo "" >> $GENERATED_CONF_FILE
+
+       echo "defaults" >> $GENERATED_CONF_FILE
+       echo "{" >> $GENERATED_CONF_FILE
+       echo "" >> $GENERATED_CONF_FILE
+       echo "}" >> $GENERATED_CONF_FILE
+       echo "" >> $GENERATED_CONF_FILE
+       echo "includedir /etc/xinetd.d" >> $GENERATED_CONF_FILE
+       echo "includedir $OTHER_CONF_DIR" >> $GENERATED_CONF_FILE
+
+       config_load xinetd
+}
+
+start_service() {
+       mkdir -p $OTHER_CONF_DIR
+
+       generate_config
+
+       procd_open_instance
+       procd_set_param command $PROG -dontfork -f $GENERATED_CONF_FILE -pidfile $PIDFILE
+       procd_set_param respawn
+       procd_close_instance
+}
+
+reload_service() {
+       procd_running xinetd "instance1" && {
+               procd_send_signal xinetd "*" QUIT
+               start
+       }
+}
+
+service_triggers() {
+       procd_add_reload_trigger "xinetd"
+}
diff --git a/package/network/services/xinetd/files/xinetd.uci.conf.sample b/package/network/services/xinetd/files/xinetd.uci.conf.sample
new file mode 100644 (file)
index 0000000..13bce53
--- /dev/null
@@ -0,0 +1,13 @@
+#config service 'checkmk_agent'
+#        option type 'UNLISTED'
+#        option port '6556'
+#        option socket_type 'stream'
+#        option protocol 'tcp'
+#        option wait 'no'
+#        option user 'root'
+#        option server '/usr/bin/check_mk_agent'
+#        list only_from '127.0.0.1'
+#        list only_from '1.1.1.1'
+#        list log_on_success 'PID'
+#        list log_on_success 'HOST'
+#        option disable 'no'
diff --git a/package/network/services/xinetd/patches/001-ar.patch b/package/network/services/xinetd/patches/001-ar.patch
new file mode 100644 (file)
index 0000000..4d961ba
--- /dev/null
@@ -0,0 +1,66 @@
+--- a/libs/src/misc/Makefile.in
++++ b/libs/src/misc/Makefile.in
+@@ -62,7 +62,7 @@ libopt: clean
+ $(LIBNAME): $(OBJECTS)
+-      ar r $@ $?
++      $(AR) r $@ $?
+       $(RANLIB) $@
+ install: $(LIBNAME)
+--- a/libs/src/portable/Makefile.in
++++ b/libs/src/portable/Makefile.in
+@@ -57,7 +57,7 @@ libopt: clean
+ $(LIBNAME): $(OBJECTS)
+-      ar r $@ $?
++      $(AR) r $@ $?
+       $(RANLIB) $@
+ install: $(LIBNAME)
+--- a/libs/src/pset/Makefile.in
++++ b/libs/src/pset/Makefile.in
+@@ -53,7 +53,7 @@ libopt: clean
+       mv $(LIBNAME) $(LIBDIR)/optimized
+ $(LIBNAME): $(OBJECTS)
+-      ar r $@ $?
++      $(AR) r $@ $?
+       $(RANLIB) $@
+ install: $(LIBNAME)
+--- a/libs/src/sio/Makefile.in
++++ b/libs/src/sio/Makefile.in
+@@ -52,7 +52,7 @@ libopt: clean
+       $(INSTALL) $(FMODE) $(LIBNAME) $(LIBDIR)/optimized
+ $(LIBNAME): $(OBJECTS)
+-      ar r $@ $?
++      $(AR) r $@ $?
+       $(RANLIB) $@
+ install: $(LIBNAME)
+--- a/libs/src/str/Makefile.in
++++ b/libs/src/str/Makefile.in
+@@ -63,7 +63,7 @@ libopt: clean
+       $(INSTALL) $(FMODE) $(LIBNAME) $(LIBDIR)-O
+ $(LIBNAME): $(OBJECTS)
+-      ar r $@ $?
++      $(AR) r $@ $?
+       $(RANLIB) $@
+ LINT_IGNORE=possible pointer alignment|RCSid unused
+--- a/libs/src/xlog/Makefile.in
++++ b/libs/src/xlog/Makefile.in
+@@ -58,7 +58,7 @@ libopt: clean
+       $(INSTALL) $(FMODE) $(LIBNAME) $(LIBDIR)/optimized
+ $(LIBNAME): $(OBJECTS)
+-      ar r $@ $?
++      $(AR) r $@ $?
+       $(RANLIB) $@
+ install: $(LIBNAME)
diff --git a/package/network/services/xinetd/patches/002-destdir.patch b/package/network/services/xinetd/patches/002-destdir.patch
new file mode 100644 (file)
index 0000000..89075c8
--- /dev/null
@@ -0,0 +1,27 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -75,15 +75,15 @@ dlibxlog: dlibsio dlibstr
+ install: build
+       for i in $(DAEMONDIR) $(BINDIR) $(MANDIR)/man5 $(MANDIR)/man8 ; do \
+-         test -d $$i || mkdir -p $$i ; done
+-      $(INSTALL_CMD) -m 755 xinetd/xinetd $(DAEMONDIR)
+-      $(INSTALL_CMD) -m 755 xinetd/itox $(DAEMONDIR)
+-      $(INSTALL_CMD) -m 755 $(SRCDIR)/xinetd/xconv.pl $(DAEMONDIR)
+-      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.conf.man $(MANDIR)/man5/xinetd.conf.5
+-      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.log.man $(MANDIR)/man8/xinetd.log.8
+-      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.man $(MANDIR)/man8/xinetd.8
+-      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/itox.8 $(MANDIR)/man8/itox.8
+-      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xconv.pl.8 $(MANDIR)/man8/xconv.pl.8
++         test -d $(DESTDIR)$$i || mkdir -p $(DESTDIR)$$i ; done
++      $(INSTALL_CMD) -m 755 xinetd/xinetd $(DESTDIR)$(DAEMONDIR)
++      $(INSTALL_CMD) -m 755 xinetd/itox $(DESTDIR)$(DAEMONDIR)
++      $(INSTALL_CMD) -m 755 $(SRCDIR)/xinetd/xconv.pl $(DESTDIR)$(DAEMONDIR)
++      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.conf.man $(DESTDIR)$(MANDIR)/man5/xinetd.conf.5
++      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.log.man $(DESTDIR)$(MANDIR)/man8/xinetd.log.8
++      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xinetd.man $(DESTDIR)$(MANDIR)/man8/xinetd.8
++      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/itox.8 $(DESTDIR)$(MANDIR)/man8/itox.8
++      $(INSTALL_CMD) -m 644 $(SRCDIR)/xinetd/xconv.pl.8 $(DESTDIR)$(MANDIR)/man8/xconv.pl.8
+       @echo "You must put your xinetd.conf in /etc/xinetd.conf"
+       @echo "There is a sample config file in xinetd/sample.conf and you can"
+       @echo "use xconv.pl to convert your old inetd.conf file to an xinetd format"
diff --git a/package/network/services/xinetd/patches/003-rpc_fix.patch b/package/network/services/xinetd/patches/003-rpc_fix.patch
new file mode 100644 (file)
index 0000000..11f47e7
--- /dev/null
@@ -0,0 +1,19 @@
+--- a/xinetd/confparse.c
++++ b/xinetd/confparse.c
+@@ -745,7 +745,7 @@ static status_e check_entry( struct serv
+          }
+    }
+-/* #ifndef NO_RPC */
++#ifndef NO_RPC
+ #if defined(HAVE_RPC_RPCENT_H) || defined(HAVE_NETDB_H)
+    if ( SC_IS_RPC( scp ) && !SC_IS_UNLISTED( scp ) )
+    {
+@@ -759,6 +759,7 @@ static status_e check_entry( struct serv
+       SC_RPCDATA( scp )->rd_program_number = rep->r_number ;
+    }
+    else
++#endif
+ #endif   /* ! NO_RPC */
+    {
+        if ( !SC_IS_UNLISTED( scp ) ) 
diff --git a/package/network/services/xinetd/patches/004-ident-bind.patch b/package/network/services/xinetd/patches/004-ident-bind.patch
new file mode 100644 (file)
index 0000000..0da0148
--- /dev/null
@@ -0,0 +1,42 @@
+xinetd: socket bind: Invalid argument (errno = 22) when using USERID on ipv6
+
+Use right size of addresses in bind() call. Also use getpeername addresses when
+connecting to ident service to prevent address family mismatch between socket(),
+bind() and connect() calls.
+
+Author: Jan Safranek <jsafrane@redhat.com>
+Reviewed-By: Adam Tkac <atkac@redhat.com>
+
+#diff -up xinetd-2.3.14/xinetd/ident.c.orig xinetd-2.3.14/xinetd/ident.c
+--- a/xinetd/ident.c
++++ b/xinetd/ident.c
+@@ -97,7 +97,13 @@ idresult_e log_remote_user( const struct
+    }
+    CLEAR( sin_contact );
+-   sin_remote = *CONN_XADDRESS( SERVER_CONNECTION( serp ) ) ;
++
++   sin_len = sizeof( sin_remote );
++   if ( getpeername( SERVER_FD( serp ), &sin_remote.sa, &sin_len ) == -1 )
++   {
++      msg( LOG_ERR, func, "(%d) getpeername: %m", getpid() ) ;
++      return( IDR_ERROR ) ;
++   }
+    sin_contact = sin_remote;
+    memcpy( &sin_bind, &sin_local, sizeof(sin_bind) ) ;
+    local_port = 0;
+@@ -127,7 +133,13 @@ idresult_e log_remote_user( const struct
+       msg( LOG_ERR, func, "socket creation: %m" ) ;
+       return( IDR_ERROR ) ;
+    }
+-   if ( bind(sd, &sin_bind.sa, sizeof(sin_bind.sa)) == -1 )
++
++   if ( sin_bind.sa.sa_family == AF_INET ) 
++      sin_len = sizeof( sin_bind.sa_in ) ;
++   else
++      sin_len = sizeof( sin_bind.sa_in6 ) ;
++
++   if ( bind(sd, &sin_bind.sa, sin_len) == -1 )
+    { 
+       msg( LOG_ERR, func, "socket bind: %m" ) ;
+       (void) Sclose( sd ) ;
diff --git a/package/network/services/xinetd/patches/005-format.patch b/package/network/services/xinetd/patches/005-format.patch
new file mode 100644 (file)
index 0000000..30700c8
--- /dev/null
@@ -0,0 +1,23 @@
+--- a/xinetd/connection.c
++++ b/xinetd/connection.c
+@@ -14,6 +14,7 @@
+ #include <syslog.h>
+ #include <stdlib.h>
+ #include <unistd.h>
++#include <inttypes.h>
+ #include <netinet/tcp.h>
+@@ -218,11 +219,7 @@ void conn_dump( const connection_s *cp,
+    tabprint( fd, 1, "service = %s\n", SVC_ID( cp->co_sp ) ) ;
+    tabprint( fd, 1, "descriptor = %d\n", cp->co_descriptor ) ;
+-#if defined(__GNUC__) && !defined(__arch64__) && !defined(__alpha__)
+-   tabprint( fd, 1, "flags = %#llx\n", cp->co_flags ) ;
+-#else
+-   tabprint( fd, 1, "flags = %#lx\n", cp->co_flags ) ;
+-#endif
++   tabprint( fd, 1, "flags = %#" PRIx64 "\n", cp->co_flags ) ;
+    tabprint( fd, 1, "remote_address = %s,%d\n", name,
+                               ntohs( cp->co_remote_address.sa_in.sin_port ) ) ;
+ }
diff --git a/package/network/utils/netcat/Makefile b/package/network/utils/netcat/Makefile
new file mode 100644 (file)
index 0000000..b595fe7
--- /dev/null
@@ -0,0 +1,66 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=netcat
+PKG_VERSION:=0.7.1
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=@SF/$(PKG_NAME)
+PKG_HASH:=b55af0bbdf5acc02d1eb6ab18da2acd77a400bafd074489003f3df09676332bb
+PKG_MAINTAINER:=Adam Gensler <openwrt@a.gnslr.us>
+PKG_LICENSE:=GPL-2.0
+PKG_CPE_ID:=cpe:/a:netcat:netcat
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/netcat
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=A feature-rich network debugging and exploration tool.
+  URL:=http://netcat.sourceforge.net/
+endef
+
+define Package/netcat/description
+               Netcat is a featured networking utility which reads and writes data across network connections, using the TCP/IP protocol.
+       It is designed to be a reliable "back-end" tool that can be used directly or easily driven by other programs and scripts. At the same time, it is a feature-rich network debugging and exploration tool, since it can create almost any kind of connection you would need and has several interesting built-in capabilities.
+endef
+
+define Build/Configure
+       $(call Build/Configure/Default, \
+               --disable-rpath \
+               --with-included-getopt \
+       )
+endef
+
+define Package/netcat/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/netcat \
+               $(1)/usr/bin
+endef
+
+define Package/netcat/postinst
+#!/bin/sh
+if [ -e $${IPKG_INSTROOT}/usr/bin/nc ]; then
+  rm -rf $${IPKG_INSTROOT}/usr/bin/nc;
+fi
+ln -s ./netcat $${IPKG_INSTROOT}/usr/bin/nc
+endef
+
+define Package/netcat/postrm
+#!/bin/sh
+rm $${IPKG_INSTROOT}/usr/bin/nc
+ln -s ../../bin/busybox $${IPKG_INSTROOT}/usr/bin/nc
+$${IPKG_INSTROOT}/usr/bin/nc 2>&1 | grep 'applet not found' > /dev/null 2>&1 && rm $${IPKG_INSTROOT}/usr/bin/nc
+exit 0
+endef
+
+
+$(eval $(call BuildPackage,netcat))
diff --git a/package/network/utils/netcat/patches/001-netcat_flag_count.patch b/package/network/utils/netcat/patches/001-netcat_flag_count.patch
new file mode 100644 (file)
index 0000000..004fe94
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/src/flagset.c
++++ b/src/flagset.c
+@@ -134,7 +134,7 @@ unsigned short netcat_flag_next(unsigned
+ int netcat_flag_count(void)
+ {
+-  register char c;
++  register unsigned char c;
+   register int i;
+   int ret = 0;
+@@ -154,7 +154,7 @@ int netcat_flag_count(void)
+       Assumed that the bit number 1 is the sign, and that we will shift the
+       bit 1 (or the bit that takes its place later) until the the most right,
+       WHY it has to keep the wrong sign? */
+-      ret -= (c >> 7);
++      ret += (c >> 7);
+       c <<= 1;
+     }
+   }
diff --git a/package/network/utils/netcat/patches/002-udp_listen_fix.patch b/package/network/utils/netcat/patches/002-udp_listen_fix.patch
new file mode 100644 (file)
index 0000000..0282b38
--- /dev/null
@@ -0,0 +1,14 @@
+--- a/src/core.c
++++ b/src/core.c
+@@ -273,9 +273,9 @@ static int core_udp_listen(nc_sock_t *nc
+       dup_socket.domain = ncsock->domain;
+       dup_socket.proto = ncsock->proto;
+       memcpy(&dup_socket.local_host.iaddrs[0], &local_addr.sin_addr,
+-             sizeof(local_addr));
++             sizeof(local_addr.sin_addr));
+       memcpy(&dup_socket.host.iaddrs[0], &rem_addr.sin_addr,
+-             sizeof(local_addr));
++             sizeof(rem_addr.sin_addr));
+       dup_socket.local_port.netnum = local_addr.sin_port;
+       dup_socket.local_port.num = ntohs(local_addr.sin_port);
+       dup_socket.port.netnum = rem_addr.sin_port;
diff --git a/package/network/utils/netperf/Makefile b/package/network/utils/netperf/Makefile
new file mode 100644 (file)
index 0000000..fa88936
--- /dev/null
@@ -0,0 +1,54 @@
+#
+# Copyright (C) 2006-2011 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=netperf
+PKG_VERSION:=2.7.0
+PKG_RELEASE:=3
+PKG_LICENSE:=Custom
+
+PKG_SOURCE_PROTO:=git
+PKG_SOURCE_VERSION:=$(PKG_NAME)-$(PKG_VERSION)
+PKG_SOURCE_URL:=https://github.com/HewlettPackard/netperf
+PKG_MIRROR_HASH:=fa46ffc25a00c925167d96e4c57131b5b650ea725b12b69ff6feabec759b271d
+
+PKG_CPE_ID:=cpe:/a:netperf:netperf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/netperf
+  SECTION:=net
+  CATEGORY:=Network
+  TITLE:=Network performance measurement tool
+  URL:=https://github.com/HewlettPackard/netperf
+  MAINTAINER:=Toke Høiland-Jørgensen <toke@toke.dk>
+endef
+
+TARGET_CFLAGS+=-std=gnu89
+
+CONFIGURE_ARGS += --enable-demo
+
+define Package/netperf/install
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/netserver.init $(1)/etc/init.d/netserver
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/netperf $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/netserver $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/arr_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/packet_byte_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/sctp_stream_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/snapshot_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/tcp_range_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/tcp_rr_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/tcp_stream_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/udp_rr_script $(1)/lib/netperf
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/doc/examples/udp_stream_script $(1)/lib/netperf
+endef
+
+$(eval $(call BuildPackage,netperf))
diff --git a/package/network/utils/netperf/files/netserver.init b/package/network/utils/netperf/files/netserver.init
new file mode 100644 (file)
index 0000000..42fcf33
--- /dev/null
@@ -0,0 +1,12 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2006-2011 OpenWrt.org
+
+START=50
+
+start() {
+       service_start /usr/bin/netserver
+}
+
+stop() {
+       service_stop /usr/bin/netserver
+}
diff --git a/package/network/utils/netperf/patches/010-gcc10_multiple_definition_fix.patch b/package/network/utils/netperf/patches/010-gcc10_multiple_definition_fix.patch
new file mode 100644 (file)
index 0000000..3a1e010
--- /dev/null
@@ -0,0 +1,19 @@
+--- a/src/nettest_omni.c
++++ b/src/nettest_omni.c
+@@ -454,16 +454,6 @@ static  int remote_cpu_method;
+ static int client_port_min = 5000;
+ static int client_port_max = 65535;
+- /* different options for the sockets                         */
+-
+-int
+-  loc_nodelay,                /* don't/do use NODELAY locally         */
+-  rem_nodelay,                /* don't/do use NODELAY remotely        */
+-  loc_sndavoid,               /* avoid send copies locally            */
+-  loc_rcvavoid,               /* avoid recv copies locally            */
+-  rem_sndavoid,               /* avoid send copies remotely           */
+-  rem_rcvavoid;       /* avoid recv_copies remotely           */
+-
+ extern int
+   loc_tcpcork,
+   rem_tcpcork,
diff --git a/package/network/utils/wget/Makefile b/package/network/utils/wget/Makefile
new file mode 100644 (file)
index 0000000..aa06b4d
--- /dev/null
@@ -0,0 +1,108 @@
+#
+# Copyright (C) 2007-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=wget
+PKG_VERSION:=1.21.4
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
+PKG_HASH:=81542f5cefb8faacc39bbbc6c82ded80e3e4a88505ae72ea51df27525bcde04c
+
+PKG_MAINTAINER:=
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:gnu:wget
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/wget/Default
+  SECTION:=net
+  CATEGORY:=Network
+  DEPENDS:=+libpcre2 +zlib
+  SUBMENU:=File Transfer
+  TITLE:=Non-interactive network downloader
+  URL:=https://www.gnu.org/software/wget/index.html
+  PROVIDES:=gnu-wget wget
+endef
+
+define Package/wget/Default/description
+ Wget is a network utility to retrieve files from the Web using http
+ and ftp, the two most widely used Internet protocols. It works
+ non-interactively, so it will work in the background, after having
+ logged off. The program supports recursive retrieval of web-authoring
+ pages as well as ftp sites -- you can use wget to make mirrors of
+ archives and home pages or to travel the Web like a WWW robot.
+endef
+
+define Package/wget-ssl
+$(call Package/wget/Default)
+  DEPENDS+= +libopenssl +librt
+  TITLE+= (with SSL support)
+  VARIANT:=ssl
+  ALTERNATIVES:=300:/usr/bin/wget:/usr/libexec/wget-ssl
+endef
+
+define Package/wget-ssl/description
+$(call Package/wget/Default/description)
+ This package is built with SSL support.
+endef
+
+define Package/wget-nossl
+$(call Package/wget/Default)
+  TITLE+= (without SSL support)
+  VARIANT:=nossl
+  ALTERNATIVES:=300:/usr/bin/wget:/usr/libexec/wget-nossl
+endef
+
+define Package/wget-nossl/description
+$(call Package/wget/Default/description)
+ This package is built without SSL support.
+endef
+
+CONFIGURE_ARGS+= \
+       --disable-rpath \
+       --disable-iri \
+       --with-included-libunistring \
+       --without-libuuid \
+       --without-libpsl
+
+CONFIGURE_VARS += \
+       ac_cv_header_uuid_uuid_h=no
+
+ifeq ($(BUILD_VARIANT),ssl)
+       CONFIGURE_ARGS+= \
+               --with-ssl=openssl \
+               --with-libssl-prefix="$(STAGING_DIR)/usr"
+
+       CONFIGURE_VARS += \
+               ac_cv_libssl=yes
+endif
+
+ifeq ($(BUILD_VARIANT),nossl)
+       CONFIGURE_ARGS+= \
+               --disable-ntlm \
+               --without-ssl
+endif
+
+define Package/wget-ssl/install
+       $(INSTALL_DIR) $(1)/usr/libexec
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wget $(1)/usr/libexec/wget-ssl
+endef
+
+define Package/wget-nossl/install
+       $(INSTALL_DIR) $(1)/usr/libexec
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/wget $(1)/usr/libexec/wget-nossl
+endef
+
+$(eval $(call BuildPackage,wget-ssl))
+$(eval $(call BuildPackage,wget-nossl))
diff --git a/package/utils/bash/Makefile b/package/utils/bash/Makefile
new file mode 100644 (file)
index 0000000..2908e6b
--- /dev/null
@@ -0,0 +1,101 @@
+#
+# Copyright (C) 2007-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=bash
+PKG_VERSION:=5.2.15
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=@GNU/bash
+PKG_HASH:=13720965b5f4fc3a0d4b61dd37e7565c741da9a5be24edc2ae00182fc1b3588c
+
+PKG_MAINTAINER:=Marcel Denia <naoir@gmx.net>
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:gnu:bash
+
+PKG_INSTALL:=1
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/bash
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Shells
+  TITLE:=The GNU Bourne Again SHell
+  DEPENDS:=+libncurses +libreadline
+  URL:=http://www.gnu.org/software/bash/
+endef
+
+define Package/bash/description
+  Bash is an sh-compatible command language interpreter that executes
+  commands read from the standard input or from a file. Bash also
+  incorporates useful features from the Korn and C shells (ksh and csh).
+endef
+
+define Package/bash/conffiles
+/etc/bash.bashrc
+/etc/bash.bash_logout
+/etc/profile.d/sys_bashrc.sh
+endef
+
+# Bash detects and enables certain features by runtest simple piece of code
+# which is not viable when doing cross compilation and default to no in many
+# cases.  Grep for 'cross.compil' in aclocal.m4 and config-bot.h for details
+#
+# bash_cv_job_control_missing: Job control is needed for bash to be used as the
+# default shell
+#
+# bash_cv_getcwd_malloc: The replacement by bash does not work well with
+# overlayfs.  See "bash getcwd errors when running under OverlayFS"
+# http://permalink.gmane.org/gmane.linux.embedded.yocto.general/25204
+#
+# bash_cv_dev_fd: The test is done on build system but OpenWrt currently does
+# not have /dev/fd, it provides /proc/self/fd/ instead
+#
+# bash_cv_sys_named_pipes: Required for process substituion
+CONFIGURE_VARS += \
+       ac_cv_rl_prefix="$(STAGING_DIR)/usr" \
+       ac_cv_rl_version="8.0" \
+       bash_cv_getcwd_malloc=yes \
+       bash_cv_job_control_missing=present \
+       bash_cv_dev_fd=whacky \
+       bash_cv_sys_named_pipes=present \
+
+# The following are some other tests that cannot run when cross-compiling
+CONFIGURE_VARS += \
+       bash_cv_func_sigsetjmp=present \
+       bash_cv_printf_a_format=yes \
+
+CONFIGURE_ARGS+= \
+       --with-curses \
+       --without-bash-malloc \
+       --bindir=/bin \
+       --disable-rpath \
+       --enable-direxpand-default \
+       --enable-job-control \
+       --enable-readline
+
+define Package/bash/postinst
+#!/bin/sh
+grep -q bash "$${IPKG_INSTROOT}/etc/shells" || {
+       echo /bin/bash >> "$${IPKG_INSTROOT}/etc/shells"
+       echo /bin/rbash >> "$${IPKG_INSTROOT}/etc/shells"
+}
+endef
+
+define Package/bash/install
+       $(INSTALL_DIR) $(1)/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/bin/bash $(1)/bin/
+       $(LN) bash $(1)/bin/rbash
+       $(CP) ./files/* $(1)/
+endef
+
+$(eval $(call BuildPackage,bash))
diff --git a/package/utils/bash/files/etc/bash.bashrc b/package/utils/bash/files/etc/bash.bashrc
new file mode 100644 (file)
index 0000000..158deaa
--- /dev/null
@@ -0,0 +1,6 @@
+# System-wide .bashrc file
+
+# Continue if running interactively
+[[ $- == *i* ]] || return 0
+
+[ \! -s /etc/shinit ] || . /etc/shinit
diff --git a/package/utils/bash/files/etc/profile.d/sys_bashrc.sh b/package/utils/bash/files/etc/profile.d/sys_bashrc.sh
new file mode 100644 (file)
index 0000000..5c06bb5
--- /dev/null
@@ -0,0 +1 @@
+[ -z "$BASH" ] || [ "$BASH" = /bin/sh ] || [ \! -s /etc/bash.bashrc ] || . /etc/bash.bashrc
diff --git a/package/utils/bash/patches/900-no_doc.patch b/package/utils/bash/patches/900-no_doc.patch
new file mode 100644 (file)
index 0000000..9e9977c
--- /dev/null
@@ -0,0 +1,13 @@
+--- a/Makefile.in
++++ b/Makefile.in
+@@ -813,10 +813,8 @@ loadables:
+ #     $(MAKE) -f $(srcdir)/Makefile $(MFLAGS) srcdir=$(srcdir)
+ doc documentation:  force
+-      @(cd $(DOCDIR) ; $(MAKE) $(MFLAGS) )
+ info dvi ps: force
+-      @(cd $(DOCDIR) ; $(MAKE) $(MFLAGS) CFLAGS='$(CCFLAGS)' $@ )
+ force:
diff --git a/package/utils/bash/patches/901-startup-files.patch b/package/utils/bash/patches/901-startup-files.patch
new file mode 100644 (file)
index 0000000..428298d
--- /dev/null
@@ -0,0 +1,27 @@
+--- a/config-top.h
++++ b/config-top.h
+@@ -97,20 +97,20 @@
+ #define DEFAULT_BASHRC "~/.bashrc"
+ /* System-wide .bashrc file for interactive shells. */
+-/* #define SYS_BASHRC "/etc/bash.bashrc" */
++#define SYS_BASHRC "/etc/bash.bashrc"
+ /* System-wide .bash_logout for login shells. */
+-/* #define SYS_BASH_LOGOUT "/etc/bash.bash_logout" */
++#define SYS_BASH_LOGOUT "/etc/bash.bash_logout"
+ /* Define this to make non-interactive shells begun with argv[0][0] == '-'
+    run the startup files when not in posix mode. */
+-/* #define NON_INTERACTIVE_LOGIN_SHELLS */
++#define NON_INTERACTIVE_LOGIN_SHELLS
+ /* Define this if you want bash to try to check whether it's being run by
+    sshd and source the .bashrc if so (like the rshd behavior).  This checks
+    for the presence of SSH_CLIENT or SSH2_CLIENT in the initial environment,
+    which can be fooled under certain not-uncommon circumstances. */
+-/* #define SSH_SOURCE_BASHRC */
++#define SSH_SOURCE_BASHRC
+ /* Define if you want the case-toggling operators (~[~]) and the
+    `capcase' variable attribute (declare -c). */
diff --git a/package/utils/bash/patches/902-missing-params.patch b/package/utils/bash/patches/902-missing-params.patch
new file mode 100644 (file)
index 0000000..45d3281
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/lib/sh/strtod.c
++++ b/lib/sh/strtod.c
+@@ -41,6 +41,8 @@ extern int errno;
+ #include <bashansi.h>
++#include <stdc.h>
++
+ #ifndef NULL
+ #  define NULL 0
+ #endif
diff --git a/package/utils/dmidecode/Makefile b/package/utils/dmidecode/Makefile
new file mode 100644 (file)
index 0000000..35a9511
--- /dev/null
@@ -0,0 +1,48 @@
+#
+# Copyright (C) 2007-2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=dmidecode
+PKG_VERSION:=3.2
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@SAVANNAH/$(PKG_NAME)
+PKG_HASH:=077006fa2da0d06d6383728112f2edef9684e9c8da56752e97cd45a11f838edd
+PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
+
+PKG_LICENSE:=GPL-2.0
+PKG_LICENSE_FILES:=LICENSE
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/dmidecode
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=@(TARGET_x86||TARGET_x86_64||TARGET_armsr_armv8)
+  TITLE:=Displays BIOS informations.
+  URL:=https://www.nongnu.org/dmidecode/
+endef
+
+define Package/dmidecode/description
+       Dmidecode reports information about your system's hardware
+       as described in your system BIOS according to the SMBIOS/DMI
+       standard.
+endef
+
+MAKE_FLAGS += \
+       prefix="/usr"
+
+define Package/dmidecode/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/$(PKG_NAME) $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,dmidecode))
diff --git a/package/utils/dosfstools/Makefile b/package/utils/dosfstools/Makefile
new file mode 100644 (file)
index 0000000..939369e
--- /dev/null
@@ -0,0 +1,52 @@
+#
+# Copyright (C) 2006-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=dosfstools
+PKG_VERSION:=4.2
+PKG_RELEASE:=4
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://github.com/dosfstools/dosfstools/releases/download/v$(PKG_VERSION)/ \
+               http://fossies.org/linux/misc
+PKG_HASH:=64926eebf90092dca21b14259a5301b7b98e7b1943e8a201c7d726084809b527
+
+PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:dosfstools_project:dosfstools
+
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
+
+CONFIGURE_ARGS += \
+       --without-udev
+
+define Package/dosfstools
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Filesystem
+  DEPENDS:=$(ICONV_DEPENDS)
+  TITLE:=Utilities for making and checking MS-DOS FAT filesystems
+  URL:=https://github.com/dosfstools
+endef
+
+define Package/dosfstools/description
+       The dosfstools package includes the mkfs.fat and fsck.fat utilities, which respectively make and check MS-DOS FAT filesystems.
+endef
+
+define Package/dosfstools/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/fatlabel $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/fsck.fat $(1)/usr/sbin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/mkfs.fat $(1)/usr/sbin/
+endef
+
+$(eval $(call BuildPackage,dosfstools))
diff --git a/package/utils/findutils/Makefile b/package/utils/findutils/Makefile
new file mode 100644 (file)
index 0000000..76e40b4
--- /dev/null
@@ -0,0 +1,95 @@
+#
+# Copyright (C) 2006-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=findutils
+PKG_VERSION:=4.9.0
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@GNU/$(PKG_NAME)
+PKG_HASH:=a2bfb8c09d436770edc59f50fa483e785b161a3b7b9d547573cb08065fd462fe
+
+PKG_LICENSE:=GPL-3.0-or-later
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:gnu:findutils
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/findutils/Default
+       TITLE:=GNU Find Utilities
+       SECTION:=utils
+       CATEGORY:=Utilities
+       URL:=https://www.gnu.org/software/findutils/
+endef
+
+define Package/findutils/description/Default
+Replace busybox versions of findutils with full GNU versions.
+This is normally not needed as busybox is smaller and provides
+sufficient functionality, but some users may want or need
+the full functionality of the GNU tools.
+endef
+
+define Package/findutils
+       $(call Package/findutils/Default)
+       TITLE+= (all)
+       DEPENDS:= \
+       +findutils-find \
+       +findutils-xargs \
+       +findutils-locate
+endef
+
+define Package/findutils-find
+       $(call Package/findutils/Default)
+       TITLE+= - find utility
+       ALTERNATIVES:=300:/usr/bin/find:/usr/libexec/find-findutils
+endef
+
+define Package/findutils-xargs
+       $(call Package/findutils/Default)
+       TITLE+= - xargs utility
+       ALTERNATIVES:=300:/usr/bin/xargs:/usr/libexec/xargs-findutils
+endef
+
+define Package/findutils-locate
+       $(call Package/findutils/Default)
+       TITLE+= - locate and updatedb utility
+endef
+
+CONFIGURE_ARGS += \
+       --localstatedir=/srv/var \
+       --without-selinux
+CONFIGURE_VARS += ac_cv_path_SORT=sort
+
+define Package/findutils/install
+       true
+endef
+
+define Package/findutils-find/install
+       $(INSTALL_DIR) $(1)/usr/libexec
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/find $(1)/usr/libexec/find-findutils
+endef
+
+define Package/findutils-xargs/install
+       $(INSTALL_DIR) $(1)/usr/libexec
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/xargs $(1)/usr/libexec/xargs-findutils
+endef
+
+define Package/findutils-locate/install
+       $(INSTALL_DIR) $(1)/usr/bin $(1)/srv/var
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/locate $(1)/usr/bin/
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/updatedb $(1)/usr/bin/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib $(1)/usr/
+endef
+
+$(eval $(call BuildPackage,findutils))
+$(eval $(call BuildPackage,findutils-find))
+$(eval $(call BuildPackage,findutils-locate))
+$(eval $(call BuildPackage,findutils-xargs))
diff --git a/package/utils/flashrom/Makefile b/package/utils/flashrom/Makefile
new file mode 100644 (file)
index 0000000..6fee21d
--- /dev/null
@@ -0,0 +1,100 @@
+#
+# Copyright (C) 2010-2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=flashrom
+PKG_VERSION:=1.2.1
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-v$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=https://download.flashrom.org/releases
+PKG_HASH:=89a7ff5beb08c89b8795bbd253a51b9453547a864c31793302296b56bbc56d65
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)-$(BUILD_VARIANT)/$(PKG_NAME)-v$(PKG_VERSION)
+
+PKG_MAINTAINER:=Álvaro Fernández Rojas <noltari@gmail.com>
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=COPYING
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/meson.mk
+include flashrom.mk
+
+define Package/flashrom/default
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=FlashROM Utility
+  URL:=https://www.flashrom.org/
+endef
+
+define Package/flashrom
+  $(Package/flashrom/default)
+  TITLE+= (full)
+  DEPENDS+= \
+    +(TARGET_x86||TARGET_x86_64):dmidecode \
+    +libftdi1 \
+    +libusb-1.0 \
+    +pciutils
+  VARIANT:=full
+  DEFAULT_VARIANT:=1
+endef
+
+define Package/flashrom-pci
+  $(Package/flashrom/default)
+  TITLE+= (pci)
+  DEPENDS+= \
+    +(TARGET_x86||TARGET_x86_64):dmidecode \
+    +pciutils
+  VARIANT:=pci
+endef
+
+define Package/flashrom-spi
+  $(Package/flashrom/default)
+  TITLE+= (spi)
+  VARIANT:=spi
+endef
+
+define Package/flashrom-usb
+  $(Package/flashrom/default)
+  TITLE+= (usb)
+  DEPENDS+= \
+    +libftdi1 \
+    +libusb-1.0
+  VARIANT:=usb
+endef
+
+define Package/flashrom/default/description
+ flashrom is an utility for identifying, reading, writing, verifying
+ and erasing flash chips. It's often used to flash BIOS/EFI/coreboot
+ /firmware images.
+endef
+Package/flashrom/description = $(Package/flashrom/default/description)
+Package/flashrom-pci/description = $(Package/flashrom/default/description)
+Package/flashrom-spi/description = $(Package/flashrom/default/description)
+Package/flashrom-usb/description = $(Package/flashrom/default/description)
+
+define Package/flashrom/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/flashrom $(1)/usr/sbin/flashrom
+endef
+define Package/flashrom-pci/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/flashrom $(1)/usr/sbin/flashrom-pci
+endef
+define Package/flashrom-spi/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/flashrom $(1)/usr/sbin/flashrom-spi
+endef
+define Package/flashrom-usb/install
+       $(INSTALL_DIR) $(1)/usr/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/flashrom $(1)/usr/sbin/flashrom-usb
+endef
+
+$(eval $(call BuildPackage,flashrom))
+$(eval $(call BuildPackage,flashrom-pci))
+$(eval $(call BuildPackage,flashrom-spi))
+$(eval $(call BuildPackage,flashrom-usb))
diff --git a/package/utils/flashrom/flashrom.mk b/package/utils/flashrom/flashrom.mk
new file mode 100644 (file)
index 0000000..f0fdff5
--- /dev/null
@@ -0,0 +1,99 @@
+# Flashrom variants
+
+define DefaultProgrammer
+  MAKE_FLAGS += CONFIG_DEFAULT_PROGRAMMER=PROGRAMMER_$(1)
+endef
+
+ifeq ($(BUILD_VARIANT),full)
+  $(eval $(call DefaultProgrammer,LINUX_SPI))
+  FLASHROM_BASIC := true
+  FLASHROM_FTDI := true
+  FLASHROM_PCI := true
+  FLASHROM_RAW := $(if $(findstring x86,$(CONFIG_ARCH)),true,false)
+  FLASHROM_SERIAL := true
+  FLASHROM_USB := true
+endif
+ifeq ($(BUILD_VARIANT),pci)
+  $(eval $(call DefaultProgrammer,INTERNAL))
+  FLASHROM_BASIC := true
+  FLASHROM_FTDI := false
+  FLASHROM_PCI := true
+  FLASHROM_RAW := $(if $(findstring x86,$(CONFIG_ARCH)),true,false)
+  FLASHROM_SERIAL := false
+  FLASHROM_USB := false
+endif
+ifeq ($(BUILD_VARIANT),spi)
+  $(eval $(call DefaultProgrammer,LINUX_SPI))
+  FLASHROM_BASIC := true
+  FLASHROM_FTDI := false
+  FLASHROM_PCI := false
+  FLASHROM_RAW := false
+  FLASHROM_SERIAL := false
+  FLASHROM_USB := false
+endif
+ifeq ($(BUILD_VARIANT),usb)
+  $(eval $(call DefaultProgrammer,SERPROG))
+  FLASHROM_BASIC := true
+  FLASHROM_FTDI := true
+  FLASHROM_PCI := false
+  FLASHROM_RAW := false
+  FLASHROM_SERIAL := true
+  FLASHROM_USB := true
+endif
+
+MESON_ARGS += \
+       -Dconfig_dummy=$(FLASHROM_BASIC) \
+       -Dconfig_linux_mtd=$(FLASHROM_BASIC) \
+       -Dconfig_linux_spi=$(FLASHROM_BASIC) \
+       -Dconfig_mstarddc_spi=$(FLASHROM_BASIC) \
+       \
+       -Dconfig_ft2232_spi=$(FLASHROM_FTDI) \
+       -Dconfig_usbblaster_spi=$(FLASHROM_FTDI) \
+       \
+       -Dpciutils=$(FLASHROM_PCI) \
+       -Dconfig_atavia=$(FLASHROM_PCI) \
+       -Dconfig_drkaiser=$(FLASHROM_PCI) \
+       -Dconfig_gfxnvidia=$(FLASHROM_PCI) \
+       -Dconfig_internal=$(FLASHROM_PCI) \
+       -Dconfig_it8212=$(FLASHROM_PCI) \
+       -Dconfig_nicintel=$(FLASHROM_PCI) \
+       -Dconfig_nicintel_spi=$(FLASHROM_PCI) \
+       -Dconfig_nicintel_eeprom=$(FLASHROM_PCI) \
+       -Dconfig_ogp_spi=$(FLASHROM_PCI) \
+       -Dconfig_satasii=$(FLASHROM_PCI) \
+       \
+       -Dconfig_bitbang_spi=$(FLASHROM_RAW) \
+       -Dconfig_rayer_spi=$(FLASHROM_RAW) \
+       \
+       -Dconfig_buspirate_spi=$(FLASHROM_SERIAL) \
+       -Dconfig_pony_spi=$(FLASHROM_SERIAL) \
+       -Dconfig_serprog=$(FLASHROM_SERIAL) \
+       \
+       -Dusb=$(FLASHROM_USB) \
+       -Dconfig_ch341a_spi=$(FLASHROM_USB) \
+       -Dconfig_dediprog=$(FLASHROM_USB) \
+       -Dconfig_developerbox_spi=$(FLASHROM_USB) \
+       -Dconfig_digilent_spi=$(FLASHROM_USB) \
+       -Dconfig_pickit2_spi=$(FLASHROM_USB) \
+       -Dconfig_stlinkv3_spi=$(FLASHROM_USB)
+
+# PCI
+ifeq ($(findstring i386,$(CONFIG_ARCH))$(findstring x86,$(CONFIG_ARCH)),)
+MESON_ARGS += \
+       -Dconfig_atahpt=false \
+       -Dconfig_atapromise=false \
+       -Dconfig_internal_dmi=true \
+       -Dconfig_nic3com=false \
+       -Dconfig_nicnatsemi=false \
+       -Dconfig_nicrealtek=false \
+       -Dconfig_satamv=false
+else
+MESON_ARGS += \
+       -Dconfig_atahpt=$(FLASHROM_PCI) \
+       -Dconfig_atapromise=$(FLASHROM_PCI) \
+       -Dconfig_internal_dmi=$(if $(FLASHROM_PCI),false,true)
+       -Dconfig_nic3com=$(FLASHROM_PCI) \
+       -Dconfig_nicnatsemi=$(FLASHROM_PCI) \
+       -Dconfig_nicrealtek=$(FLASHROM_PCI) \
+       -Dconfig_satamv=$(FLASHROM_PCI)
+endif
diff --git a/package/utils/flashrom/patches/010-bitbang.patch b/package/utils/flashrom/patches/010-bitbang.patch
new file mode 100644 (file)
index 0000000..b5ff7cd
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/meson.build
++++ b/meson.build
+@@ -33,6 +33,7 @@ add_project_arguments('-DFLASHROM_VERSIO
+ config_atahpt = get_option('config_atahpt')
+ config_atapromise = get_option('config_atapromise')
+ config_atavia = get_option('config_atavia')
++config_bitbang_spi = get_option('config_bitbang_spi')
+ config_buspirate_spi = get_option('config_buspirate_spi')
+ config_ch341a_spi = get_option('config_ch341a_spi')
+ config_dediprog = get_option('config_dediprog')
+--- a/meson_options.txt
++++ b/meson_options.txt
+@@ -4,6 +4,7 @@ option('usb', type : 'boolean', value :
+ option('config_atahpt', type : 'boolean', value : false, description : 'Highpoint (HPT) ATA/RAID controllers')
+ option('config_atapromise', type : 'boolean', value : false, description : 'Promise ATA controller')
+ option('config_atavia', type : 'boolean', value : true, description : 'VIA VT6421A LPC memory')
++option('config_bitbang_spi', type : 'boolean', value : true, description : 'Bitbang')
+ option('config_buspirate_spi', type : 'boolean', value : true, description : 'Bus Pirate SPI')
+ option('config_ch341a_spi', type : 'boolean', value : true, description : 'Winchiphead CH341A')
+ option('config_dediprog', type : 'boolean', value : true, description : 'Dediprog SF100')
diff --git a/package/utils/flashrom/patches/020-raw-access.patch b/package/utils/flashrom/patches/020-raw-access.patch
new file mode 100644 (file)
index 0000000..5550550
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/meson.build
++++ b/meson.build
+@@ -263,6 +263,7 @@ endif
+ if config_satasii
+   srcs += 'satasii.c'
+   cargs += '-DCONFIG_SATASII=1'
++  need_raw_access = true
+ endif
+ if config_serprog
+   srcs += 'serprog.c'
diff --git a/package/utils/flashrom/patches/030-ppc.patch b/package/utils/flashrom/patches/030-ppc.patch
new file mode 100644 (file)
index 0000000..41095fd
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/hwaccess.c
++++ b/hwaccess.c
+@@ -71,7 +71,7 @@ static inline void sync_primitive(void)
+  * See also https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/memory-barriers.txt
+  */
+ #if IS_PPC // cf. http://lxr.free-electrons.com/source/arch/powerpc/include/asm/barrier.h
+-      asm("eieio" : : : "memory");
++      __asm__ ("eieio" : : : "memory");
+ #elif IS_SPARC
+ #if defined(__sparc_v9__) || defined(__sparcv9)
+       /* Sparc V9 CPUs support three different memory orderings that range from x86-like TSO to PowerPC-like
diff --git a/package/utils/flashrom/patches/040-uclibc.patch b/package/utils/flashrom/patches/040-uclibc.patch
new file mode 100644 (file)
index 0000000..c07361d
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/meson.build
++++ b/meson.build
+@@ -25,7 +25,7 @@ conf = configuration_data()
+ cc = meson.get_compiler('c')
+ add_project_arguments(cc.get_supported_arguments(warning_flags), language : 'c')
+ add_project_arguments('-D_DEFAULT_SOURCE', language : 'c')
+-add_project_arguments('-D_POSIX_C_SOURCE', language : 'c') # required for fileno
++add_project_arguments('-D_POSIX_C_SOURCE=200809L', language : 'c') # required for fileno, nanosleep, and strndup
+ add_project_arguments('-D_BSD_SOURCE', language : 'c') # required for glibc < v2.19
+ add_project_arguments('-DFLASHROM_VERSION="' + meson.project_version() + '"', language : 'c')
diff --git a/package/utils/lvm2/Makefile b/package/utils/lvm2/Makefile
new file mode 100644 (file)
index 0000000..42cc59a
--- /dev/null
@@ -0,0 +1,165 @@
+#
+# Copyright (C) 2009-2010 Stefan Monnier
+# Copyright (C) 2011-2018 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v3+.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=LVM2
+PKG_VERSION:=2.03.23
+PKG_VERSION_DM:=1.02.197
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME).$(PKG_VERSION).tgz
+PKG_SOURCE_URL:=https://sourceware.org/pub/lvm2
+PKG_HASH:=74e794a9e9dee1bcf8a2065f65b9196c44fdf321e22d63b98ed7de8c9aa17a5d
+PKG_BUILD_DIR:=$(BUILD_DIR)/lvm2-$(BUILD_VARIANT)/$(PKG_NAME).$(PKG_VERSION)
+
+PKG_MAINTAINER:=Daniel Golle <daniel@makrotopia.org>
+PKG_LICENSE:=GPL-2.0 LGPL-2.1
+PKG_LICENSE_FILES:=COPYING COPYING.lib
+PKG_CPE_ID:=cpe:/a:heinz_mauelshagen:lvm2
+
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/libdevmapper/Default
+  SECTION:=libs
+  CATEGORY:=Libraries
+  TITLE:=The Linux Kernel Device Mapper userspace library
+  URL:=https://sourceware.org/dm/
+  VERSION:=$(PKG_VERSION_DM)
+  DEPENDS:=+kmod-dm +libpthread +libuuid +librt +libblkid
+endef
+
+
+define Package/libdevmapper
+  $(call Package/libdevmapper/Default)
+  VARIANT := normal
+endef
+
+define Package/libdevmapper-selinux
+  $(call Package/libdevmapper/Default)
+  VARIANT := selinux
+  DEPENDS += +libselinux
+  PROVIDES := libdevmapper
+endef
+
+define Package/libdevmapper/description
+ The device-mapper is a component of the 2.6 linux kernel that supports logical
+ volume management. It is required by LVM2 and EVMS.
+endef
+
+define Package/libdevmapper-selinux/description
+$(call Package/libdevmapper/description)
+ This variant supports SELinux
+
+endef
+
+define Package/lvm2/default
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Disc
+  TITLE:=The Linux Logical Volume Manager
+  URL:=https://sourceware.org/lvm2/
+  DEPENDS:=+libreadline +libncurses +libaio
+endef
+
+define Package/lvm2
+  $(call Package/lvm2/default)
+  VARIANT := normal
+  DEPENDS += +libdevmapper
+endef
+
+define Package/lvm2-selinux
+  $(call Package/lvm2/default)
+  VARIANT := selinux
+  DEPENDS += +libdevmapper-selinux
+  PROVIDES := lvm2
+endef
+
+define Package/lvm2/description
+ LVM2 refers to a new userspace toolset that provide logical volume management
+ facilities on linux. It is reasonably backwards-compatible with the original
+ LVM toolset.
+endef
+
+define Package/lvm2-selinux/description
+$(call Package/lvm2/description)
+ This variant supports SELinux
+
+endef
+
+
+CONFIGURE_ARGS += \
+       --disable-o_direct \
+       --with-default-pid-dir=/var/run \
+       --with-default-dm-run-dir=/var/run \
+       --with-default-run-dir=/var/run/lvm \
+       --with-default-locking-dir=/var/lock/lvm \
+       --$(if $(findstring selinux,$(BUILD_VARIANT)),en,dis)able-selinux
+
+ifneq ($(shell /bin/sh -c "echo -n 'X'"),X)
+MAKE_SHELL = SHELL=/bin/bash
+endif
+
+define Build/Compile
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               CC="$(TARGET_CC)" \
+               CFLAGS="$(TARGET_CFLAGS) $(TARGET_CPPFLAGS) $(FPIC)" \
+               DESTDIR="$(PKG_INSTALL_DIR)" \
+               $(MAKE_SHELL) \
+               install
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include
+       $(INSTALL_DATA) $(PKG_INSTALL_DIR)/usr/include/libdevmapper.h $(1)/usr/include
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdevmapper.so* $(1)/usr/lib
+       $(INSTALL_DIR) $(1)/usr/lib/pkgconfig
+       $(CP) $(PKG_BUILD_DIR)/libdm/libdevmapper.pc $(1)/usr/lib/pkgconfig
+endef
+
+define Package/libdevmapper/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libdevmapper.so.* $(1)/usr/lib
+endef
+
+Package/libdevmapper-selinux/install = $(Package/libdevmapper/install)
+
+define Package/lvm2/install
+       $(INSTALL_DIR) $(1)/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/lvm $(1)/sbin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/sbin/dmsetup $(1)/sbin
+       $(INSTALL_DIR) $(1)/etc/lvm
+       $(SED) '/^[[:space:]]*\(#\|$$$$\)/d; /cache_dir/s@.*@   cache_dir = "/tmp/lvm/cache"@' $(PKG_INSTALL_DIR)/etc/lvm/lvm.conf
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/lvm/lvm.conf $(1)/etc/lvm/
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/lvm/lvmlocal.conf $(1)/etc/lvm/
+       $(INSTALL_DIR) $(1)/etc/lvm/profile
+       $(INSTALL_CONF) $(PKG_INSTALL_DIR)/etc/lvm/profile/* $(1)/etc/lvm/profile/
+       $(INSTALL_DIR) $(1)/lib/preinit
+       $(INSTALL_DATA) ./files/lvm2.preinit $(1)/lib/preinit/80_lvm2
+       $(INSTALL_DIR) $(1)/etc/init.d
+       $(INSTALL_BIN) ./files/lvm2.init $(1)/etc/init.d/lvm2
+       $(INSTALL_DIR) $(1)/etc/hotplug.d/block
+       $(INSTALL_DATA) ./files/lvm2.hotplug $(1)/etc/hotplug.d/block/20-lvm2
+       $(FIND) $(PKG_INSTALL_DIR)/usr/sbin/ -type l -exec $(CP) -a {} $(1)/sbin/ \;
+endef
+
+Package/lvm2-selinux/install = $(Package/lvm2/install)
+
+define Package/lvm2/conffiles
+/etc/lvm/lvm.conf
+endef
+
+Package/lvm2-selinux/conffiles = $(Package/lvm2/conffiles)
+
+$(eval $(call BuildPackage,libdevmapper))
+$(eval $(call BuildPackage,libdevmapper-selinux))
+$(eval $(call BuildPackage,lvm2))
+$(eval $(call BuildPackage,lvm2-selinux))
diff --git a/package/utils/lvm2/files/lvm2.hotplug b/package/utils/lvm2/files/lvm2.hotplug
new file mode 100644 (file)
index 0000000..0ef48c5
--- /dev/null
@@ -0,0 +1,6 @@
+
+[ "$ACTION" = "add" ] || return 0
+[ -e "/dev/$DEVNAME" ] || return 0
+
+/sbin/lvm vgscan --mknodes --devices /dev/$DEVNAME || :
+/sbin/lvm vgchange -aly --devices /dev/$DEVNAME || :
diff --git a/package/utils/lvm2/files/lvm2.init b/package/utils/lvm2/files/lvm2.init
new file mode 100644 (file)
index 0000000..4faf5d5
--- /dev/null
@@ -0,0 +1,14 @@
+#!/bin/sh /etc/rc.common
+# Copyright (C) 2009 Stefan Monnier
+START=15
+
+start () {
+       mkdir -p /tmp/lvm/cache
+       /sbin/lvm vgscan --ignorelockingfailure --mknodes || :
+       /sbin/lvm vgchange -aly --ignorelockingfailure || return 2
+}
+
+stop () {
+       mkdir -p /tmp/lvm/cache
+       /sbin/lvm vgchange -aln --ignorelockingfailure || return 2
+}
diff --git a/package/utils/lvm2/files/lvm2.preinit b/package/utils/lvm2/files/lvm2.preinit
new file mode 100644 (file)
index 0000000..b654e79
--- /dev/null
@@ -0,0 +1,25 @@
+#!/bin/sh
+# Copyright (C) 2019 Harrie Rooijackers
+
+# The make proecess copies this file to the /lib/preinit/80_lvm2
+# As a result it is executed just before 80_mount_root and makes lvm
+# entities available during the mount_root process that handles any
+# overlays.  This allows overlays to be lvm2 partitions.
+
+# Note that /lib/preinit/80_lvm2 needs to be on the initial "lower"
+# partition for this to work.
+
+do_startlvm() {
+        echo "Starting lvm2 during preinit" > /dev/kmsg
+        # The following 3 lines are copied from from the start function
+        # in /etc/rc.d/S15lvm2 which is copyright by Stefan Monnier
+        mkdir -p /tmp/lvm/cache
+        /sbin/lvm vgscan --ignorelockingfailure --mknodes > /dev/kmsg || :
+        /sbin/lvm vgchange -aly --ignorelockingfailure > /dev/kmsg || return 2
+}
+
+# Perform the function only if lvm2 is enabled by the user
+# Not sure if the test is that useful since it tests the existance
+# of /etc/rc.d/S15lvm2 on the initial "lower" partition only so
+# changes made after the overlay is created are not taken into account
+[ -f /etc/rc.d/S15lvm2 ] && boot_hook_add preinit_main do_startlvm
diff --git a/package/utils/lvm2/patches/002-const-stdio.patch b/package/utils/lvm2/patches/002-const-stdio.patch
new file mode 100644 (file)
index 0000000..9750659
--- /dev/null
@@ -0,0 +1,43 @@
+--- a/lib/commands/toolcontext.c
++++ b/lib/commands/toolcontext.c
+@@ -1709,7 +1709,7 @@ struct cmd_context *create_toolcontext(u
+       /* FIXME Make this configurable? */
+       reset_lvm_errno(1);
+-#ifndef VALGRIND_POOL
++#if defined(__GLIBC__) && !defined(VALGRIND_POOL)
+       /* Set in/out stream buffering before glibc */
+       if (set_buffering
+ #ifdef SYS_gettid
+@@ -2085,7 +2085,7 @@ void destroy_toolcontext(struct cmd_cont
+               dm_hash_destroy(cmd->cft_def_hash);
+       dm_device_list_destroy(&cmd->cache_dm_devs);
+-#ifndef VALGRIND_POOL
++#if defined(__GLIBC__) && !defined(VALGRIND_POOL)
+       if (cmd->linebuffer) {
+               /* Reset stream buffering to defaults */
+               if (is_valid_fd(STDIN_FILENO) &&
+--- a/tools/lvmcmdline.c
++++ b/tools/lvmcmdline.c
+@@ -3437,6 +3437,7 @@ int lvm_split(char *str, int *argc, char
+ /* Make sure we have always valid filedescriptors 0,1,2 */
+ static int _check_standard_fds(void)
+ {
++#ifdef __GLIBC__
+       int err = is_valid_fd(STDERR_FILENO);
+       if (!is_valid_fd(STDIN_FILENO) &&
+@@ -3463,6 +3464,12 @@ static int _check_standard_fds(void)
+                      strerror(errno));
+               return 0;
+       }
++#else
++      if (!is_valid_fd(STDERR_FILENO) ||
++          !is_valid_fd(STDOUT_FILENO) ||
++          !is_valid_fd(STDIN_FILENO))
++              return 0;
++#endif
+       return 1;
+ }
diff --git a/package/utils/lvm2/patches/003-no-mallinfo.patch b/package/utils/lvm2/patches/003-no-mallinfo.patch
new file mode 100644 (file)
index 0000000..6a0e025
--- /dev/null
@@ -0,0 +1,45 @@
+--- a/lib/mm/memlock.c
++++ b/lib/mm/memlock.c
+@@ -199,12 +199,15 @@ static void _allocate_memory(void)
+          *  memory on free(), this is good enough for our purposes.
+          */
+       while (missing > 0) {
++#ifdef __GLIBC__
+               struct MALLINFO inf = MALLINFO();
+               hblks = inf.hblks;
++#endif
+               if ((areas[area] = malloc(_size_malloc_tmp)))
+                       _touch_memory(areas[area], _size_malloc_tmp);
++#ifdef __GLIBC__
+               inf = MALLINFO();
+               if (hblks < inf.hblks) {
+@@ -214,9 +217,12 @@ static void _allocate_memory(void)
+                       free(areas[area]);
+                       _size_malloc_tmp /= 2;
+               } else {
++#endif
+                       ++ area;
+                       missing -= _size_malloc_tmp;
++#ifdef __GLIBC__
+               }
++#endif
+               if (area == max_areas && missing > 0) {
+                       /* Too bad. Warn the user and proceed, as things are
+@@ -537,8 +543,13 @@ static void _lock_mem(struct cmd_context
+        * will not block memory locked thread
+        * Note: assuming _memlock_count_daemon is updated before _memlock_count
+        */
++#ifdef __GLIBC__
+       _use_mlockall = _memlock_count_daemon ? 1 :
+               find_config_tree_bool(cmd, activation_use_mlockall_CFG, NULL);
++#else
++      /* always use mlockall on musl */
++      _use_mlockall = 1;
++#endif
+       if (!_use_mlockall) {
+               if (!*_procselfmaps &&
diff --git a/package/utils/mksh/Makefile b/package/utils/mksh/Makefile
new file mode 100644 (file)
index 0000000..e68f63b
--- /dev/null
@@ -0,0 +1,91 @@
+#
+# Copyright (C) 2007-2011 OpenWrt.org
+# Copyright (c) 2009-2014 Thorsten Glaser <tg@mirbsd.org>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=mksh
+PKG_VERSION:=59c
+PKG_RELEASE:=3
+
+PKG_MAINTAINER:=Thorsten Glaser <tg@mirbsd.org>
+PKG_LICENSE:=MirOS
+
+PKG_SOURCE:=$(PKG_NAME)-R$(PKG_VERSION).tgz
+PKG_SOURCE_URL:=http://www.mirbsd.org/MirOS/dist/mir/mksh \
+               http://pub.allbsd.org/MirOS/dist/mir/mksh
+PKG_HASH:=77ae1665a337f1c48c61d6b961db3e52119b38e58884d1c89684af31f87bc506
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/mksh
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Shells
+  TITLE:=MirBSD Korn Shell
+  DEPENDS:=$(DEP)
+  URL:=http://mirbsd.de/mksh
+endef
+
+define Package/mksh/description
+mksh is the MirBSD enhanced version of the Public Domain Korn
+shell (pdksh), a Bourne-compatible shell which is largely si-
+milar to the original AT&T Korn shell; mksh is the only pdksh
+derivate currently being actively developed.  It includes bug
+fixes and feature improvements, in order to produce a modern,
+robust shell good for interactive and especially script use.
+mksh has UTF-8 support (in substring operations and the Emacs
+editing mode) and - while R59 corresponds to OpenBSD 5.7-cur-
+rent ksh (without GNU bash-like PS1 and fancy character clas-
+ses) - adheres to SUSv4 and is much more robust. The code has
+been cleaned up and simplified, bugs fixed, standards compli-
+ance added, and several enhancements (for extended compatibi-
+lity to other modern shells - as well as a couple of its own)
+are available. It has sensible defaults as usual with BSD.
+endef
+
+define Build/Compile
+       # -DMKSH_SMALL=1 ⇒ reduce functionality quite a lot
+       # -DMKSH_ASSUME_UTF8=0 ⇒ never automatically enable
+       #       UTF-8 mode, neither use setlocale/nl_langinfo
+       #       nor look at $LC_* and $LANG (not recommended)
+       # -DMKSH_BINSHPOSIX ⇒ enable POSIX mode if called as sh
+       #XXX maybe change to -DMKSH_ASSUME_UTF8=1 now (which
+       #XXX is always assume UTF-8 mode)
+       # HAVE_CAN_FSTACKPROTECTORALL=0 ⇒ nuke libssp dependency
+       # HAVE_CAN_FSTACKPROTECTORSTRONG=0 ⇒ same, for gcc 4.9+
+       cd $(PKG_BUILD_DIR); \
+               CC="$(TARGET_CC)" \
+               TARGET_OS="$(shell uname -s)" \
+               CFLAGS="$(TARGET_CFLAGS)" \
+               CPPFLAGS="$(TARGET_CPPFLAGS) -DMKSH_SMALL=1 -DMKSH_ASSUME_UTF8=0 -DMKSH_BINSHPOSIX -DMKSHRC_PATH=\\\"/etc/mkshrc\\\"" \
+               HAVE_CAN_FSTACKPROTECTORALL=0 \
+               HAVE_CAN_FSTACKPROTECTORSTRONG=0 \
+               LDFLAGS="$(TARGET_LDFLAGS)" \
+                       $(BASH) Build.sh -Q -r
+endef
+
+define Package/mksh/postinst
+#!/bin/sh
+grep mksh $${IPKG_INSTROOT}/etc/shells || \
+       echo "/bin/mksh" >> $${IPKG_INSTROOT}/etc/shells
+endef
+
+define Package/mksh/install
+       $(INSTALL_DIR) $(1)/etc
+       $(INSTALL_DATA) $(PKG_BUILD_DIR)/dot.mkshrc $(1)/etc/mkshrc
+       $(INSTALL_DIR) $(1)/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/mksh $(1)/bin/
+endef
+
+define Package/mksh/conffiles
+/etc/mkshrc
+endef
+
+$(eval $(call BuildPackage,mksh))
diff --git a/package/utils/mksh/patches/100-dot_mkshrc b/package/utils/mksh/patches/100-dot_mkshrc
new file mode 100644 (file)
index 0000000..1debb44
--- /dev/null
@@ -0,0 +1,47 @@
+From 23712cea8e2a623fd952eb781df0011c501703d0 Mon Sep 17 00:00:00 2001
+From: Thorsten Glaser <tg@mirbsd.org>
+Date: Thu, 25 Jul 2013 22:07:33 +0200
+Subject: [PATCH] Make default mkshrc file suitable for OpenWrt environment:
+
+* Part of the FreeWRT patches:
+  - no hostname(1)
+  - ls(1) has no -o option
+* OpenWrt and FreeWRT-1.0 fix:
+  - since this is not ~/.mkshrc make sure subshells find it
+
+From: Alif M. A. <alive4ever@live.com>
+Date: Thu, 20 Jul 2017 14:52:39 +0000
+Subject: [PATCH] Refresh 100-dot_mkshrc for mksh-R55
+
+Additional changes of the patch as of mksh-R55
+* Use content of `/proc/sys/kernel/hostname` to set `$HOSTNAME`, since
+  `hostname` applet isn't compiled into `busybox`.
+* Use `/bin/vi` as fallback `$EDITOR`.
+* Use `/etc/mkshrc` as default startup file, so there is no need to
+  manually source it during interactive session.
+
+From: Alif M. A. <alive4ever@live.com>
+Date: Thu, 11 Jan 2018 02:13:46 +0000
+Subject: [PATCH] Refresh 100-dot_mkshrc for mksh-R55
+
+Refreshed 100-dot_mkshrc for mksh-r56b
+
+---
+Reviewed-by: Thorsten Glaser <tg at mirbsd.org>
+Signed-off-by: Alif M. A. <alive4ever at live.com>
+
+--- a/dot.mkshrc
++++ b/dot.mkshrc
+@@ -64,9 +64,9 @@ for EDITOR in "${EDITOR:-}" jupp jstar m
+       EDITOR=
+ done
+-\\builtin alias ls=ls l='ls -F' la='l -a' ll='l -l' lo='l -alo'
+-\: "${EDITOR:=/bin/ed}${TERM:=vt100}${USER:=$(\\builtin ulimit -c 0; id -un \
+-    2>/dev/null)}${HOSTNAME:=$(\\builtin ulimit -c 0; hostname 2>/dev/null)}"
++\\builtin alias ls=ls l='ls -F' la='l -a' ll='l -l' lo='l -al'
++\: "${EDITOR:=/bin/vi}${TERM:=vt100}${USER:=$(\\builtin ulimit -c 0; id -un \
++    2>/dev/null)}${HOSTNAME:=$(</proc/sys/kernel/hostname)}"
+ [[ $HOSTNAME = ?(?(ip6-)localhost?(6)) ]] && HOSTNAME=nil; \\builtin unalias ls
+ \\builtin export EDITOR HOSTNAME TERM USER="${USER:-?}"
index e68b289501af04534dfbc5e4d3fdb74d4df9c2b4..e54a722425c8fc4cce740bb6e44abfa0feef112c 100644 (file)
@@ -8,12 +8,12 @@
 include $(TOPDIR)/rules.mk
 
 PKG_NAME:=nano
-PKG_VERSION:=7.2
-PKG_RELEASE:=2
+PKG_VERSION:=8.0
+PKG_RELEASE:=1
 
 PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
 PKG_SOURCE_URL:=@GNU/nano
-PKG_HASH:=86f3442768bd2873cec693f83cdf80b4b444ad3cc14760b74361474fc87a4526
+PKG_HASH:=c17f43fc0e37336b33ee50a209c701d5beb808adc2d9f089ca831b40539c9ac4
 
 PKG_LICENSE:=GPL-3.0-or-later
 PKG_LICENSE_FILES:=COPYING
@@ -140,6 +140,7 @@ define Package/nano-full/install
        $(INSTALL_DIR) $(1)/etc $(1)/usr/share/nano
        $(INSTALL_DATA) ./files/nanorc $(1)/etc/nanorc
        $(INSTALL_DATA) ./files/uci.nanorc $(1)/usr/share/nano
+       $(INSTALL_DATA) ./files/ucode.nanorc $(1)/usr/share/nano
        $(CP) $(PKG_INSTALL_DIR)/usr/share/nano/* $(1)/usr/share/nano
 endef
 
diff --git a/package/utils/nano/files/ucode.nanorc b/package/utils/nano/files/ucode.nanorc
new file mode 100644 (file)
index 0000000..647f21d
--- /dev/null
@@ -0,0 +1,51 @@
+## Syntax highlighting for OpenWrt ucode scripts.
+
+syntax ucode "/ucode/|\.u[ct]$"
+header "^#!.*\<ucode\>"
+comment "//"
+
+# Declarations
+color green "\<(let|const|function|this)\>"
+
+# Arrow functions
+color green "(\<\w+\>|\([[:alnum:][:space:]_,.]*\))[[:space:]]*=>"
+
+# Flow control and keywords
+color brightyellow "\<(while|if|else|elif|switch|case|default|for|in|endif|endfor|endwhile|endfunction)\>"
+color brightyellow "\<(export|import|try|catch|delete)\>"
+
+# Exit points
+color magenta "\<(break|continue|return)\>"
+
+# Numeric literals
+color cyan "\<([0-9]+\.[0-9]+([eE][+-]?[0-9]+)?|[0-9]+[eE][+-]?[0-9]+)\>"
+color cyan "\<0[xX][[:xdigit:]]+(\.[[:xdigit:]]+)?\>"
+color cyan "\<(0[oO][0-7]+|0[bB][01]+|[0-9]+)\>"
+
+# Special values
+color cyan "\<(true|false|null|NaN|Infinity)\>"
+
+# Strings
+color brightmagenta ""([^"\{%#}]|\\.|\{[^"\{%#]|[%#}][^"\}]|[{%#}]\\.)*[{%#}]?""
+color brightmagenta "'([^'\{%#}]|\\.|\{[^'\{%#]|[%#}][^'\}]|[{%#}]\\.)*[{%#}]?'"
+color brightmagenta "`([^`\{%#}]|\\.|\{[^`\{%#]|[%#}][^`\}]|[{%#}]\\.)*[{%#}]?`"
+
+# Template string expressions
+color normal start="\$\{" end="}"
+
+# Comments
+color brightblue "(^|[[:blank:]])//.*"
+color brightblue start="(^|[[:space:]])/\*" end="\*/"
+color brightblue start="\{#" end="#\}"
+
+# Trailing whitespace.
+color ,green "[[:space:]]+$"
+
+# Text outside template directives
+color slate start="[}%#]\}" end="\{[{%#]"
+color slate start="^#!.*(\<utpl\>|[[:space:]]-[[:alnum:]]*T[[:alnum:]]*\>)" end="\{[{%#]"
+color slate "^([^{%#}]|\{[^{%#]|[%#}][^}])+\{[{%#]"
+
+# Template tags
+color white "\{[{%][+-]?|-?[%}]\}"
+color brightblue "\{#[+-]?|-?#\}"
diff --git a/package/utils/nano/patches/0001-post80-fix-minibar-do-not-falsely-report.patch b/package/utils/nano/patches/0001-post80-fix-minibar-do-not-falsely-report.patch
new file mode 100644 (file)
index 0000000..d85720d
--- /dev/null
@@ -0,0 +1,27 @@
+From e9c7dfa99221935ffa38b5b9dbf294933e0aa7c0 Mon Sep 17 00:00:00 2001
+From: Benno Schulenberg <bensberg@telfort.nl>
+Date: Fri, 3 May 2024 12:12:09 +0200
+Subject: minibar: do not falsely report that a new, empty file is in Mac
+ format
+
+The 'openfile->fmt' element gets initialized to 'UNSPECIFIED',
+so the code has to take that possibility into account.
+
+This fixes https://savannah.gnu.org/bugs/?65676.
+
+Bug existed since version 8.0, commit fe4f74f6.
+---
+ src/winio.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/src/winio.c
++++ b/src/winio.c
+@@ -2213,7 +2213,7 @@ void minibar(void)
+               size_t count = openfile->filebot->lineno - (openfile->filebot->data[0] == '\0');
+               number_of_lines = nmalloc(49);
+-              if (openfile->fmt == NIX_FILE)
++              if (openfile->fmt == NIX_FILE || openfile->fmt == UNSPECIFIED)
+                       sprintf(number_of_lines, P_(" (%zu line)", " (%zu lines)", count), count);
+               else
+                       sprintf(number_of_lines, P_(" (%zu line, %s)", " (%zu lines, %s)", count),
diff --git a/package/utils/procps-ng/Makefile b/package/utils/procps-ng/Makefile
new file mode 100644 (file)
index 0000000..23bfe64
--- /dev/null
@@ -0,0 +1,115 @@
+#
+# Copyright (C) 2006-2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=procps-ng
+PKG_VERSION:=3.3.16
+PKG_RELEASE:=3
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@SF/procps-ng
+PKG_HASH:=925eacd65dedcf9c98eb94e8978bbfb63f5de37294cc1047d81462ed477a20af
+
+PKG_MAINTAINER:=
+PKG_LICENSE:=GPL-2.0-or-later
+PKG_LICENSE_FILES:=COPYING COPYING.LIB
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+CONFIGURE_ARGS += --enable-skill
+
+# most of these have alternatives provided by busybox applets
+PROCPS_APPLETS := \
+    free kill pgrep pkill pmap ps pwdx skill slabtop \
+    snice sysctl tload top uptime vmstat w watch
+
+# procps-ng will be configured with "--bindir=/usr/bin --sbindir=/usr/sbin" and
+# as such executables will be installed there by default, but some of them need
+# to reside in locations such as /bin and /sbin to be in accordance with
+# busybox alternatives which is also other distributions like debian and centos
+# are doing
+PROCPS_APPLETS_SRC_DIR_SBIN:=sysctl
+procps-applets-src-dir=$(if $(filter $(PROCPS_APPLETS_SRC_DIR_SBIN),$(1)),/usr/sbin,/usr/bin)
+
+PROCPS_APPLETS_DIR_BIN:=kill ps watch
+PROCPS_APPLETS_DIR_SBIN:=sysctl
+procps-applets-dir=$(if $(filter $(PROCPS_APPLETS_DIR_BIN),$(1)),/bin,$(if $(filter $(PROCPS_APPLETS_DIR_SBIN),$(1)),/sbin,/usr/bin))
+
+define Package/procps-ng/Default
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=+libncurses
+  TITLE:=procps-ng utilities
+  URL:=https://gitlab.com/procps-ng/procps
+endef
+
+define Build/Prepare
+       $(call Build/Prepare/Default)
+       echo "$(PKG_VERSION)" > "$(PKG_BUILD_DIR)/.tarball-version"
+endef
+
+define Package/procps-ng
+  $(call Package/procps-ng/Default)
+  MENU:=1
+endef
+
+define Package/procps-ng/description
+  procps is a set of command line and full-screen utilities that provide information out of the pseudo-filesystem
+  most commonly located at /proc. This filesystem provides a simple interface to the kernel data structures.
+  The programs of procps generally concentrate on the structures that describe the processess running on the system.
+
+  NOTE: some utilities provided by procps-ng packages (ps, uptime, kill, ...) are installed as busybox applets, by default.
+  Conflicting applets should be removed from the build to avoid file conflicts.
+endef
+
+define GenPlugin
+ define Package/procps-ng-$(1)
+   $(call Package/procps-ng/Default)
+   DEPENDS:=procps-ng
+   TITLE:=Applet $(1) from the procps-ng package
+   ALTERNATIVES:=200:$(2)/$(1):/usr/libexec/$(1)-procps-ng
+ endef
+
+ define Package/procps-ng-$(1)/description
+  Installs the applet $(1).
+ endef
+endef
+
+$(foreach a,$(PROCPS_APPLETS),$(eval $(call GenPlugin,$(a),$(call procps-applets-dir,$(a)))))
+
+MAKE_FLAGS += \
+       CFLAGS="$(TARGET_CFLAGS)" \
+       CPPFLAGS="$(TARGET_CPPFLAGS)" \
+       LDFLAGS="$(TARGET_LDFLAGS)" \
+
+define Package/procps-ng/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/libprocps.so* $(1)/usr/lib/
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/include $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/* $(1)/usr/include/
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/* $(1)/usr/lib/
+endef
+
+define BuildPlugin
+  define Package/procps-ng-$(1)/install
+       $(INSTALL_DIR) $$(1)/usr/libexec
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)$(2)/$(1) $$(1)/usr/libexec/$(1)-procps-ng
+  endef
+
+  $$(eval $$(call BuildPackage,procps-ng-$(1)))
+endef
+
+$(foreach a,$(PROCPS_APPLETS),$(eval $(call BuildPlugin,$(a),$(call procps-applets-src-dir,$(a)))))
+$(eval $(call BuildPackage,procps-ng))
diff --git a/package/utils/procps-ng/patches/100-no-tests-docs.patch b/package/utils/procps-ng/patches/100-no-tests-docs.patch
new file mode 100644 (file)
index 0000000..b863fba
--- /dev/null
@@ -0,0 +1,26 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -14,10 +14,7 @@ PACKAGE_VERSION = @PACKAGE_VERSION@
+ ACLOCAL_AMFLAGS = -I m4
+ SUBDIRS = \
+-      include \
+-      man-po \
+-      po \
+-      testsuite
++      include
+ AM_CFLAGS = -Iproc
+ LDADD = ./proc/libprocps.la $(CYGWINFLAGS)
+--- a/configure.ac
++++ b/configure.ac
+@@ -298,8 +298,5 @@ AC_CHECK_FUNCS([__fpending alarm atexit
+ AC_CONFIG_FILES([Makefile
+                  include/Makefile
+-                 man-po/Makefile
+-                 po/Makefile.in
+-                 proc/libprocps.pc
+-                 testsuite/Makefile])
++                 proc/libprocps.pc])
+ AC_OUTPUT
diff --git a/package/utils/rrdtool1/Makefile b/package/utils/rrdtool1/Makefile
new file mode 100644 (file)
index 0000000..f1da0ac
--- /dev/null
@@ -0,0 +1,132 @@
+#
+# Copyright (C) 2006-2014 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=rrdtool1
+PKG_VERSION:=1.0.50
+PKG_RELEASE:=5
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/rrdtool-$(PKG_VERSION)
+PKG_SOURCE:=rrdtool-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=http://oss.oetiker.ch/rrdtool/pub/archive/rrdtool-1.0.x
+PKG_HASH:=42aa7c213dedbd95d33ca84d92f4187880f7e96062c6a3fb05bfb16f77ba2a91
+PKG_MAINTAINER:=Jo-Philipp Wich <jo@mein.io>
+
+PKG_FIXUP:=autoreconf
+PKG_CHECK_FORMAT_SECURITY:=0
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/rrdtool1/Default
+  TITLE:=Round Robin Database (RRD)
+  URL:=http://oss.oetiker.ch/rrdtool/
+endef
+
+define Package/rrdtool1/description/Default
+ RRD is the Acronym for Round Robin Database. RRD is a system to store and
+ display time-series data (i.e. network bandwidth, machine-room temperature,
+ server load average). It stores the data in a very compact way that will
+ not expand over time, and it presents useful graphs by processing the data
+ to enforce a certain data density. It can be used either via simple wrapper
+ scripts (from shell or Perl) or via frontends that poll network devices and
+ put friendly user interface on it.
+
+ This is version 1.0.x with cgilib-0.4, gd1.3 and libpng-1.0.9 linked into
+ librrd.so. The library is much smaller compared to the 1.2.x version with
+ separate dynamic linked libraries.
+endef
+
+define Package/librrd1
+$(call Package/rrdtool1/Default)
+  SECTION:=libs
+  CATEGORY:=Libraries
+  DEPENDS:=+zlib
+  TITLE+= management library
+endef
+
+define Package/librrd1/description
+$(call Package/rrdtool1/description/Default)
+ This package contains a shared library, used by other programs.
+endef
+
+define Package/rrdcgi1
+$(call Package/rrdtool1/Default)
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Database
+  DEPENDS:=+librrd1
+  TITLE+= CGI graphing tool
+endef
+
+define Package/rrdcgi1/description
+$(call Package/rrdtool1/description/Default)
+ This package contains the rrdcgi tool used to create web pages containing
+ RRD graphs based on templates.
+endef
+
+define Package/rrdtool1
+$(call Package/rrdtool1/Default)
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Database
+  DEPENDS:=+librrd1
+  TITLE+= management tools
+endef
+
+define Package/rrdtool1/description
+$(call Package/rrdtool1/description/Default)
+ This package contains command line tools used to manage RRDs.
+endef
+
+TARGET_CFLAGS += $(FPIC) --std=c99
+
+CONFIGURE_ARGS += \
+       $(DISABLE_NLS) \
+       --enable-shared=yes \
+       --enable-static=yes \
+       --disable-rpath \
+       --with-gnu-ld \
+       --enable-local-zlib
+
+CONFIGURE_VARS += \
+       ac_cv_path_PERL=no \
+       rd_cv_ieee_works=yes \
+       shrext_cmds=".so"
+
+define Build/Compile
+       $(MAKE) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" \
+               shrext_cmds=".so" \
+               all install
+endef
+
+define Package/rrdtool1/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/rrd{tool,update} $(1)/usr/bin/
+endef
+
+define Package/rrdcgi1/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(CP) $(PKG_INSTALL_DIR)/usr/bin/rrdcgi $(1)/usr/bin/
+endef
+
+define Package/librrd1/install
+       $(INSTALL_DIR) $(1)/usr/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/librrd.so.* $(1)/usr/lib/
+endef
+
+define Build/InstallDev
+       $(INSTALL_DIR) $(1)/usr/lib/rrdtool-1.0/include
+       $(CP) $(PKG_INSTALL_DIR)/usr/include/rrd.h $(1)/usr/lib/rrdtool-1.0/include/
+       $(INSTALL_DIR)  $(1)/usr/lib/rrdtool-1.0/lib
+       $(CP) $(PKG_INSTALL_DIR)/usr/lib/librrd.{a,so*} $(1)/usr/lib/rrdtool-1.0/lib/
+endef
+
+$(eval $(call BuildPackage,librrd1))
+$(eval $(call BuildPackage,rrdcgi1))
+$(eval $(call BuildPackage,rrdtool1))
diff --git a/package/utils/rrdtool1/patches/001-no_ordering_cd_joke.patch b/package/utils/rrdtool1/patches/001-no_ordering_cd_joke.patch
new file mode 100644 (file)
index 0000000..073c310
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/configure
++++ b/configure
+@@ -24873,17 +24873,12 @@ echo "$as_me:$LINENO: result: and out ag
+ echo "${ECHO_T}and out again" >&6
+ echo $ECHO_N "ordering CD from http://people.ee.ethz.ch/~oetiker/wish $ac_c" 1>&6
+-sleep 1
+ echo $ECHO_N ".$ac_c" 1>&6
+-sleep 2
+ echo $ECHO_N ".$ac_c" 1>&6
+-sleep 1
+ echo $ECHO_N ".$ac_c" 1>&6
+-sleep 3
+ echo $ECHO_N ".$ac_c" 1>&6
+ echo $ECHO_N ".$ac_c" 1>&6
+ echo $ECHO_N ".$ac_c" 1>&6
+-sleep 2
+ echo "$as_me:$LINENO: result:  just kidding ;-)" >&5
+ echo "${ECHO_T} just kidding ;-)" >&6
+ echo
diff --git a/package/utils/rrdtool1/patches/002-no_timezone.patch b/package/utils/rrdtool1/patches/002-no_timezone.patch
new file mode 100644 (file)
index 0000000..67bc9b1
--- /dev/null
@@ -0,0 +1,24 @@
+--- a/src/rrd_tool.c
++++ b/src/rrd_tool.c
+@@ -225,11 +225,8 @@ int main(int argc, char *argv[])
+         struct rusage  myusage;
+         struct timeval starttime;
+         struct timeval currenttime;
+-        struct timezone tz;
+-          tz.tz_minuteswest =0;
+-          tz.tz_dsttime=0;
+-          gettimeofday(&starttime,&tz);
++          gettimeofday(&starttime,NULL);
+ #endif
+           while (fgets(aLine, sizeof(aLine)-1, stdin)){
+@@ -252,7 +249,7 @@ int main(int argc, char *argv[])
+ #if HAVE_GETRUSAGE
+               getrusage(RUSAGE_SELF,&myusage);
+-              gettimeofday(&currenttime,&tz);
++              gettimeofday(&currenttime,NULL);
+               printf("OK u:%1.2f s:%1.2f r:%1.2f\n",
+                      (double)myusage.ru_utime.tv_sec+
+                      (double)myusage.ru_utime.tv_usec/1000000.0,
diff --git a/package/utils/rrdtool1/patches/020-x86-float-cast.patch b/package/utils/rrdtool1/patches/020-x86-float-cast.patch
new file mode 100644 (file)
index 0000000..1de2234
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/src/rrd_format.h
++++ b/src/rrd_format.h
+@@ -20,7 +20,7 @@
+ #define RRD_COOKIE    "RRD"
+ #define RRD_VERSION   "0001"
+-#define FLOAT_COOKIE  8.642135E130
++#define FLOAT_COOKIE  ((double)8.642135E130)
+ #if defined(WIN32)
+ #define DNAN          ((double)fmod(0.0,0.0))    
diff --git a/package/utils/rrdtool1/patches/030-pod2man-stderr.patch b/package/utils/rrdtool1/patches/030-pod2man-stderr.patch
new file mode 100644 (file)
index 0000000..38deac7
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/doc/Makefile.am
++++ b/doc/Makefile.am
+@@ -35,7 +35,7 @@ iman_DATA = $(MAN)
+ all-local: link txt man html
+ .pod.1 .pm.1 .pl.1:
+-      pod2man --release=$(VERSION) --center=RRDtool $<  > $@
++      pod2man --stderr --release=$(VERSION) --center=RRDtool $<  > $@
+ .1.txt:
+       @NROFF@ -man -Tlp $< > $@ || echo @NROFF@ failed > $@
diff --git a/package/utils/rrdtool1/patches/040-no-e-notation-on-log-display.patch b/package/utils/rrdtool1/patches/040-no-e-notation-on-log-display.patch
new file mode 100644 (file)
index 0000000..4555167
--- /dev/null
@@ -0,0 +1,27 @@
+--- a/src/rrd_graph.c
++++ b/src/rrd_graph.c
+@@ -2049,7 +2049,7 @@ horizontal_log_grid(gdImagePtr gif, imag
+     char     graph_label[100];
+     gdPoint  polyPoints[4];
+     int      styleMinor[2],styleMajor[2];
+-    double   value, pixperstep, minstep;
++    double   value, pixperstep, minstep, yval;
+     /* find grid spaceing */
+     pixpex= (double)im->ysize / (log10(im->maxval) - log10(im->minval));
+@@ -2118,7 +2118,14 @@ horizontal_log_grid(gdImagePtr gif, imag
+           
+           gdImageLine(gif, polyPoints[0].x,polyPoints[0].y,
+                       polyPoints[1].x,polyPoints[0].y,gdStyled);
+-          sprintf(graph_label,"%3.0e",value * yloglab[majoridx][i]);
++          yval = value * yloglab[majoridx][i];
++          if (yval >= 100000) {
++                  sprintf(graph_label,"%3.0e", yval);
++          } else {
++                  if (yval == 1) /* prints as 1e+00 */
++                      yval = 0;
++                  sprintf(graph_label,"%5.0f", yval);
++          }
+           gdImageString(gif, SmallFont,
+                         (polyPoints[0].x - (strlen(graph_label) * 
+                                             SmallFont->w)-7), 
diff --git a/package/utils/rrdtool1/patches/050-no-doc.patch b/package/utils/rrdtool1/patches/050-no-doc.patch
new file mode 100644 (file)
index 0000000..5d450ac
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/Makefile.am
++++ b/Makefile.am
+@@ -17,7 +17,7 @@ endif
+ # build the following subdirectories
+ SUBDIRS = cgilib-0.4 gd1.3 $(SUBDIRS_1) $(SUBDIRS_2) \
+-          src doc examples contrib tcl
++          src examples contrib tcl
+ # the following files are not mentioned in any other Makefile
+ # LWT 24Jul03 - removed redundant spec file listed
diff --git a/package/utils/rrdtool1/patches/100-new-long-rrd.patch b/package/utils/rrdtool1/patches/100-new-long-rrd.patch
new file mode 100644 (file)
index 0000000..35b4136
--- /dev/null
@@ -0,0 +1,630 @@
+--- a/src/parsetime.c
++++ b/src/parsetime.c
+@@ -715,7 +715,7 @@ day(struct rrd_time_value *ptv)
+           tlen = strlen(sc_token);
+           mon = atol(sc_token);
+             if (mon > 10*365*24*60*60) {
+-                montime = mon;
++                montime = (time_t) mon;
+                 ptv->tm=*localtime(&montime);
+               token();
+               break;
+@@ -914,8 +914,11 @@ parsetime(char *tspec, struct rrd_time_v
+ int proc_start_end (struct rrd_time_value *start_tv, 
+                   struct rrd_time_value *end_tv, 
+-                  time_t *start, 
+-                  time_t *end){
++                  TIME_INT *start,
++                  TIME_INT *end){
++
++    time_t end_t, start_t;
++
+     if (start_tv->type == RELATIVE_TO_END_TIME  && /* same as the line above */
+       end_tv->type == RELATIVE_TO_START_TIME) {
+       rrd_set_error("the start and end times cannot be specified "
+@@ -935,25 +938,27 @@ int proc_start_end (struct rrd_time_valu
+     if( start_tv->type == RELATIVE_TO_END_TIME) {
+       struct tm tmtmp;
+-      *end = mktime(&(end_tv->tm)) + end_tv->offset;    
+-      tmtmp = *localtime(end); /* reinit end including offset */
++      end_t = mktime(&(end_tv->tm)) + end_tv->offset;
++      *end = (TIME_INT) end_t;
++      tmtmp = *localtime(&end_t); /* reinit end including offset */
+       tmtmp.tm_mday += start_tv->tm.tm_mday;
+       tmtmp.tm_mon += start_tv->tm.tm_mon;
+       tmtmp.tm_year += start_tv->tm.tm_year;  
+-      *start = mktime(&tmtmp) + start_tv->offset;
++      *start = (TIME_INT) mktime(&tmtmp) + start_tv->offset;
+     } else {
+-      *start = mktime(&(start_tv->tm)) + start_tv->offset;
++      *start = (TIME_INT) mktime(&(start_tv->tm)) + start_tv->offset;
+     }
+     if (end_tv->type == RELATIVE_TO_START_TIME) {
+       struct tm tmtmp;
+-      *start = mktime(&(start_tv->tm)) + start_tv->offset;
+-      tmtmp = *localtime(start);
++      start_t = mktime(&(start_tv->tm)) + start_tv->offset;
++      *start = (TIME_INT) start_t;
++      tmtmp = *localtime(&start_t);
+       tmtmp.tm_mday += end_tv->tm.tm_mday;
+       tmtmp.tm_mon += end_tv->tm.tm_mon;
+       tmtmp.tm_year += end_tv->tm.tm_year;    
+-      *end = mktime(&tmtmp) + end_tv->offset;
++      *end = (TIME_INT) mktime(&tmtmp) + end_tv->offset;
+     } else {
+-      *end = mktime(&(end_tv->tm)) + end_tv->offset;
++      *end = (TIME_INT) mktime(&(end_tv->tm)) + end_tv->offset;
+     }    
+     return 0;
+ } /* proc_start_end */
+--- a/src/rrd_cgi.c
++++ b/src/rrd_cgi.c
+@@ -352,7 +352,7 @@ int main(int argc, char *argv[]) {
+                       time_t now;
+                       now = time(NULL);
+                       printf("Last-Modified: %s\n", http_time(&now));
+-                      now += labs(goodfor);
++                      now += (time_t) labs(goodfor);
+                       printf("Expires: %s\n", http_time(&now));
+                       if (goodfor < 0) {
+                               printf("Refresh: %ld\n", labs(goodfor));
+@@ -491,6 +491,7 @@ char* printstrftime(long argc, char **ar
+       char    formatted[MAX_STRFTIME_SIZE];
+       struct tm *the_tm;
+       time_t  start_tmp, end_tmp;
++      TIME_INT start_tmp_t, end_tmp_t;
+       /* Make sure that we were given the right number of args */
+       if( argc != 4) {
+@@ -511,15 +512,17 @@ char* printstrftime(long argc, char **ar
+               rrd_set_error( "end time: %s", parsetime_error);
+               return (char *) -1;
+       }
+-      if( proc_start_end( &start_tv, &end_tv, &start_tmp, &end_tmp) == -1) {
++      if( proc_start_end( &start_tv, &end_tv, &start_tmp_t, &end_tmp_t) == -1) {
+               return (char *) -1;
+       }
+       /* Do we do the start or end */
+       if( strcasecmp( args[0], "START") == 0) {
++              start_tmp = (time_t) start_tmp_t;
+               the_tm = localtime( &start_tmp);
+       }
+       else if( strcasecmp( args[0], "END") == 0) {
++              end_tmp = (time_t) end_tmp_t;
+               the_tm = localtime( &end_tmp);
+       }
+       else {
+@@ -726,7 +729,7 @@ char* printtimelast(long argc, char **ar
+     if (buf == NULL){ 
+       return stralloc("[ERROR: allocating strftime buffer]");
+     };
+-    last = rrd_last(argc+1, args-1); 
++    last = (time_t) rrd_last(argc+1, args-1);
+     if (rrd_test_error()) {
+       char *err = malloc((strlen(rrd_get_error())+DS_NAM_SIZE)*sizeof(char));
+       sprintf(err, "[ERROR: %s]",rrd_get_error());
+--- a/src/rrd_create.c
++++ b/src/rrd_create.c
+@@ -12,12 +12,12 @@ rrd_create(int argc, char **argv)
+ {
+     rrd_t          rrd;
+     long                i,long_tmp;
+-    time_t             last_up;
++    TIME_INT             last_up;
+     struct rrd_time_value last_up_tv;
+     char *parsetime_error = NULL;
+     /* init last_up */
+-    last_up = time(NULL)-10;
++    last_up = (TIME_INT) time(NULL)-10;
+     /* init rrd clean */
+     rrd_init(&rrd);
+     /* static header */
+@@ -74,7 +74,7 @@ rrd_create(int argc, char **argv)
+               return(-1);
+           }
+-          last_up = mktime(&last_up_tv.tm) + last_up_tv.offset;
++          last_up = (TIME_INT) mktime(&last_up_tv.tm) + last_up_tv.offset;
+           
+           if (last_up < 3600*24*365*10){
+               rrd_set_error("the first entry to the RRD should be after 1980");
+--- a/src/rrd_dump.c
++++ b/src/rrd_dump.c
+@@ -24,6 +24,7 @@ rrd_dump(int argc, char **argv)
+     long         rra_base, rra_start, rra_next;
+     FILE                  *in_file;
+     rrd_t             rrd;
++    time_t       lastup_t;
+     if(rrd_open(argv[1],&in_file,&rrd, RRD_READONLY)==-1){
+@@ -34,8 +35,9 @@ rrd_dump(int argc, char **argv)
+     printf("\t<version> %s </version>\n",rrd.stat_head->version);
+     printf("\t<step> %lu </step> <!-- Seconds -->\n",rrd.stat_head->pdp_step);
+ #if HAVE_STRFTIME
++    lastup_t = (time_t) rrd.live_head->last_up;
+     strftime(somestring,200,"%Y-%m-%d %H:%M:%S %Z",
+-           localtime(&rrd.live_head->last_up));
++           localtime(&lastup_t));
+ #else
+ # error "Need strftime"
+ #endif
+@@ -115,10 +117,10 @@ rrd_dump(int argc, char **argv)
+               fseek(in_file,rra_start,SEEK_SET);
+               ii=0; /* wrap if max row cnt is reached */
+           }
+-          now = (rrd.live_head->last_up 
++          now = (time_t) ((rrd.live_head->last_up
+                  - rrd.live_head->last_up 
+                  % (rrd.rra_def[i].pdp_cnt*rrd.stat_head->pdp_step)) 
+-              + (timer*rrd.rra_def[i].pdp_cnt*rrd.stat_head->pdp_step);
++              + (timer*rrd.rra_def[i].pdp_cnt*rrd.stat_head->pdp_step));
+           timer++;
+ #if HAVE_STRFTIME
+--- a/src/rrd_fetch.c
++++ b/src/rrd_fetch.c
+@@ -16,8 +16,8 @@
+ int
+ rrd_fetch(int argc, 
+         char **argv,
+-        time_t         *start,
+-        time_t         *end,       /* which time frame do you want ?
++        TIME_INT         *start,
++        TIME_INT         *end,       /* which time frame do you want ?
+                                     * will be changed to represent reality */
+         unsigned long  *step,      /* which stepsize do you want? 
+                                     * will be changed to represent reality */
+@@ -28,7 +28,7 @@ rrd_fetch(int argc,
+     long     step_tmp =1;
+-    time_t   start_tmp=0, end_tmp=0;
++    TIME_INT   start_tmp=0, end_tmp=0;
+     enum     cf_en cf_idx;
+     struct rrd_time_value start_tv, end_tv;
+@@ -119,8 +119,8 @@ int
+ rrd_fetch_fn(
+     char           *filename,  /* name of the rrd */
+     enum cf_en     cf_idx,         /* which consolidation function ?*/
+-    time_t         *start,
+-    time_t         *end,       /* which time frame do you want ?
++    TIME_INT         *start,
++    TIME_INT         *end,       /* which time frame do you want ?
+                               * will be changed to represent reality */
+     unsigned long  *step,      /* which stepsize do you want? 
+                               * will be changed to represent reality */
+@@ -130,7 +130,7 @@ rrd_fetch_fn(
+ {
+     long           i,ii;
+     FILE           *in_file;
+-    time_t         cal_start,cal_end, rra_start_time,rra_end_time;
++    TIME_INT         cal_start,cal_end, rra_start_time,rra_end_time;
+     long  best_full_rra=0, best_part_rra=0, chosen_rra=0, rra_pointer=0;
+     long  best_step_diff=0, tmp_step_diff=0, tmp_match=0, best_match=0;
+     long  full_match, rra_base;
+--- a/src/rrd_first.c
++++ b/src/rrd_first.c
+@@ -8,13 +8,13 @@
+ #include "rrd_tool.h"
+-time_t
++TIME_INT
+ rrd_first(int argc, char **argv)    
+ {   
+     long rra_start,
+          timer;
+     unsigned long target_rraindex=0;
+-    time_t then;
++    TIME_INT then;
+     char *endptr;
+     FILE *in_file;
+     rrd_t rrd;
+--- a/src/rrd_format.h
++++ b/src/rrd_format.h
+@@ -200,7 +200,7 @@ typedef struct rra_def_t {
+  ****************************************************************************/
+ typedef struct live_head_t {
+-    time_t           last_up;            /* when was rrd last updated */
++    TIME_INT           last_up;            /* when was rrd last updated */
+ } live_head_t;
+--- a/src/rrd_graph.c
++++ b/src/rrd_graph.c
+@@ -123,7 +123,7 @@ col_trip_t graph_col[] = { /* default co
+               * ((double)(x) - im->start)+0.5) */
+ /* initialize with xtr(im,0); */
+ int
+-xtr(image_desc_t *im,time_t mytime){
++xtr(image_desc_t *im,TIME_INT mytime){
+     static double pixie;
+     if (mytime==0){
+       pixie = (double) im->xsize / (double)(im->end - im->start);
+@@ -486,8 +486,8 @@ void
+ reduce_data(
+     enum cf_en     cf,         /* which consolidation function ?*/
+     unsigned long  cur_step,   /* step the data currently is in */
+-    time_t         *start,     /* start, end and step as requested ... */
+-    time_t         *end,       /* ... by the application will be   ... */
++    TIME_INT         *start,     /* start, end and step as requested ... */
++    TIME_INT         *end,       /* ... by the application will be   ... */
+     unsigned long  *step,      /* ... adjusted to represent reality    */
+     unsigned long  *ds_cnt,    /* number of data sources in file */
+     rrd_value_t    **data)     /* two dimensional array containing the data */
+@@ -853,18 +853,20 @@ str2rpn(image_desc_t *im,char *expr){
+    time was. Return it in seconds */
+ int
+-tzoffset( time_t now ){
++tzoffset( TIME_INT now ){
+   int gm_sec, gm_min, gm_hour, gm_yday, gm_year,
+     l_sec, l_min, l_hour, l_yday, l_year;
+   struct tm *t;
+   int off;
+-  t = gmtime(&now);
++  time_t now_t;
++  now_t = (time_t) now;
++  t = gmtime(&now_t);
+   gm_sec = t->tm_sec;
+   gm_min = t->tm_min;
+   gm_hour = t->tm_hour;
+   gm_yday = t->tm_yday;
+   gm_year = t->tm_year;
+-  t = localtime(&now);
++  t = localtime(&now_t);
+   l_sec = t->tm_sec;
+   l_min = t->tm_min;
+   l_hour = t->tm_hour;
+@@ -893,7 +895,7 @@ data_calc( image_desc_t *im){
+     int       dataidx;
+     long      *steparray;
+     int       stepcnt;
+-    time_t    now;
++    TIME_INT    now;
+     double    *stack = NULL;
+     long      dc_stacksize = 0;
+@@ -1433,14 +1435,16 @@ data_proc( image_desc_t *im ){
+ /* identify the point where the first gridline, label ... gets placed */
+-time_t
++TIME_INT
+ find_first_time(
+-    time_t   start, /* what is the initial time */
++    TIME_INT   start_t, /* what is the initial time */
+     enum tmt_en baseint,  /* what is the basic interval */
+     long     basestep /* how many if these do we jump a time */
+     )
+ {
+     struct tm tm;
++    time_t start;
++    start = (time_t) start_t;
+     tm = *localtime(&start);
+     switch(baseint){
+     case TMT_SECOND:
+@@ -1485,15 +1489,17 @@ find_first_time(
+     return mktime(&tm);
+ }
+ /* identify the point where the next gridline, label ... gets placed */
+-time_t 
++TIME_INT
+ find_next_time(
+-    time_t   current, /* what is the initial time */
++    TIME_INT   current_t, /* what is the initial time */
+     enum tmt_en baseint,  /* what is the basic interval */
+     long     basestep /* how many if these do we jump a time */
+     )
+ {
+     struct tm tm;
+-    time_t madetime;
++    time_t current;
++    current = (time_t) current_t;
++    TIME_INT madetime;
+     tm = *localtime(&current);
+     do {
+       switch(baseint){
+@@ -2143,7 +2149,8 @@ vertical_grid(
+     image_desc_t   *im )
+ {   
+     int xlab_sel;             /* which sort of label and grid ? */
+-    time_t ti, tilab;
++    TIME_INT ti, tilab;
++    time_t tilab_t;
+     long factor;
+     char graph_label[100];
+     gdPoint polyPoints[4];     /* points for filled graph and more*/
+@@ -2231,9 +2238,10 @@ vertical_grid(
+       ){
+       int gr_pos,width;
+         tilab= ti + im->xlab_user.precis/2; /* correct time for the label */
++        tilab_t = (time_t) tilab;
+ #if HAVE_STRFTIME
+-      strftime(graph_label,99,im->xlab_user.stst,localtime(&tilab));
++      strftime(graph_label,99,im->xlab_user.stst,localtime(&tilab_t));
+ #else
+ # error "your libc has no strftime I guess we'll abort the exercise here."
+ #endif
+@@ -2487,7 +2495,7 @@ int lazy_check(image_desc_t *im){
+       return 0; /* can't stat */
+     /* one pixel in the existing graph is more then what we would
+        change here ... */
+-    if (time(NULL) - gifstat.st_mtime > 
++    if ((TIME_INT) time(NULL) - gifstat.st_mtime >
+       (im->end - im->start) / im->xsize) 
+       return 0;
+     if ((fd = fopen(im->graphfile,"rb")) == NULL) 
+@@ -2881,7 +2889,7 @@ rrd_graph(int argc, char **argv, char **
+     image_desc_t   im;
+     int            i;
+     long           long_tmp;
+-    time_t       start_tmp=0,end_tmp=0;
++    TIME_INT     start_tmp=0,end_tmp=0;
+     char           scan_gtm[12],scan_mtm[12],scan_ltm[12],col_nam[12];
+     char           symname[100];
+     unsigned int            col_red,col_green,col_blue;
+--- a/src/rrd_graph.h
++++ b/src/rrd_graph.h
+@@ -90,11 +90,11 @@ typedef  struct graph_desc_t {
+     char           legend[FMT_LEG_LEN+5]; /* legend*/
+     gdPoint        legloc;     /* location of legend */   
+     double         yrule;      /* value for y rule line */
+-    time_t         xrule;      /* value for x rule line */
++    TIME_INT         xrule;      /* value for x rule line */
+     rpnp_t         *rpnp;     /* instructions for CDEF function */
+     /* description of data fetched for the graph element */
+-    time_t         start,end; /* timestaps for first and last data element */
++    TIME_INT         start,end; /* timestaps for first and last data element */
+     unsigned long  step;      /* time between samples */
+     unsigned long  ds_cnt; /* how many data sources are there in the fetch */
+     long           data_first; /* first pointer to this data */
+@@ -121,7 +121,7 @@ typedef struct image_desc_t {
+     double         ygridstep;      /* user defined step for y grid */
+     int            ylabfact;       /* every how many y grid shall a label be written ? */
+-    time_t         start,end;      /* what time does the graph cover */
++    TIME_INT         start,end;      /* what time does the graph cover */
+     unsigned long           step;           /* any preference for the default step ? */
+     rrd_value_t    minval,maxval;  /* extreme values in the data */
+     int            rigid;          /* do not expand range even with 
+@@ -160,7 +160,7 @@ typedef struct image_desc_t {
+ } image_desc_t;
+ /* Prototypes */
+-int xtr(image_desc_t *,time_t);
++int xtr(image_desc_t *,TIME_INT);
+ int ytr(image_desc_t *, double);
+ enum gf_en gf_conv(char *);
+ enum if_en if_conv(char *);
+@@ -170,16 +170,16 @@ int im_free(image_desc_t *);
+ void auto_scale( image_desc_t *,  double *, char **, double *);
+ void si_unit( image_desc_t *);
+ void expand_range(image_desc_t *);
+-void reduce_data( enum cf_en,  unsigned long,  time_t *, time_t *,  unsigned long *,  unsigned long *,  rrd_value_t **);
++void reduce_data( enum cf_en,  unsigned long,  TIME_INT *, TIME_INT *,  unsigned long *,  unsigned long *,  rrd_value_t **);
+ int data_fetch( image_desc_t *);
+ long find_var(image_desc_t *, char *);
+ long lcd(long *);
+ int data_calc( image_desc_t *);
+ int data_proc( image_desc_t *);
+-time_t find_first_time( time_t,  enum tmt_en,  long);
+-time_t find_next_time( time_t,  enum tmt_en,  long);
++TIME_INT find_first_time( TIME_INT,  enum tmt_en,  long);
++TIME_INT find_next_time( TIME_INT,  enum tmt_en,  long);
+ void gator( gdImagePtr, int, int);
+-int tzoffset(time_t);
++int tzoffset(TIME_INT);
+ int print_calc(image_desc_t *, char ***);
+ int leg_place(image_desc_t *);
+ int horizontal_grid(gdImagePtr, image_desc_t *);
+--- a/src/rrd.h
++++ b/src/rrd.h
+@@ -17,6 +17,9 @@ extern "C" {
+ #define _RRDLIB_H
+ #include <time.h>
++#include <stdint.h>
++
++#define TIME_INT long
+ /* Transplanted from rrd_format.h */
+ typedef double       rrd_value_t;         /* the data storage type is
+@@ -27,15 +30,15 @@ typedef double       rrd_value_t;
+ int    rrd_create(int, char **);
+ int    rrd_update(int, char **);
+ int    rrd_graph(int, char **, char ***, int *, int *);
+-int    rrd_fetch(int, char **, time_t *, time_t *, unsigned long *,
++int    rrd_fetch(int, char **, TIME_INT *, TIME_INT *, unsigned long *,
+                unsigned long *, char ***, rrd_value_t **);
+ int    rrd_restore(int, char **);
+ int    rrd_dump(int, char **);
+ int    rrd_tune(int, char **);
+-time_t rrd_last(int, char **);
+-time_t rrd_first(int, char **);
++TIME_INT rrd_last(int, char **);
++TIME_INT rrd_first(int, char **);
+ int    rrd_resize(int, char **);
+-int    rrd_xport(int, char **, int *, time_t *, time_t *,
++int    rrd_xport(int, char **, int *, TIME_INT *, TIME_INT *,
+                unsigned long *, unsigned long *,
+                char ***, rrd_value_t **);
+@@ -57,7 +60,7 @@ struct rrd_time_value {
+ char *parsetime(char *spec, struct rrd_time_value *ptv);
+ /* END parsetime.h */
+-int proc_start_end (struct rrd_time_value *,  struct rrd_time_value *, time_t *, time_t *);
++int proc_start_end (struct rrd_time_value *,  struct rrd_time_value *, TIME_INT *, TIME_INT *);
+ /* HELPER FUNCTIONS */
+ void rrd_set_error(char *,...);
+--- a/src/rrd_last.c
++++ b/src/rrd_last.c
+@@ -8,11 +8,11 @@
+ #include "rrd_tool.h"
+-time_t
++TIME_INT
+ rrd_last(int argc, char **argv)
+ {
+     FILE      *in_file;
+-    time_t       lastup;
++    TIME_INT       lastup;
+     rrd_t      rrd;
+--- a/src/rrd_tool.c
++++ b/src/rrd_tool.c
+@@ -343,7 +343,7 @@ int HandleInputLine(int argc, char **arg
+     else if (strcmp("update", argv[1]) == 0)
+       rrd_update(argc-1, &argv[1]);
+     else if (strcmp("fetch", argv[1]) == 0) {
+-      time_t        start,end;
++      TIME_INT        start,end;
+       unsigned long step, ds_cnt,i,ii;
+       rrd_value_t   *data,*datai;
+       char          **ds_namv;
+@@ -367,7 +367,7 @@ int HandleInputLine(int argc, char **arg
+     } else if (strcmp("xport", argv[1]) == 0) {
+       int xxsize;
+       int j;
+-      time_t        i,start,end;
++      TIME_INT        i,start,end;
+       unsigned long step, col_cnt,row_cnt;
+       rrd_value_t   *data,*ptr;
+       char          **legend_v;
+--- a/src/rrd_tool.h
++++ b/src/rrd_tool.h
+@@ -134,7 +134,7 @@ void gdImagePng(gdImagePtr im, FILE *out
+ int rrd_create_fn(char *file_name, rrd_t *rrd);
+ int rrd_fetch_fn(char *filename, enum cf_en cf_idx,
+-               time_t *start,time_t *end,
++               TIME_INT *start,TIME_INT *end,
+                unsigned long *step,
+                unsigned long *ds_cnt,
+                char        ***ds_namv,
+--- a/src/rrd_update.c
++++ b/src/rrd_update.c
+@@ -91,7 +91,7 @@ rrd_update(int argc, char **argv)
+     FILE             *rrd_file;
+     rrd_t            rrd;
+-    time_t           current_time = time(NULL);
++    TIME_INT           current_time = (TIME_INT) time(NULL);
+     char             **updvals;
+     int              wrote_to_file = 0;
+     char             *template = NULL;          
+@@ -273,7 +273,7 @@ rrd_update(int argc, char **argv)
+       
+         /* get the time from the reading ... handle N */
+       if (strcmp(updvals[0],"N")==0){
+-          current_time = time(NULL);
++          current_time = (TIME_INT) time(NULL);
+       } else {
+             errno = 0;
+           current_time = strtol(updvals[0],&endptr,10);
+--- a/src/rrd_xport.c
++++ b/src/rrd_xport.c
+@@ -15,12 +15,12 @@
+ int rrd_xport(int, char **, int *,
+-            time_t *, time_t *,
++            TIME_INT *, TIME_INT *,
+             unsigned long *, unsigned long *,
+             char ***, rrd_value_t **);
+ int rrd_xport_fn(image_desc_t *,
+-               time_t *, time_t *,
++               TIME_INT *, TIME_INT *,
+                unsigned long *, unsigned long *,
+                char ***, rrd_value_t **);
+@@ -29,8 +29,8 @@ int rrd_xport_fn(image_desc_t *,
+ /* mostly rrd_graph(), just pushed a bit here and stretched a bit there */    
+ int 
+ rrd_xport(int argc, char **argv, int *xsize,
+-        time_t         *start,
+-        time_t         *end,        /* which time frame do you want ?
++        TIME_INT         *start,
++        TIME_INT         *end,        /* which time frame do you want ?
+                                      * will be changed to represent reality */
+         unsigned long  *step,       /* which stepsize do you want? 
+                                      * will be changed to represent reality */
+@@ -42,7 +42,7 @@ rrd_xport(int argc, char **argv, int *xs
+     image_desc_t   im;
+     int            i;
+     long           long_tmp;
+-    time_t       start_tmp=0,end_tmp=0;
++    TIME_INT     start_tmp=0,end_tmp=0;
+     char           symname[100];
+     long           scancount;
+     struct rrd_time_value start_tv, end_tv;
+@@ -286,8 +286,8 @@ rrd_xport(int argc, char **argv, int *xs
+ int
+ rrd_xport_fn(image_desc_t *im,
+-           time_t         *start,
+-           time_t         *end,        /* which time frame do you want ?
++           TIME_INT         *start,
++           TIME_INT         *end,        /* which time frame do you want ?
+                                         * will be changed to represent reality */
+            unsigned long  *step,       /* which stepsize do you want? 
+                                         * will be changed to represent reality */
+@@ -307,9 +307,9 @@ rrd_xport_fn(image_desc_t *im,
+     char **legend_list;
+     int ii = 0;
+-    time_t start_tmp = 0;
+-    time_t end_tmp = 0;
+-    time_t curr_ts;
++    TIME_INT start_tmp = 0;
++    TIME_INT end_tmp = 0;
++    TIME_INT curr_ts;
+     unsigned long step_tmp = 1;
+     int dataIndex;
+--- a/contrib/trytime/trytime.c
++++ b/contrib/trytime/trytime.c
+@@ -24,7 +24,8 @@ int main ( int ac, char **av )
+   int option_index = 0;
+   int opt;
+    
+-  time_t start_tmp, end_tmp, Now = time(NULL);
++  time_t start_time, end_time, Now = time(NULL);
++  TIME_INT start_tmp, end_tmp;
+   char tim_b[200];
+   
+   struct rrd_time_value start_tv, end_tv;
+@@ -80,7 +81,8 @@ int main ( int ac, char **av )
+       exit(1);
+   }
+   
+-  strftime(tim_b,100,"%c %Z",localtime(&start_tmp));
++  start_time = (time_t) start_tmp;
++  strftime(tim_b,100,"%c %Z",localtime(&start_time));
+   if( *soption )
+       printf( "Start time was specified as: '%s',\n"
+             "for me this means: %s (or %ld sec since epoch)\n\n", 
+@@ -90,7 +92,8 @@ int main ( int ac, char **av )
+             "for me this means: %s (or %ld sec since epoch)\n\n",
+             tim_b, start_tmp );
+     
+-  strftime(tim_b,100,"%c %Z",localtime(&end_tmp));
++  end_time = (time_t) end_tmp;
++  strftime(tim_b,100,"%c %Z",localtime(&end_time));
+   if( *eoption )
+       printf( "End time was specified as: '%s',\n"
+             "for me this means: %s (or %ld sec since epoch)\n", 
diff --git a/package/utils/tcsh/Makefile b/package/utils/tcsh/Makefile
new file mode 100644 (file)
index 0000000..3496f97
--- /dev/null
@@ -0,0 +1,92 @@
+#
+# Copyright (C) 2011-2017 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=tcsh
+PKG_VERSION:=6.22.04
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:= \
+       https://astron.com/pub/tcsh/ \
+       https://astron.com/pub/tcsh/old \
+       https://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh \
+       https://ftp.funet.fi/pub/mirrors/ftp.astron.com/pub/tcsh/old
+PKG_HASH:=eb16356243218c32f39e07258d72bf8b21e62ce94bb0e8a95e318b151397e231
+
+PKG_MAINTAINER:=Nuno Goncalves <nunojpg@gmail.com>
+PKG_LICENSE:=BSD-3-Clause
+PKG_LICENSE_FILES:=Copyright
+PKG_CPE_ID:=cpe:/a:tcsh:tcsh
+
+PKG_FIXUP:=autoreconf
+PKG_INSTALL:=1
+PKG_BUILD_DEPENDS:=tcsh/host
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/host-build.mk
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/nls.mk
+
+define Package/tcsh
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Shells
+  TITLE:=Enhanced Berkeley UNIX C shell
+  DEPENDS:=+libncurses $(ICONV_DEPENDS)
+  URL:=https://www.tcsh.org/
+endef
+
+define Package/tcsh/description
+       Tcsh is an enhanced, but completely compatible
+       version of the Berkeley UNIX C shell (csh). It
+       is a command language interpreter usable both
+       as an interactive login shell and a shell
+       script command processor. It includes a
+       command-line editor, programmable word
+       completion, spelling correction, a history
+       mechanism, job control and a C-like syntax.
+endef
+
+
+define Host/Compile
+       $(call Host/Compile/Default,gethost)
+endef
+
+define Host/Install
+       mkdir -p $(STAGING_DIR_HOSTPKG)/usr/bin
+       $(INSTALL_BIN) $(HOST_BUILD_DIR)/gethost $(STAGING_DIR_HOSTPKG)/usr/bin/tcsh-gethost
+endef
+
+define Build/Compile
+       #Build sh.err.h and tc.const.h for target build
+       $(call Build/Compile/Default,sh.err.h)
+       $(call Build/Compile/Default,tc.const.h)
+       #Copy gethost (host tool to generate header file) from hostpkg dir
+       $(CP) $(STAGING_DIR_HOSTPKG)/usr/bin/tcsh-gethost $(PKG_BUILD_DIR)/gethost
+       #Make-touch header generator binary to prevent recompiling during target build
+       $(call Build/Compile/Default,-t gethost)
+       #Build tcsh for target
+       $(call Build/Compile/Default)
+endef
+
+define Package/tcsh/postinst
+#!/bin/sh
+grep tcsh $${IPKG_INSTROOT}/etc/shells || { \
+       echo "/bin/tcsh"
+       echo "/bin/csh"
+} >> $${IPKG_INSTROOT}/etc/shells
+endef
+
+define Package/tcsh/install
+       $(INSTALL_DIR) $(1)/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/tcsh $(1)/bin/
+       ln -sf tcsh $(1)/bin/csh
+endef
+
+$(eval $(call HostBuild))
+$(eval $(call BuildPackage,tcsh))
diff --git a/package/utils/tcsh/patches/001-sysmalloc.patch b/package/utils/tcsh/patches/001-sysmalloc.patch
new file mode 100644 (file)
index 0000000..f46ce35
--- /dev/null
@@ -0,0 +1,15 @@
+--- a/config_f.h
++++ b/config_f.h
+@@ -138,11 +138,8 @@
+  *            This can be much slower and no memory statistics will be
+  *            provided.
+  */
+-#if defined(__MACHTEN__) || defined(PURIFY) || defined(MALLOC_TRACE) || defined(_OSD_POSIX) || defined(__MVS__) || defined (__CYGWIN__) || defined(__GLIBC__) || defined(__OpenBSD__) || defined(__APPLE__) || defined (__ANDROID__)
++
+ # define SYSMALLOC
+-#else
+-# undef SYSMALLOC
+-#endif
+ /*
+  * USE_ACCESS Use access(2) rather than stat(2) when POSIX is defined.
diff --git a/package/utils/tcsh/patches/010-wint.patch b/package/utils/tcsh/patches/010-wint.patch
new file mode 100644 (file)
index 0000000..18c373d
--- /dev/null
@@ -0,0 +1,14 @@
+--- a/ed.inputl.c
++++ b/ed.inputl.c
+@@ -668,9 +668,9 @@ int
+ GetCmdChar(Char ch)
+ {
+ #ifndef WINNT_NATIVE // We use more than 256 for various extended keys
+-    wint_t c = ch & CHAR;
++    Char c = ch & CHAR;
+ #else
+-    wint_t c = ch;
++    Char c = ch;
+ #endif
+     return c < NT_NUM_KEYS ? CurrentKeyMap[c] : F_INSERT;
+ }
diff --git a/package/utils/tmux/Makefile b/package/utils/tmux/Makefile
new file mode 100644 (file)
index 0000000..a1a1c0a
--- /dev/null
@@ -0,0 +1,45 @@
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=tmux
+PKG_VERSION:=3.3a
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/tmux/tmux/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=f9687493203f86d346791a9327cde9148b9b4be959381b1effc575a9364a043f
+PKG_MAINTAINER:=Maxim Storchak <m.storchak@gmail.com>
+
+PKG_LICENSE:=ISC
+PKG_LICENSE_FILES:=COPYING
+PKG_CPE_ID:=cpe:/a:nicholas_marriott:tmux
+
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+PKG_FIXUP:=autoreconf
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/tmux
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Terminal
+  TITLE:=Terminal multiplexer
+  DEPENDS:=+libncurses +libevent2-core +libpthread +librt
+  URL:=http://tmux.github.io/
+endef
+
+define Package/tmux/description
+  tmux is a modern, BSD-licensed alternative to GNU screen.
+endef
+
+define Package/tmux/conffiles
+/etc/tmux.conf
+endef
+
+define Package/tmux/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/tmux $(1)/usr/bin/
+endef
+
+$(eval $(call BuildPackage,tmux))
diff --git a/package/utils/tmux/test.sh b/package/utils/tmux/test.sh
new file mode 100644 (file)
index 0000000..f494b5d
--- /dev/null
@@ -0,0 +1,3 @@
+#!/bin/sh
+
+tmux -V | grep "$2"
diff --git a/package/utils/ttyd/Makefile b/package/utils/ttyd/Makefile
new file mode 100644 (file)
index 0000000..83682fe
--- /dev/null
@@ -0,0 +1,51 @@
+#
+# Copyright (C) 2016 Shuanglei Tao <tsl0922@gmail.com>
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=ttyd
+PKG_VERSION:=1.7.3
+PKG_RELEASE:=1
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.gz
+PKG_SOURCE_URL:=https://codeload.github.com/tsl0922/ttyd/tar.gz/$(PKG_VERSION)?
+PKG_HASH:=c9cf5eece52d27c5d728000f11315d36cb400c6948d1964a34a7eae74b454099
+
+PKG_MAINTAINER:=Shuanglei Tao <tsl0922@gmail.com>
+PKG_LICENSE:=MIT
+PKG_LICENSE_FILES:=LICENSE
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/cmake.mk
+
+define Package/ttyd
+       SECTION:=utils
+       CATEGORY:=Utilities
+       TITLE:=Command-line tool for sharing terminal over the web
+       DEPENDS:=+libcap +libopenssl +libjson-c +libuv +zlib +libwebsockets-full
+       URL:=https://github.com/tsl0922/ttyd
+       SUBMENU:=Terminal
+endef
+
+define Package/ttyd/description
+ttyd is a command-line tool for sharing terminal over the web.
+endef
+
+define Package/ttyd/conffiles
+/etc/config/ttyd
+endef
+
+define Package/ttyd/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/usr/bin/ttyd $(1)/usr/bin/
+       $(INSTALL_DIR) $(1)/etc/config/
+       $(INSTALL_CONF) ./files/ttyd.config $(1)/etc/config/ttyd
+       $(INSTALL_DIR) $(1)/etc/init.d/
+       $(INSTALL_BIN) ./files/ttyd.init $(1)/etc/init.d/ttyd
+endef
+
+$(eval $(call BuildPackage,ttyd))
diff --git a/package/utils/ttyd/files/ttyd.config b/package/utils/ttyd/files/ttyd.config
new file mode 100644 (file)
index 0000000..8dbde70
--- /dev/null
@@ -0,0 +1,5 @@
+
+config ttyd
+       option interface '@lan'
+       option command '/bin/login'
+
diff --git a/package/utils/ttyd/files/ttyd.init b/package/utils/ttyd/files/ttyd.init
new file mode 100644 (file)
index 0000000..0a3d440
--- /dev/null
@@ -0,0 +1,102 @@
+#!/bin/sh /etc/rc.common
+
+START=99
+STOP=50
+USE_PROCD=1
+
+NAME=ttyd
+PROG=/usr/bin/$NAME
+
+validate_section_ttyd()
+{
+       uci_load_validate ttyd ttyd "$1" "$2" \
+               'enable:bool:1' \
+               'port:port' \
+               'interface:string' \
+               'credential:string' \
+               'uid:uinteger' \
+               'gid:uinteger' \
+               'signal:uinteger' \
+               'url_arg:bool' \
+               'readonly:bool' \
+               'client_option:list(string)' \
+               'terminal_type:string' \
+               'check_origin:bool' \
+               'max_clients:uinteger' \
+               'once:bool' \
+               'index:string' \
+               'ipv6:bool' \
+               'ssl:bool' \
+               'ssl_cert:file' \
+               'ssl_key:file' \
+               'ssl_ca:file' \
+               'debug:uinteger' \
+               'command:string'
+}
+
+ttyd_instance()
+{
+       [ "$2" = 0 ] || {
+               echo "validation failed"
+               return 1
+       }
+
+       [ "$enable" = 0 ] && return 1
+       [ -z "$command" ] && return 1
+
+       [ "${interface::1}" = @ ] && {
+               interface=$(
+                       . /lib/functions/network.sh
+                       network_get_device device "${interface:1}"
+                       echo -n "$device"
+               )
+       }
+
+       [ "$url_arg" = 0 ] && url_arg=""
+       [ "$readonly" = 0 ] && readonly=""
+       [ "$check_origin" = 0 ] && check_origin=""
+       [ "$once" = 0 ] && once=""
+       [ "$ipv6" = 0 ] && ipv6=""
+       [ "$ssl" = 0 ] && ssl=""
+
+       procd_open_instance
+       procd_set_param command "$PROG" \
+               ${port:+-p $port} \
+               ${interface:+-i $interface} \
+               ${credential:+-c $credential} \
+               ${uid:+-u $uid} \
+               ${gid:+-g $gid} \
+               ${signal:+-s $signal} \
+               ${url_arg:+-a} \
+               ${readonly:+-R} \
+               ${terminal_type:+-T $terminal_type} \
+               ${check_origin:+-O} \
+               ${max_clients:+-m $max_clients} \
+               ${once:+-o} \
+               ${index:+-I $index} \
+               ${ipv6:+-6} \
+               ${ssl:+-S} \
+               ${ssl_cert:+-C $ssl_cert} \
+               ${ssl_key:+-K $ssl_key} \
+               ${ssl_ca:+-A $ssl_ca} \
+               ${debug:+-d $debug}
+       config_list_foreach "$1" client_option "procd_append_param command -t"
+       procd_append_param command $command
+       procd_set_param stdout 1
+       procd_set_param stderr 1
+       procd_close_instance
+}
+
+start_service() {
+       config_load "$NAME"
+       config_foreach validate_section_ttyd ttyd ttyd_instance
+}
+
+shutdown() {
+       # close all open connections
+       killall "$NAME"
+}
+
+service_triggers() {
+       procd_add_reload_trigger "$NAME"
+}
diff --git a/package/utils/ttyd/patches/100-log-to-syslog.patch b/package/utils/ttyd/patches/100-log-to-syslog.patch
new file mode 100644 (file)
index 0000000..aed465a
--- /dev/null
@@ -0,0 +1,20 @@
+--- a/src/server.c
++++ b/src/server.c
+@@ -10,6 +10,7 @@
+ #include <stdlib.h>
+ #include <string.h>
+ #include <sys/stat.h>
++#include <syslog.h>
+ #include "utils.h"
+@@ -509,7 +510,8 @@ int main(int argc, char **argv) {
+     return -1;
+   }
+-  lws_set_log_level(debug_level, NULL);
++  openlog("ttyd", LOG_NDELAY | LOG_PID, LOG_DAEMON);
++  lws_set_log_level(debug_level, lwsl_emit_syslog);
+   char server_hdr[128] = "";
+   sprintf(server_hdr, "ttyd/%s (libwebsockets/%s)", TTYD_VERSION, LWS_LIBRARY_VERSION);
diff --git a/package/utils/vim/Makefile b/package/utils/vim/Makefile
new file mode 100644 (file)
index 0000000..8ca8742
--- /dev/null
@@ -0,0 +1,251 @@
+#
+# Copyright (C) 2015 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=vim
+PKG_VERSION:=9.0
+PKG_RELEASE:=1
+VIMVER:=90
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.bz2
+PKG_SOURCE_URL:=http://ftp.vim.org/pub/vim/unix
+PKG_HASH:=a6456bc154999d83d0c20d968ac7ba6e7df0d02f3cb6427fb248660bacfb336e
+PKG_MAINTAINER:=Marko Ratkaj <markoratkaj@gmail.com>
+PKG_CPE_ID:=cpe:/a:vim:vim
+
+PKG_BUILD_DIR:=$(BUILD_DIR)/$(PKG_NAME)$(VIMVER)
+PKG_BUILD_PARALLEL:=1
+
+include $(INCLUDE_DIR)/package.mk
+include $(INCLUDE_DIR)/host-build.mk
+
+define Package/vim/Default
+  SECTION:=utils
+  CATEGORY:=Utilities
+  DEPENDS:=+libncurses
+  TITLE:=Vi IMproved - enhanced vi editor
+  URL:=http://www.vim.org/
+  SUBMENU:=Editors
+endef
+
+define Package/vim
+  $(call Package/vim/Default)
+  TITLE+= (Tiny)
+endef
+
+define Package/vim-full
+  $(call Package/vim/Default)
+  TITLE+= (Normal)
+  PROVIDES:=vim
+  CONFLICTS:=vim
+endef
+
+
+define Package/vim-fuller
+  $(call Package/vim/Default)
+  TITLE+= (Big)
+  PROVIDES:=vim vim-full
+  CONFLICTS:=vim vim-full
+endef
+
+define Package/vim-runtime
+  $(call Package/vim/Default)
+  TITLE+= (runtime files)
+endef
+
+define Package/vim-help
+  $(call Package/vim/Default)
+  TITLE+= (help files)
+endef
+
+define Package/xxd
+  SECTION:=utils
+  CATEGORY:=Utilities
+  TITLE:=make a hexdump or do the reverse
+  URL:=http://www.vim.org/
+endef
+
+define Package/vim-full/conffiles
+/usr/share/vim/vimrc
+/root/.vimrc
+endef
+
+define Package/vim/conffiles
+/usr/share/vim/vimrc
+/root/.vimrc
+endef
+
+define Package/vim/description
+ Vim is an almost compatible version of the UNIX editor Vi.
+ (Tiny build)
+endef
+
+define Package/vim-full/description
+ Vim is an almost compatible version of the UNIX editor Vi.
+ (Normal build)
+endef
+
+
+define Package/vim-fuller/description
+ Vim is an almost compatible version of the UNIX editor Vi.
+ (Big build)
+endef
+
+define Package/vim-runtime/description
+ Vim is an almost compatible version of the UNIX editor Vi.
+ (Runtime files)
+endef
+
+define Package/vim-help/description
+ Vim is an almost compatible version of the UNIX editor Vi.
+ (Help files)
+endef
+
+define Package/xxd/description
+ xxd creates a hex dump of a given file or standard input, it can also convert
+ a hex dump back to its original binary form.
+endef
+
+CONFIGURE_ARGS += \
+       --disable-gui \
+       --disable-gtktest \
+       --disable-xim \
+       --without-x \
+       --disable-netbeans \
+       --disable-cscope \
+       --disable-gpm \
+       --disable-acl \
+       --disable-libsodium \
+       --disable-selinux \
+       --with-tlib=ncurses \
+       --with-compiledby="non-existent-hostname-compiled"
+
+CONFIGURE_VARS += \
+       ac_cv_header_elf_h=no \
+       vim_cv_getcwd_broken=no \
+       vim_cv_memmove_handles_overlap=yes \
+       vim_cv_stat_ignores_slash=yes \
+       vim_cv_tgetent=zero \
+       vim_cv_terminfo=yes \
+       vim_cv_toupper_broken=no \
+       vim_cv_tty_group=root \
+       vim_cv_tty_mode=0620
+
+ifneq ($(HOST_OS),Linux)
+  TARGET_PATH_PKG:=$(CURDIR)/scripts:$(TARGET_PATH_PKG)
+endif
+
+define Build/Prepare
+       $(call Build/Prepare/Default)
+       $(MAKE) -C $(PKG_BUILD_DIR)/src autoconf
+endef
+
+ifneq ($(CONFIG_PACKAGE_vim),)
+define Build/Compile/vim
+       $(call Build/Configure/Default, \
+               --with-features=tiny \
+       )
+       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" all
+       $(CP) $(PKG_BUILD_DIR)/src/$(PKG_NAME) $(PKG_BUILD_DIR)/vim_tiny
+endef
+endif
+
+ifneq ($(CONFIG_PACKAGE_vim-full),)
+define Build/Compile/vim-full
+       $(call Build/Configure/Default, \
+               --with-features=normal \
+       )
+       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" all
+       $(CP) $(PKG_BUILD_DIR)/src/$(PKG_NAME) $(PKG_BUILD_DIR)/vim_normal
+endef
+endif
+
+ifneq ($(CONFIG_PACKAGE_vim-fuller),)
+define Build/Compile/vim-fuller
+       $(call Build/Configure/Default, \
+               --with-features=big \
+       )
+       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" all
+       $(CP) $(PKG_BUILD_DIR)/src/$(PKG_NAME) $(PKG_BUILD_DIR)/vim_big
+endef
+endif
+
+
+
+ifneq ($(CONFIG_PACKAGE_xxd),)
+define Build/Compile/xxd
+       +$(MAKE) $(PKG_JOBS) -C $(PKG_BUILD_DIR) \
+               DESTDIR="$(PKG_INSTALL_DIR)" all
+endef
+endif
+
+define Build/Compile/vim-runtime
+       $(MAKE) -C $(PKG_BUILD_DIR)/src DESTDIR="$(PKG_INSTALL_DIR)" installrtbase
+       (cd $(PKG_INSTALL_DIR) && tar -cf $(PKG_BUILD_DIR)/docs.tar ./usr/share/vim/vim$(VIMVER)/doc)
+       rm -rf $(PKG_INSTALL_DIR)/usr/share/vim/vim$(VIMVER)/doc
+       rm -rf $(PKG_INSTALL_DIR)/usr/man
+endef
+
+define Build/Compile
+$(call Build/Compile/vim)
+$(call Build/Compile/vim-full)
+$(call Build/Compile/vim-fuller)
+$(call Build/Compile/vim-runtime)
+$(call Build/Compile/xxd)
+endef
+
+define Package/vim/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/vim_tiny $(1)/usr/bin/vim
+       $(INSTALL_DIR) $(1)/usr/share/vim
+       $(INSTALL_CONF) ./files/vimrc $(1)/usr/share/vim/
+endef
+
+define Package/vim-full/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/vim_normal $(1)/usr/bin/vim
+       $(INSTALL_DIR) $(1)/usr/share/vim
+       $(LN) vim $(1)/usr/bin/vimdiff
+       $(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc
+endef
+
+
+define Package/vim-fuller/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/vim_big $(1)/usr/bin/vim
+       $(INSTALL_DIR) $(1)/usr/share/vim
+       $(LN) vim $(1)/usr/bin/vimdiff
+       $(CP) $(PKG_INSTALL_DIR)/usr/share/vim/vim$(VIMVER) $(1)/usr/share/vim
+       $(INSTALL_CONF) ./files/vimrc.full $(1)/usr/share/vim/vimrc
+endef
+
+
+
+define Package/vim-runtime/install
+       $(CP) $(PKG_INSTALL_DIR)/* $(1)
+       rm -rf $(1)/usr/share/vim/vim$(VIMVER)/doc
+endef
+
+define Package/vim-help/install
+       tar -C $(1) -xf $(PKG_BUILD_DIR)/docs.tar
+endef
+
+define Package/xxd/install
+       $(INSTALL_DIR) $(1)/usr/bin
+       $(INSTALL_BIN) $(PKG_BUILD_DIR)/src/xxd/xxd $(1)/usr/bin
+endef
+
+$(eval $(call BuildPackage,vim))
+$(eval $(call BuildPackage,vim-full))
+$(eval $(call BuildPackage,vim-fuller))
+$(eval $(call BuildPackage,vim-runtime))
+$(eval $(call BuildPackage,vim-help))
+$(eval $(call BuildPackage,xxd))
diff --git a/package/utils/vim/files/vimrc b/package/utils/vim/files/vimrc
new file mode 100644 (file)
index 0000000..d744cfe
--- /dev/null
@@ -0,0 +1,12 @@
+set showcmd                    " show (partial) command in status line
+set showmatch          " show matching brackets
+set incsearch          " incremental search
+"set autowrite         " automatically save before commands like :next and :make
+set nocompatible       " use vim defaults instead of 100% vi compatibility
+set backspace=indent,eol,start " more powerful backspacing
+set autoindent         " always set autoindenting on
+set linebreak          " don't wrap words by default
+set textwidth=0                " don't wrap lines by default
+set ruler                      " show the cursor position all the time
+
+set backupskip+=/etc/crontabs.*        " fix crontab -e
diff --git a/package/utils/vim/files/vimrc.full b/package/utils/vim/files/vimrc.full
new file mode 100644 (file)
index 0000000..5cd3669
--- /dev/null
@@ -0,0 +1,30 @@
+set showcmd                    " show (partial) command in status line
+set showmatch                  " show matching brackets
+set incsearch                  " incremental search
+"set autowrite                 " automatically save before commands like :next and :make
+set nocompatible               " use Vim defaults instead of 100% vi compatibility
+set backspace=indent,eol,start " more powerful backspacing
+set autoindent                 " always set autoindenting on
+set linebreak                  " don't wrap words by default
+set textwidth=0                        " don't wrap lines by default
+set ruler                      " show the cursor position all the time
+
+set backupskip+=/etc/crontabs.*        " fix crontab -e
+
+if filereadable(expand("$VIMRUNTIME/syntax/synload.vim"))
+       syntax on
+endif
+if has("syntax") && &term =~ "xterm"
+       set t_Co=8
+       if has("terminfo")
+               set t_Sf=<Esc>[3%p1%dm
+               set t_Sb=<Esc>[4%p1%dm
+       else
+               set t_Sf=<Esc>[3%dm
+               set t_Sb=<Esc>[4%dm
+       endif
+endif
+
+" Uncomment out for line and/or relative numberig
+" set number
+" set rnu
diff --git a/package/utils/vim/patches/002-remove_helptags_generation.patch b/package/utils/vim/patches/002-remove_helptags_generation.patch
new file mode 100644 (file)
index 0000000..83ec82e
--- /dev/null
@@ -0,0 +1,10 @@
+--- a/runtime/doc/Makefile
++++ b/runtime/doc/Makefile
+@@ -345,7 +345,6 @@ all: tags vim.man evim.man vimdiff.man v
+ # Use Vim to generate the tags file.  Can only be used when Vim has been
+ # compiled and installed.  Supports multiple languages.
+ vimtags: $(DOCS)
+-      @$(VIMEXE) --clean -esX -V1 -u doctags.vim
+ # Use "doctags" to generate the tags file.  Only works for English!
+ tags: doctags $(DOCS)
diff --git a/package/utils/vim/patches/010-no-msgfmt.patch b/package/utils/vim/patches/010-no-msgfmt.patch
new file mode 100644 (file)
index 0000000..82e19bb
--- /dev/null
@@ -0,0 +1,11 @@
+--- a/src/po/Makefile
++++ b/src/po/Makefile
+@@ -32,7 +32,7 @@ MSGMERGE = OLD_PO_FILE_INPUT=yes OLD_PO_
+       $(VIM) -u NONE -e -X -S check.vim -c "if error == 0 | q | endif" -c cq $<
+       touch $@
+-all: $(MOFILES) $(MOCONVERTED) $(MSGFMT_DESKTOP)
++all: $(MOFILES) $(MOCONVERTED)
+ check: $(CHECKFILES)
diff --git a/package/utils/vim/scripts/uname b/package/utils/vim/scripts/uname
new file mode 100755 (executable)
index 0000000..d2cd568
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+echo "Linux"
diff --git a/package/utils/vim/test.sh b/package/utils/vim/test.sh
new file mode 100644 (file)
index 0000000..913b9c6
--- /dev/null
@@ -0,0 +1,7 @@
+#!/bin/sh
+
+case "$1" in
+       vim|vim-full|vim-fuller)
+               vim --version | grep "$2"
+               ;;
+esac
diff --git a/package/utils/zsh/Makefile b/package/utils/zsh/Makefile
new file mode 100644 (file)
index 0000000..e894bc6
--- /dev/null
@@ -0,0 +1,130 @@
+#
+# Copyright (C) 2013-2016 OpenWrt.org
+#
+# This is free software, licensed under the GNU General Public License v2.
+# See /LICENSE for more information.
+#
+
+include $(TOPDIR)/rules.mk
+
+PKG_NAME:=zsh
+PKG_VERSION:=5.9
+PKG_RELEASE:=2
+
+PKG_SOURCE:=$(PKG_NAME)-$(PKG_VERSION).tar.xz
+PKG_SOURCE_URL:=@SF/zsh
+PKG_HASH:=9b8d1ecedd5b5e81fbf1918e876752a7dd948e05c1a0dba10ab863842d45acd5
+
+PKG_MAINTAINER:=Vadim A. Misbakh-Soloviov <openwrt-zsh@mva.name>
+PKG_LICENSE:=ZSH
+PKG_LICENSE_FILES:=LICENCE
+PKG_CPE_ID:=cpe:/a:zsh_project:zsh
+
+PKG_FIXUP:=autoreconf
+PKG_BUILD_PARALLEL:=1
+PKG_INSTALL:=1
+PKG_BUILD_FLAGS:=gc-sections lto
+
+# zsh include custom macro in the default aclocal.m4
+# When autoreconf PKG_FIXUP is used, if PKG_REMOVE_FILES
+# is not defined, it's set to remove the file aclocak.m4
+# by default resulting in problem with the custom macro
+# AC_PROG_LN
+# To prevent this, declare empty PKG_REMOVE_FILES
+PKG_REMOVE_FILES:=
+
+include $(INCLUDE_DIR)/package.mk
+
+define Package/zsh
+  SECTION:=utils
+  CATEGORY:=Utilities
+  SUBMENU:=Shells
+  TITLE:=The Z shell
+  DEPENDS:=+libcap +libncurses +libncursesw +libpcre2 +librt
+  URL:=https://www.zsh.org/
+endef
+
+define Package/zsh/description
+        Zsh is a UNIX command interpreter (shell) usable as an interactive
+        login  shell  and  as a shell script command processor. Of the standard
+        shells, zsh most closely resembles ksh but includes many enhancements.
+        Zsh has command line editing, builtin spelling correction, programmable
+        command completion, shell functions (with autoloading), a history
+        mechanism, and a host of other features.
+endef
+
+define Build/Configure
+       $(call Build/Configure/Default, \
+               --disable-etcdir \
+               --disable-gdbm \
+               $(if $(CONFIG_USE_MUSL),--enable-libc-musl) \
+               --enable-pcre \
+               --enable-cap \
+               --enable-multibyte \
+               --enable-unicode9 \
+               --enable-runhelpdir=$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/help \
+               --enable-fndir=$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/functions \
+               --enable-site-fndir=$(CONFIGURE_PREFIX)/share/zsh/site-functions \
+               --enable-function-subdirs \
+               --with-tcsetpgrp \
+               --with-term-lib="ncursesw", \
+               zsh_cv_shared_environ=yes \
+               zsh_cv_sys_dynamic_clash_ok=yes\
+               zsh_cv_sys_dynamic_execsyms=yes \
+               zsh_cv_sys_dynamic_rtld_global=yes \
+               zsh_cv_sys_dynamic_strip_exe=yes \
+               zsh_cv_sys_dynamic_strip_lib=yes \
+               zsh_cv_sys_nis=no \
+               zsh_cv_sys_nis_plus=no \
+       )
+       # Do not install these functions:
+       $(SED) 's, Completion/AIX/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/BSD/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/Cygwin/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/Darwin/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/Debian/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/Mandriva/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/Redhat/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/Solaris/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/X/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       $(SED) 's, Completion/openSUSE/\*/\*,,g' $(PKG_BUILD_DIR)/config.modules
+       # After mucking with 'config.modules', one must call
+       $(MAKE) -C $(PKG_BUILD_DIR) DESTDIR="$(PKG_INSTALL_DIR)" prep
+endef
+
+TARGET_CFLAGS += $(FPIC)
+TARGET_LDFLAGS += $(FPIC)
+
+define Package/zsh/postinst
+#!/bin/sh
+grep zsh $${IPKG_INSTROOT}/etc/shells || \
+       echo "/usr/bin/zsh" >> $${IPKG_INSTROOT}/etc/shells
+
+# Backwards compatibility
+if [ -e /bin/zsh ] && { [ ! -L /bin/zsh ] || [ "$(readlink -fn $${IPKG_INSTROOT}/bin/zsh)" != "../$(CONFIGURE_PREFIX)/bin/zsh" ]; }; then
+       ln -fs "../$(CONFIGURE_PREFIX)/bin/zsh" "$${IPKG_INSTROOT}/bin/zsh"
+fi
+endef
+
+define Package/zsh/install
+       $(INSTALL_DIR) $(1)/bin
+       $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/bin
+       $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)
+       $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh
+       $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/net
+       $(INSTALL_DIR) $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/param
+
+       $(INSTALL_BIN) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/bin/zsh $(1)/$(CONFIGURE_PREFIX)/bin/
+       $(CP) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/* $(1)/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)/
+       $(CP) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/* $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/
+       $(CP) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/net/* $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/net/
+       $(CP) $(PKG_INSTALL_DIR)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/param/* $(1)/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)/zsh/param/
+endef
+
+define Package/zsh/postrm
+#!/bin/sh
+rm -rf "$${IPKG_INSTROOT}/$(CONFIGURE_PREFIX)/share/zsh/$(PKG_VERSION)" \
+       "$${IPKG_INSTROOT}/$(CONFIGURE_PREFIX)/lib/zsh/$(PKG_VERSION)"
+endef
+
+$(eval $(call BuildPackage,zsh))
diff --git a/package/utils/zsh/patches/001-50658-test-Enable-to-switch-between-C-UTF-8-locales-.patch b/package/utils/zsh/patches/001-50658-test-Enable-to-switch-between-C-UTF-8-locales-.patch
new file mode 100644 (file)
index 0000000..79e352a
--- /dev/null
@@ -0,0 +1,71 @@
+From 1b421e4978440234fb73117c8505dad1ccc68d46 Mon Sep 17 00:00:00 2001
+From: Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
+Date: Mon, 26 Sep 2022 10:52:50 +0900
+Subject: [PATCH] 50658 + test: Enable to switch between C/UTF-8 locales in
+ PCRE
+
+---
+ ChangeLog          |  5 +++++
+ Src/Modules/pcre.c | 10 ++--------
+ Test/V07pcre.ztst  | 11 +++++++++++
+ 3 files changed, 18 insertions(+), 8 deletions(-)
+
+# diff --git a/ChangeLog b/ChangeLog
+# index 48c65d01b..77345c050 100644
+# --- a/ChangeLog
+# +++ b/ChangeLog
+# @@ -1,3 +1,8 @@
+# +2022-09-26  Jun-ichi Takimoto  <takimoto-j@kba.biglobe.ne.jp>
+# +
+# +    * 50658 + test: Src/Modules/pcre.c, Test/V07pcre.ztst: Enable to
+# +    switch between C/UTF-8 locales in PCRE
+# +
+#  2022-09-25  Peter Stephenson  <p.w.stephenson@ntlworld.com>
+#      * 50648: Functions/Misc/zcalc: Julian Prein: Use ZCALC_HISTFILE
+--- a/Src/Modules/pcre.c
++++ b/Src/Modules/pcre.c
+@@ -47,8 +47,6 @@ zpcre_utf8_enabled(void)
+ #if defined(MULTIBYTE_SUPPORT) && defined(HAVE_NL_LANGINFO) && defined(CODESET)
+     static int have_utf8_pcre = -1;
+-    /* value can toggle based on MULTIBYTE, so don't
+-     * be too eager with caching */
+     if (have_utf8_pcre < -1)
+       return 0;
+@@ -56,15 +54,11 @@ zpcre_utf8_enabled(void)
+       return 0;
+     if ((have_utf8_pcre == -1) &&
+-        (!strcmp(nl_langinfo(CODESET), "UTF-8"))) {
+-
+-      if (pcre_config(PCRE_CONFIG_UTF8, &have_utf8_pcre))
++      (pcre_config(PCRE_CONFIG_UTF8, &have_utf8_pcre))) {
+           have_utf8_pcre = -2; /* erk, failed to ask */
+     }
+-    if (have_utf8_pcre < 0)
+-      return 0;
+-    return have_utf8_pcre;
++    return (have_utf8_pcre == 1) && (!strcmp(nl_langinfo(CODESET), "UTF-8"));
+ #else
+     return 0;
+--- a/Test/V07pcre.ztst
++++ b/Test/V07pcre.ztst
+@@ -174,3 +174,14 @@
+     echo $match[2] )
+ 0:regression for segmentation fault, workers/38307
+ >test
++
++  LANG_SAVE=$LANG
++  [[ é =~ '^.\z' ]]; echo $?
++  LANG=C
++  [[ é =~ '^..\z' ]]; echo $?
++  LANG=$LANG_SAVE
++  [[ é =~ '^.\z' ]]; echo $?
++0:swich between C/UTF-8 locales
++>0
++>0
++>0
diff --git a/package/utils/zsh/patches/002-51723-migrate-pcre-module-to-pcre2.patch b/package/utils/zsh/patches/002-51723-migrate-pcre-module-to-pcre2.patch
new file mode 100644 (file)
index 0000000..6e0b7f1
--- /dev/null
@@ -0,0 +1,540 @@
+From b62e911341c8ec7446378b477c47da4256053dc0 Mon Sep 17 00:00:00 2001
+From: Oliver Kiddle <opk@zsh.org>
+Date: Sat, 13 May 2023 00:53:32 +0200
+Subject: [PATCH] 51723: migrate pcre module to pcre2
+
+---
+ ChangeLog          |   3 +
+ Src/Modules/pcre.c | 223 ++++++++++++++++++---------------------------
+ Test/V07pcre.ztst  |  13 ++-
+ configure.ac       |  20 ++--
+ 4 files changed, 110 insertions(+), 149 deletions(-)
+
+# diff --git a/ChangeLog b/ChangeLog
+# index f5c77f801..285b73b2c 100644
+# --- a/ChangeLog
+# +++ b/ChangeLog
+# @@ -1,5 +1,8 @@
+#  2023-05-13  Oliver Kiddle  <opk@zsh.org>
+# +    * 51723: Src/Modules/pcre.c, Test/V07pcre.ztst, configure.ac:
+# +    migrate pcre module to pcre2
+# +
+#      * Felipe Contreras: 50612: Misc/vcs_info-examples: fix typo
+#      * github #98: Vidhan Bhatt: Completion/Darwin/Command/_shortcuts:
+--- a/Src/Modules/pcre.c
++++ b/Src/Modules/pcre.c
+@@ -34,11 +34,11 @@
+ #define CPCRE_PLAIN 0
+ /**/
+-#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
+-#include <pcre.h>
++#if defined(HAVE_PCRE2_COMPILE_8) && defined(HAVE_PCRE2_H)
++#define PCRE2_CODE_UNIT_WIDTH 8
++#include <pcre2.h>
+-static pcre *pcre_pattern;
+-static pcre_extra *pcre_hints;
++static pcre2_code *pcre_pattern;
+ /**/
+ static int
+@@ -54,8 +54,8 @@ zpcre_utf8_enabled(void)
+       return 0;
+     if ((have_utf8_pcre == -1) &&
+-      (pcre_config(PCRE_CONFIG_UTF8, &have_utf8_pcre))) {
+-          have_utf8_pcre = -2; /* erk, failed to ask */
++       (pcre2_config(PCRE2_CONFIG_UNICODE, &have_utf8_pcre))) {
++           have_utf8_pcre = -2; /* erk, failed to ask */
+     }
+     return (have_utf8_pcre == 1) && (!strcmp(nl_langinfo(CODESET), "UTF-8"));
+@@ -69,47 +69,38 @@ zpcre_utf8_enabled(void)
+ static int
+ bin_pcre_compile(char *nam, char **args, Options ops, UNUSED(int func))
+ {
+-    int pcre_opts = 0, pcre_errptr, target_len;
+-    const char *pcre_error;
++    uint32_t pcre_opts = 0;
++    int target_len;
++    int pcre_error;
++    PCRE2_SIZE pcre_offset;
+     char *target;
+     
+-    if(OPT_ISSET(ops,'a')) pcre_opts |= PCRE_ANCHORED;
+-    if(OPT_ISSET(ops,'i')) pcre_opts |= PCRE_CASELESS;
+-    if(OPT_ISSET(ops,'m')) pcre_opts |= PCRE_MULTILINE;
+-    if(OPT_ISSET(ops,'x')) pcre_opts |= PCRE_EXTENDED;
+-    if(OPT_ISSET(ops,'s')) pcre_opts |= PCRE_DOTALL;
++    if (OPT_ISSET(ops, 'a')) pcre_opts |= PCRE2_ANCHORED;
++    if (OPT_ISSET(ops, 'i')) pcre_opts |= PCRE2_CASELESS;
++    if (OPT_ISSET(ops, 'm')) pcre_opts |= PCRE2_MULTILINE;
++    if (OPT_ISSET(ops, 'x')) pcre_opts |= PCRE2_EXTENDED;
++    if (OPT_ISSET(ops, 's')) pcre_opts |= PCRE2_DOTALL;
+     
+     if (zpcre_utf8_enabled())
+-      pcre_opts |= PCRE_UTF8;
+-
+-#ifdef HAVE_PCRE_STUDY
+-    if (pcre_hints)
+-#ifdef PCRE_CONFIG_JIT
+-      pcre_free_study(pcre_hints);
+-#else
+-      pcre_free(pcre_hints);
+-#endif
+-    pcre_hints = NULL;
+-#endif
++      pcre_opts |= PCRE2_UTF;
+     if (pcre_pattern)
+-      pcre_free(pcre_pattern);
++      pcre2_code_free(pcre_pattern);
+     pcre_pattern = NULL;
+     target = ztrdup(*args);
+     unmetafy(target, &target_len);
+-    if ((int)strlen(target) != target_len) {
+-      zwarnnam(nam, "embedded NULs in PCRE pattern terminate pattern");
+-    }
+-
+-    pcre_pattern = pcre_compile(target, pcre_opts, &pcre_error, &pcre_errptr, NULL);
++    pcre_pattern = pcre2_compile((PCRE2_SPTR) target, (PCRE2_SIZE) target_len,
++          pcre_opts, &pcre_error, &pcre_offset, NULL);
+     free(target);
+     if (pcre_pattern == NULL)
+     {
+-      zwarnnam(nam, "error in regex: %s", pcre_error);
++      PCRE2_UCHAR buffer[256];
++      pcre2_get_error_message(pcre_error, buffer, sizeof(buffer));
++      zwarnnam(nam, "error in regex: %s", buffer);
+       return 1;
+     }
+     
+@@ -117,67 +108,48 @@ bin_pcre_compile(char *nam, char **args,
+ }
+ /**/
+-#ifdef HAVE_PCRE_STUDY
+-
+-/**/
+ static int
+ bin_pcre_study(char *nam, UNUSED(char **args), UNUSED(Options ops), UNUSED(int func))
+ {
+-    const char *pcre_error;
+-
+     if (pcre_pattern == NULL)
+     {
+       zwarnnam(nam, "no pattern has been compiled for study");
+       return 1;
+     }
+-    
+-    if (pcre_hints)
+-#ifdef PCRE_CONFIG_JIT
+-      pcre_free_study(pcre_hints);
+-#else
+-      pcre_free(pcre_hints);
+-#endif
+-    pcre_hints = NULL;
+-    pcre_hints = pcre_study(pcre_pattern, 0, &pcre_error);
+-    if (pcre_error != NULL)
+-    {
+-      zwarnnam(nam, "error while studying regex: %s", pcre_error);
+-      return 1;
++    int jit = 0;
++    if (!pcre2_config(PCRE2_CONFIG_JIT, &jit) && jit) {
++      if (pcre2_jit_compile(pcre_pattern, PCRE2_JIT_COMPLETE) < 0) {
++          zwarnnam(nam, "error while studying regex");
++          return 1;
++      }
+     }
+     
+     return 0;
+ }
+-/**/
+-#else /* !HAVE_PCRE_STUDY */
+-
+-# define bin_pcre_study bin_notavail
+-
+-/**/
+-#endif /* !HAVE_PCRE_STUDY */
+-
+-/**/
+ static int
+-zpcre_get_substrings(char *arg, int *ovec, int captured_count, char *matchvar,
+-                   char *substravar, int want_offset_pair, int matchedinarr,
+-                   int want_begin_end)
++zpcre_get_substrings(char *arg, pcre2_match_data *mdata, int captured_count,
++      char *matchvar, char *substravar, int want_offset_pair,
++      int matchedinarr, int want_begin_end)
+ {
+-    char **captures, *match_all, **matches;
++    PCRE2_SIZE *ovec;
++    char *match_all, **matches;
+     char offset_all[50];
+     int capture_start = 1;
+     if (matchedinarr) {
+-      /* bash-style captures[0] entire-matched string in the array */
++      /* bash-style ovec[0] entire-matched string in the array */
+       capture_start = 0;
+     }
+-    /* captures[0] will be entire matched string, [1] first substring */
+-    if (!pcre_get_substring_list(arg, ovec, captured_count, (const char ***)&captures)) {
+-      int nelem = arrlen(captures)-1;
++    /* ovec[0] will be entire matched string, [1] first substring */
++    ovec = pcre2_get_ovector_pointer(mdata);
++    if (ovec) {
++      int nelem = captured_count - 1;
+       /* Set to the offsets of the complete match */
+       if (want_offset_pair) {
+-          sprintf(offset_all, "%d %d", ovec[0], ovec[1]);
++          sprintf(offset_all, "%ld %ld", ovec[0], ovec[1]);
+           setsparam("ZPCRE_OP", ztrdup(offset_all));
+       }
+       /*
+@@ -186,7 +158,7 @@ zpcre_get_substrings(char *arg, int *ove
+        * ovec is length 2*(1+capture_list_length)
+        */
+       if (matchvar) {
+-          match_all = metafy(captures[0], ovec[1] - ovec[0], META_DUP);
++          match_all = metafy(arg + ovec[0], ovec[1] - ovec[0], META_DUP);
+           setsparam(matchvar, match_all);
+       }
+       /*
+@@ -201,16 +173,12 @@ zpcre_get_substrings(char *arg, int *ove
+        */
+       if (substravar &&
+           (!want_begin_end || nelem)) {
+-          char **x, **y;
++          char **x;
+           int vec_off, i;
+-          y = &captures[capture_start];
+           matches = x = (char **) zalloc(sizeof(char *) * (captured_count+1-capture_start));
+-          for (i = capture_start; i < captured_count; i++, y++) {
++          for (i = capture_start; i < captured_count; i++) {
+               vec_off = 2*i;
+-              if (*y)
+-                  *x++ = metafy(*y, ovec[vec_off+1]-ovec[vec_off], META_DUP);
+-              else
+-                  *x++ = NULL;
++              *x++ = metafy(arg + ovec[vec_off], ovec[vec_off+1]-ovec[vec_off], META_DUP);
+           }
+           *x = NULL;
+           setaparam(substravar, matches);
+@@ -247,7 +215,8 @@ zpcre_get_substrings(char *arg, int *ove
+           setiparam("MEND", offs + !isset(KSHARRAYS) - 1);
+           if (nelem) {
+               char **mbegin, **mend, **bptr, **eptr;
+-              int i, *ipair;
++              int i;
++              size_t *ipair;
+               bptr = mbegin = zalloc(sizeof(char*)*(nelem+1));
+               eptr = mend = zalloc(sizeof(char*)*(nelem+1));
+@@ -287,8 +256,6 @@ zpcre_get_substrings(char *arg, int *ove
+               setaparam("mend", mend);
+           }
+       }
+-
+-      pcre_free_substring_list((const char **)captures);
+     }
+     return 0;
+@@ -314,7 +281,8 @@ getposint(char *instr, char *nam)
+ static int
+ bin_pcre_match(char *nam, char **args, Options ops, UNUSED(int func))
+ {
+-    int ret, capcount, *ovec, ovecsize, c;
++    int ret, c;
++    pcre2_match_data *pcre_mdata = NULL;
+     char *matched_portion = NULL;
+     char *plaintext = NULL;
+     char *receptacle = NULL;
+@@ -344,36 +312,30 @@ bin_pcre_match(char *nam, char **args, O
+     /* For the entire match, 'Return' the offset byte positions instead of the matched string */
+     if(OPT_ISSET(ops,'b')) want_offset_pair = 1;
+-    if ((ret = pcre_fullinfo(pcre_pattern, pcre_hints, PCRE_INFO_CAPTURECOUNT, &capcount)))
+-    {
+-      zwarnnam(nam, "error %d in fullinfo", ret);
+-      return 1;
+-    }
+-
+-    ovecsize = (capcount+1)*3;
+-    ovec = zalloc(ovecsize*sizeof(int));
+-
+     plaintext = ztrdup(*args);
+     unmetafy(plaintext, &subject_len);
+     if (offset_start > 0 && offset_start >= subject_len)
+-      ret = PCRE_ERROR_NOMATCH;
+-    else
+-      ret = pcre_exec(pcre_pattern, pcre_hints, plaintext, subject_len, offset_start, 0, ovec, ovecsize);
++      ret = PCRE2_ERROR_NOMATCH;
++    else {
++      pcre_mdata = pcre2_match_data_create_from_pattern(pcre_pattern, NULL);
++      ret = pcre2_match(pcre_pattern, (PCRE2_SPTR) plaintext, subject_len,
++              offset_start, 0, pcre_mdata, NULL);
++    }
+     if (ret==0) return_value = 0;
+-    else if (ret==PCRE_ERROR_NOMATCH) /* no match */;
++    else if (ret == PCRE2_ERROR_NOMATCH) /* no match */;
+     else if (ret>0) {
+-      zpcre_get_substrings(plaintext, ovec, ret, matched_portion, receptacle,
++      zpcre_get_substrings(plaintext, pcre_mdata, ret, matched_portion, receptacle,
+                            want_offset_pair, 0, 0);
+       return_value = 0;
+     }
+     else {
+-      zwarnnam(nam, "error in pcre_exec [%d]", ret);
++      zwarnnam(nam, "error in pcre2_match [%d]", ret);
+     }
+     
+-    if (ovec)
+-      zfree(ovec, ovecsize*sizeof(int));
++    if (pcre_mdata)
++      pcre2_match_data_free(pcre_mdata);
+     zsfree(plaintext);
+     return return_value;
+@@ -383,17 +345,19 @@ bin_pcre_match(char *nam, char **args, O
+ static int
+ cond_pcre_match(char **a, int id)
+ {
+-    pcre *pcre_pat;
+-    const char *pcre_err;
++    pcre2_code *pcre_pat = NULL;
++    int pcre_err;
++    PCRE2_SIZE pcre_erroff;
+     char *lhstr, *rhre, *lhstr_plain, *rhre_plain, *avar, *svar;
+-    int r = 0, pcre_opts = 0, pcre_errptr, capcnt, *ov, ovsize;
++    int r = 0, pcre_opts = 0;
++    pcre2_match_data *pcre_mdata = NULL;
+     int lhstr_plain_len, rhre_plain_len;
+     int return_value = 0;
+     if (zpcre_utf8_enabled())
+-      pcre_opts |= PCRE_UTF8;
++      pcre_opts |= PCRE2_UTF;
+     if (isset(REMATCHPCRE) && !isset(CASEMATCH))
+-      pcre_opts |= PCRE_CASELESS;
++      pcre_opts |= PCRE2_CASELESS;
+     lhstr = cond_str(a,0,0);
+     rhre = cond_str(a,1,0);
+@@ -401,9 +365,6 @@ cond_pcre_match(char **a, int id)
+     rhre_plain = ztrdup(rhre);
+     unmetafy(lhstr_plain, &lhstr_plain_len);
+     unmetafy(rhre_plain, &rhre_plain_len);
+-    pcre_pat = NULL;
+-    ov = NULL;
+-    ovsize = 0;
+     if (isset(BASHREMATCH)) {
+       svar = NULL;
+@@ -415,27 +376,27 @@ cond_pcre_match(char **a, int id)
+     switch(id) {
+        case CPCRE_PLAIN:
+-              if ((int)strlen(rhre_plain) != rhre_plain_len) {
+-                  zwarn("embedded NULs in PCRE pattern terminate pattern");
+-              }
+-              pcre_pat = pcre_compile(rhre_plain, pcre_opts, &pcre_err, &pcre_errptr, NULL);
+-              if (pcre_pat == NULL) {
+-                  zwarn("failed to compile regexp /%s/: %s", rhre, pcre_err);
++              if (!(pcre_pat = pcre2_compile((PCRE2_SPTR) rhre_plain,
++                      (PCRE2_SIZE) rhre_plain_len, pcre_opts,
++                      &pcre_err, &pcre_erroff, NULL)))
++              {
++                  PCRE2_UCHAR buffer[256];
++                  pcre2_get_error_message(pcre_err, buffer, sizeof(buffer));
++                  zwarn("failed to compile regexp /%s/: %s", rhre, buffer);
+                   break;
+               }
+-                pcre_fullinfo(pcre_pat, NULL, PCRE_INFO_CAPTURECOUNT, &capcnt);
+-              ovsize = (capcnt+1)*3;
+-              ov = zalloc(ovsize*sizeof(int));
+-              r = pcre_exec(pcre_pat, NULL, lhstr_plain, lhstr_plain_len, 0, 0, ov, ovsize);
+-              /* r < 0 => error; r==0 match but not enough size in ov
++              pcre_mdata = pcre2_match_data_create_from_pattern(pcre_pat, NULL);
++              r = pcre2_match(pcre_pat, (PCRE2_SPTR8) lhstr_plain, lhstr_plain_len,
++                      0, 0, pcre_mdata, NULL);
++              /* r < 0 => error; r==0 match but not enough size in match data
+                * r > 0 => (r-1) substrings found; r==1 => no substrings
+                */
+               if (r==0) {
+-                  zwarn("reportable zsh problem: pcre_exec() returned 0");
++                  zwarn("reportable zsh problem: pcre2_match() returned 0");
+                   return_value = 1;
+                   break;
+               }
+-              else if (r==PCRE_ERROR_NOMATCH) {
++              else if (r == PCRE2_ERROR_NOMATCH) {
+                   return_value = 0; /* no match */
+                   break;
+               }
+@@ -444,7 +405,7 @@ cond_pcre_match(char **a, int id)
+                   break;
+               }
+                 else if (r>0) {
+-                  zpcre_get_substrings(lhstr_plain, ov, r, svar, avar, 0,
++                  zpcre_get_substrings(lhstr_plain, pcre_mdata, r, svar, avar, 0,
+                                        isset(BASHREMATCH),
+                                        !isset(BASHREMATCH));
+                   return_value = 1;
+@@ -457,10 +418,10 @@ cond_pcre_match(char **a, int id)
+       free(lhstr_plain);
+     if(rhre_plain)
+       free(rhre_plain);
++    if (pcre_mdata)
++      pcre2_match_data_free(pcre_mdata);
+     if (pcre_pat)
+-      pcre_free(pcre_pat);
+-    if (ov)
+-      zfree(ov, ovsize*sizeof(int));
++      pcre2_code_free(pcre_pat);
+     return return_value;
+ }
+@@ -489,11 +450,11 @@ static struct builtin bintab[] = {
+ static struct features module_features = {
+     bintab, sizeof(bintab)/sizeof(*bintab),
+-#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
++#if defined(HAVE_PCRE2_COMPILE_8) && defined(HAVE_PCRE2_H)
+     cotab, sizeof(cotab)/sizeof(*cotab),
+-#else /* !(HAVE_PCRE_COMPILE && HAVE_PCRE_EXEC) */
++#else /* !(HAVE_PCRE2_COMPILE_8 && HAVE_PCRE2_H) */
+     NULL, 0,
+-#endif /* !(HAVE_PCRE_COMPILE && HAVE_PCRE_EXEC) */
++#endif /* !(HAVE_PCRE2_COMPILE_8 && HAVE_PCRE2_H) */
+     NULL, 0,
+     NULL, 0,
+     0
+@@ -540,19 +501,9 @@ cleanup_(Module m)
+ int
+ finish_(UNUSED(Module m))
+ {
+-#if defined(HAVE_PCRE_COMPILE) && defined(HAVE_PCRE_EXEC)
+-#ifdef HAVE_PCRE_STUDY
+-    if (pcre_hints)
+-#ifdef PCRE_CONFIG_JIT
+-      pcre_free_study(pcre_hints);
+-#else
+-      pcre_free(pcre_hints);
+-#endif
+-    pcre_hints = NULL;
+-#endif
+-
++#if defined(HAVE_PCRE2_COMPILE_8) && defined(HAVE_PCRE2_H)
+     if (pcre_pattern)
+-      pcre_free(pcre_pattern);
++      pcre2_code_free(pcre_pattern);
+     pcre_pattern = NULL;
+ #endif
+--- a/Test/V07pcre.ztst
++++ b/Test/V07pcre.ztst
+@@ -129,12 +129,17 @@
+ >78884; ZPCRE_OP: 25 30
+ >90210; ZPCRE_OP: 31 36
+-# Embedded NULs allowed in plaintext, but not in RE (although \0 as two-chars allowed)
++# Embedded NULs allowed in plaintext, in RE, pcre supports \0 as two-chars
+   [[ $'a\0bc\0d' =~ '^(a\0.)(.+)$' ]]
+   print "${#MATCH}; ${#match[1]}; ${#match[2]}"
+ 0:ensure ASCII NUL passes in and out of matched plaintext
+ >6; 3; 3
++# PCRE2 supports NULs also in the RE
++  [[ $'a\0b\0c' =~ $'^(.\0)+' ]] && print "${#MATCH}; ${#match[1]}"
++0:ensure ASCII NUL works also in the regex
++>4; 2
++
+ # Ensure the long-form infix operator works
+   [[ foo -pcre-match ^f..$ ]]
+   print $?
+@@ -181,7 +186,11 @@
+   [[ é =~ '^..\z' ]]; echo $?
+   LANG=$LANG_SAVE
+   [[ é =~ '^.\z' ]]; echo $?
+-0:swich between C/UTF-8 locales
++0:switch between C/UTF-8 locales
+ >0
+ >0
+ >0
++
++  [[ abc =~ 'a(d*)bc' ]] && print "$#MATCH; $#match; ${#match[1]}"
++0:empty capture
++>3; 1; 0
+--- a/configure.ac
++++ b/configure.ac
+@@ -438,7 +438,7 @@ fi],
+ dnl Do you want to look for pcre support?
+ AC_ARG_ENABLE(pcre,
+-AS_HELP_STRING([--enable-pcre],[enable the search for the pcre library (may create run-time library dependencies)]))
++AS_HELP_STRING([--enable-pcre],[enable the search for the pcre2 library (may create run-time library dependencies)]))
+ dnl Do you want to look for capability support?
+ AC_ARG_ENABLE(cap,
+@@ -662,13 +662,12 @@ AC_HEADER_SYS_WAIT
+ oldcflags="$CFLAGS"
+ if test x$enable_pcre = xyes; then
+-AC_CHECK_PROG([PCRECONF], pcre-config, pcre-config)
+-dnl Typically (meaning on this single RedHat 9 box in front of me)
+-dnl pcre-config --cflags produces a -I output which needs to go into
++AC_CHECK_PROG([PCRECONF], pcre2-config, pcre2-config)
++dnl pcre2-config --cflags may produce a -I output which needs to go into
+ dnl CPPFLAGS else configure's preprocessor tests don't pick it up,
+ dnl producing a warning.
+-if test "x$ac_cv_prog_PCRECONF" = xpcre-config; then
+-  CPPFLAGS="$CPPFLAGS `pcre-config --cflags`"
++if test "x$ac_cv_prog_PCRECONF" = xpcre2-config; then
++  CPPFLAGS="$CPPFLAGS `pcre2-config --cflags`"
+ fi
+ fi
+@@ -678,9 +677,10 @@ AC_CHECK_HEADERS(sys/time.h sys/times.h
+                locale.h errno.h stdio.h stdarg.h varargs.h stdlib.h \
+                unistd.h sys/capability.h \
+                utmp.h utmpx.h sys/types.h pwd.h grp.h poll.h sys/mman.h \
+-               netinet/in_systm.h pcre.h langinfo.h wchar.h stddef.h \
++               netinet/in_systm.h langinfo.h wchar.h stddef.h \
+                sys/stropts.h iconv.h ncurses.h ncursesw/ncurses.h \
+                ncurses/ncurses.h)
++AC_CHECK_HEADERS([pcre2.h],,,[#define PCRE2_CODE_UNIT_WIDTH 8])
+ if test x$dynamic = xyes; then
+   AC_CHECK_HEADERS(dlfcn.h)
+   AC_CHECK_HEADERS(dl.h)
+@@ -958,9 +958,7 @@ if test "x$ac_found_iconv" = "xyes"; the
+ fi
+ if test x$enable_pcre = xyes; then
+-dnl pcre-config should probably be employed here
+-dnl AC_SEARCH_LIBS(pcre_compile, pcre)
+-  LIBS="`$ac_cv_prog_PCRECONF --libs` $LIBS"
++  LIBS="`$ac_cv_prog_PCRECONF --libs8` $LIBS"
+ fi
+ dnl ---------------------
+@@ -1323,7 +1321,7 @@ AC_CHECK_FUNCS(strftime strptime mktime
+              pathconf sysconf \
+              tgetent tigetflag tigetnum tigetstr setupterm initscr resize_term \
+              getcchar setcchar waddwstr wget_wch win_wch use_default_colors \
+-             pcre_compile pcre_study pcre_exec \
++             pcre2_compile_8 \
+              nl_langinfo \
+              erand48 open_memstream \
+              posix_openpt \
diff --git a/package/utils/zsh/patches/003-51728-assign-pcre-named-capture-groups-to-a-hash.patch b/package/utils/zsh/patches/003-51728-assign-pcre-named-capture-groups-to-a-hash.patch
new file mode 100644 (file)
index 0000000..4b59218
--- /dev/null
@@ -0,0 +1,180 @@
+From f3f371deb376478176866fd770fbcf9bc0d0609f Mon Sep 17 00:00:00 2001
+From: Oliver Kiddle <opk@zsh.org>
+Date: Sat, 13 May 2023 00:56:48 +0200
+Subject: [PATCH] 51728: assign pcre named capture groups to a hash
+
+---
+ ChangeLog           |  3 +++
+ Doc/Zsh/mod_pcre.yo | 10 ++++++----
+ Src/Modules/pcre.c  | 43 +++++++++++++++++++++++++++++++++----------
+ Test/V07pcre.ztst   | 14 ++++++++++++++
+ 4 files changed, 56 insertions(+), 14 deletions(-)
+
+# diff --git a/ChangeLog b/ChangeLog
+# index 285b73b2c..2835a9405 100644
+# --- a/ChangeLog
+# +++ b/ChangeLog
+# @@ -1,5 +1,8 @@
+#  2023-05-13  Oliver Kiddle  <opk@zsh.org>
+# +    * 51728: Doc/Zsh/mod_pcre.yo, Src/Modules/pcre.c,
+# +    Test/V07pcre.ztst: assign pcre named capture groups to a hash
+# +
+#      * 51723: Src/Modules/pcre.c, Test/V07pcre.ztst, configure.ac:
+#      migrate pcre module to pcre2
+--- a/Doc/Zsh/mod_pcre.yo
++++ b/Doc/Zsh/mod_pcre.yo
+@@ -20,12 +20,12 @@ including those that indicate newline.
+ )
+ findex(pcre_study)
+ item(tt(pcre_study))(
+-Studies the previously-compiled PCRE which may result in faster
+-matching.
++Requests JIT compilation for the previously-compiled PCRE which
++may result in faster matching.
+ )
+ findex(pcre_match)
+ item(tt(pcre_match) [ tt(-v) var(var) ] [ tt(-a) var(arr) ] \
+-[ tt(-n) var(offset) ] [ tt(-b) ] var(string))(
++[ tt(-A) var(assoc) ] [ tt(-n) var(offset) ] [ tt(-b) ] var(string))(
+ Returns successfully if tt(string) matches the previously-compiled
+ PCRE.
+@@ -36,7 +36,9 @@ substrings, unless the tt(-a) option is
+ case it will set the array var(arr).  Similarly, the variable
+ tt(MATCH) will be set to the entire matched portion of the
+ string, unless the tt(-v) option is given, in which case the variable
+-var(var) will be set.
++var(var) will be set. Furthermore, any named captures will
++be stored in the associative array tt(.pcre.match) unless an
++alternative is given with tt(-A).
+ No variables are altered if there is no successful match.
+ A tt(-n) option starts searching for a match from the
+ byte var(offset) position in var(string).  If the tt(-b) option is given,
+--- a/Src/Modules/pcre.c
++++ b/Src/Modules/pcre.c
+@@ -129,14 +129,17 @@ bin_pcre_study(char *nam, UNUSED(char **
+ }
+ static int
+-zpcre_get_substrings(char *arg, pcre2_match_data *mdata, int captured_count,
+-      char *matchvar, char *substravar, int want_offset_pair,
+-      int matchedinarr, int want_begin_end)
++zpcre_get_substrings(pcre2_code *pat, char *arg, pcre2_match_data *mdata,
++      int captured_count, char *matchvar, char *substravar, char *namedassoc,
++      int want_offset_pair, int matchedinarr, int want_begin_end)
+ {
+     PCRE2_SIZE *ovec;
+     char *match_all, **matches;
+     char offset_all[50];
+     int capture_start = 1;
++    int vec_off;
++    PCRE2_SPTR ntable; /* table of named captures */
++    uint32_t ncount, nsize;
+     if (matchedinarr) {
+       /* bash-style ovec[0] entire-matched string in the array */
+@@ -174,7 +177,7 @@ zpcre_get_substrings(char *arg, pcre2_ma
+       if (substravar &&
+           (!want_begin_end || nelem)) {
+           char **x;
+-          int vec_off, i;
++          int i;
+           matches = x = (char **) zalloc(sizeof(char *) * (captured_count+1-capture_start));
+           for (i = capture_start; i < captured_count; i++) {
+               vec_off = 2*i;
+@@ -184,6 +187,23 @@ zpcre_get_substrings(char *arg, pcre2_ma
+           setaparam(substravar, matches);
+       }
++      if (!pcre2_pattern_info(pat, PCRE2_INFO_NAMECOUNT, &ncount) && ncount
++              && !pcre2_pattern_info(pat, PCRE2_INFO_NAMEENTRYSIZE, &nsize)
++              && !pcre2_pattern_info(pat, PCRE2_INFO_NAMETABLE, &ntable))
++      {
++          char **hash, **hashptr;
++          uint32_t nidx;
++          hashptr = hash = (char **)zshcalloc((ncount+1)*2*sizeof(char *));
++          for (nidx = 0; nidx < ncount; nidx++) {
++              vec_off = (ntable[nsize * nidx] << 9) + 2 * ntable[nsize * nidx + 1];
++              /* would metafy the key but pcre limits characters in the name */
++              *hashptr++ = ztrdup((char *) ntable + nsize * nidx + 2);
++              *hashptr++ = metafy(arg + ovec[vec_off],
++                      ovec[vec_off+1]-ovec[vec_off], META_DUP);
++          }
++          sethparam(namedassoc, hash);
++      }
++
+       if (want_begin_end) {
+           /*
+            * cond-infix rather than builtin; also not bash; so we set a bunch
+@@ -286,6 +306,7 @@ bin_pcre_match(char *nam, char **args, O
+     char *matched_portion = NULL;
+     char *plaintext = NULL;
+     char *receptacle = NULL;
++    char *named = ".pcre.match";
+     int return_value = 1;
+     /* The subject length and offset start are both int values in pcre_exec */
+     int subject_len;
+@@ -305,6 +326,9 @@ bin_pcre_match(char *nam, char **args, O
+     if(OPT_HASARG(ops,c='v')) {
+       matched_portion = OPT_ARG(ops,c);
+     }
++    if (OPT_HASARG(ops, c='A')) {
++      named = OPT_ARG(ops, c);
++    }
+     if(OPT_HASARG(ops,c='n')) { /* The offset position to start the search, in bytes. */
+       if ((offset_start = getposint(OPT_ARG(ops,c), nam)) < 0)
+           return 1;
+@@ -326,8 +350,8 @@ bin_pcre_match(char *nam, char **args, O
+     if (ret==0) return_value = 0;
+     else if (ret == PCRE2_ERROR_NOMATCH) /* no match */;
+     else if (ret>0) {
+-      zpcre_get_substrings(plaintext, pcre_mdata, ret, matched_portion, receptacle,
+-                           want_offset_pair, 0, 0);
++      zpcre_get_substrings(pcre_pattern, plaintext, pcre_mdata, ret, matched_portion,
++              receptacle, named, want_offset_pair, 0, 0);
+       return_value = 0;
+     }
+     else {
+@@ -405,9 +429,8 @@ cond_pcre_match(char **a, int id)
+                   break;
+               }
+                 else if (r>0) {
+-                  zpcre_get_substrings(lhstr_plain, pcre_mdata, r, svar, avar, 0,
+-                                       isset(BASHREMATCH),
+-                                       !isset(BASHREMATCH));
++                  zpcre_get_substrings(pcre_pat, lhstr_plain, pcre_mdata, r, svar, avar,
++                          ".pcre.match", 0, isset(BASHREMATCH), !isset(BASHREMATCH));
+                   return_value = 1;
+                   break;
+               }
+@@ -443,7 +466,7 @@ static struct conddef cotab[] = {
+ static struct builtin bintab[] = {
+     BUILTIN("pcre_compile", 0, bin_pcre_compile, 1, 1, 0, "aimxs",  NULL),
+-    BUILTIN("pcre_match",   0, bin_pcre_match,   1, 1, 0, "a:v:n:b",    NULL),
++    BUILTIN("pcre_match",   0, bin_pcre_match,   1, 1, 0, "A:a:v:n:b",    NULL),
+     BUILTIN("pcre_study",   0, bin_pcre_study,   0, 0, 0, NULL,    NULL)
+ };
+--- a/Test/V07pcre.ztst
++++ b/Test/V07pcre.ztst
+@@ -194,3 +194,17 @@
+   [[ abc =~ 'a(d*)bc' ]] && print "$#MATCH; $#match; ${#match[1]}"
+ 0:empty capture
+ >3; 1; 0
++
++  [[ category/name-12345 =~ '(?x)^
++    (?<category> [^/]* ) /
++    (?<package>
++      (?<name> \w+ ) -
++      (?<version> \d+ ))$' ]]
++  typeset -p1 .pcre.match
++0:named captures
++>typeset -g -A .pcre.match=(
++>  [category]=category
++>  [name]=name
++>  [package]=name-12345
++>  [version]=12345
++>)
diff --git a/package/utils/zsh/patches/004-51738-support-pcre-s-alternative-DFA-matching-algori.patch b/package/utils/zsh/patches/004-51738-support-pcre-s-alternative-DFA-matching-algori.patch
new file mode 100644 (file)
index 0000000..8e06745
--- /dev/null
@@ -0,0 +1,156 @@
+From b4d1c756f50909b4a13e5c8fe5f26f71e9d54f63 Mon Sep 17 00:00:00 2001
+From: Oliver Kiddle <opk@zsh.org>
+Date: Sat, 13 May 2023 00:59:00 +0200
+Subject: [PATCH] 51738: support pcre's alternative DFA matching algorithm
+
+---
+ ChangeLog           |  3 +++
+ Doc/Zsh/mod_pcre.yo |  6 ++++-
+ Src/Modules/pcre.c  | 53 ++++++++++++++++++++++++++++++---------------
+ Test/V07pcre.ztst   |  5 +++++
+ 4 files changed, 49 insertions(+), 18 deletions(-)
+
+# diff --git a/ChangeLog b/ChangeLog
+# index 2835a9405..18bc4a698 100644
+# --- a/ChangeLog
+# +++ b/ChangeLog
+# @@ -1,5 +1,8 @@
+#  2023-05-13  Oliver Kiddle  <opk@zsh.org>
+# +    * 51738: Doc/Zsh/mod_pcre.yo, Src/Modules/pcre.c,
+# +    Test/V07pcre.ztst: support pcre's DFA matching algorithm
+# +
+#      * 51728: Doc/Zsh/mod_pcre.yo, Src/Modules/pcre.c,
+#      Test/V07pcre.ztst: assign pcre named capture groups to a hash
+--- a/Doc/Zsh/mod_pcre.yo
++++ b/Doc/Zsh/mod_pcre.yo
+@@ -25,7 +25,7 @@ may result in faster matching.
+ )
+ findex(pcre_match)
+ item(tt(pcre_match) [ tt(-v) var(var) ] [ tt(-a) var(arr) ] \
+-[ tt(-A) var(assoc) ] [ tt(-n) var(offset) ] [ tt(-b) ] var(string))(
++[ tt(-A) var(assoc) ] [ tt(-n) var(offset) ] [ tt(-bd) ] var(string))(
+ Returns successfully if tt(string) matches the previously-compiled
+ PCRE.
+@@ -69,6 +69,10 @@ print -l $accum)
+ )
+ enditem()
++The option tt(-d) uses the alternative breadth-first DFA search algorithm of
++pcre. This sets tt(match), or the array given with tt(-a), to all the matches
++found from the same start point in the subject.
++
+ The tt(zsh/pcre) module makes available the following test condition:
+ startitem()
+--- a/Src/Modules/pcre.c
++++ b/Src/Modules/pcre.c
+@@ -305,30 +305,29 @@ bin_pcre_match(char *nam, char **args, O
+     pcre2_match_data *pcre_mdata = NULL;
+     char *matched_portion = NULL;
+     char *plaintext = NULL;
+-    char *receptacle = NULL;
+-    char *named = ".pcre.match";
++    char *receptacle;
++    char *named = NULL;
+     int return_value = 1;
+     /* The subject length and offset start are both int values in pcre_exec */
+     int subject_len;
+     int offset_start = 0;
+     int want_offset_pair = 0;
++    int use_dfa = 0;
+     if (pcre_pattern == NULL) {
+       zwarnnam(nam, "no pattern has been compiled");
+       return 1;
+     }
+-    matched_portion = "MATCH";
+-    receptacle = "match";
+-    if(OPT_HASARG(ops,c='a')) {
+-      receptacle = OPT_ARG(ops,c);
+-    }
+-    if(OPT_HASARG(ops,c='v')) {
+-      matched_portion = OPT_ARG(ops,c);
+-    }
+-    if (OPT_HASARG(ops, c='A')) {
+-      named = OPT_ARG(ops, c);
++    if (!(use_dfa = OPT_ISSET(ops, 'd'))) {
++      matched_portion = OPT_HASARG(ops, c='v') ? OPT_ARG(ops, c) : "MATCH";
++      named = OPT_HASARG(ops, c='A') ? OPT_ARG(ops, c) : ".pcre.match";
++    } else if (OPT_HASARG(ops, c='v') || OPT_HASARG(ops, c='A')) {
++      zwarnnam(nam, "-d cannot be combined with -%c", c);
++      return 1;
+     }
++    receptacle = OPT_HASARG(ops, 'a') ? OPT_ARG(ops, 'a') : "match";
++
+     if(OPT_HASARG(ops,c='n')) { /* The offset position to start the search, in bytes. */
+       if ((offset_start = getposint(OPT_ARG(ops,c), nam)) < 0)
+           return 1;
+@@ -341,7 +340,25 @@ bin_pcre_match(char *nam, char **args, O
+     if (offset_start > 0 && offset_start >= subject_len)
+       ret = PCRE2_ERROR_NOMATCH;
+-    else {
++    else if (use_dfa) {
++      PCRE2_SIZE old, wscount = 128, capcount = 128;
++      void *workspace = zhalloc(sizeof(int) * wscount);
++      pcre_mdata = pcre2_match_data_create(capcount, NULL);
++      do {
++          ret = pcre2_dfa_match(pcre_pattern, (PCRE2_SPTR) plaintext, subject_len,
++              offset_start, 0, pcre_mdata, NULL, (int *) workspace, wscount);
++          if (ret == PCRE2_ERROR_DFA_WSSIZE) {
++              old = wscount;
++              wscount += wscount / 2;
++              workspace = hrealloc(workspace, sizeof(int) * old, sizeof(int) * wscount);
++          } else if (ret == 0) {
++              capcount += capcount / 2;
++              pcre2_match_data_free(pcre_mdata);
++              pcre_mdata = pcre2_match_data_create(capcount, NULL);
++          } else
++              break;
++      } while(1);
++    } else {
+       pcre_mdata = pcre2_match_data_create_from_pattern(pcre_pattern, NULL);
+       ret = pcre2_match(pcre_pattern, (PCRE2_SPTR) plaintext, subject_len,
+               offset_start, 0, pcre_mdata, NULL);
+@@ -350,12 +367,14 @@ bin_pcre_match(char *nam, char **args, O
+     if (ret==0) return_value = 0;
+     else if (ret == PCRE2_ERROR_NOMATCH) /* no match */;
+     else if (ret>0) {
+-      zpcre_get_substrings(pcre_pattern, plaintext, pcre_mdata, ret, matched_portion,
+-              receptacle, named, want_offset_pair, 0, 0);
++      zpcre_get_substrings(pcre_pattern, plaintext, pcre_mdata, ret,
++              matched_portion, receptacle, named, want_offset_pair, use_dfa, 0);
+       return_value = 0;
+     }
+     else {
+-      zwarnnam(nam, "error in pcre2_match [%d]", ret);
++      PCRE2_UCHAR buffer[256];
++      pcre2_get_error_message(ret, buffer, sizeof(buffer));
++      zwarnnam(nam, "error in pcre matching for /%s/: %s", plaintext, buffer);
+     }
+     
+     if (pcre_mdata)
+@@ -466,7 +485,7 @@ static struct conddef cotab[] = {
+ static struct builtin bintab[] = {
+     BUILTIN("pcre_compile", 0, bin_pcre_compile, 1, 1, 0, "aimxs",  NULL),
+-    BUILTIN("pcre_match",   0, bin_pcre_match,   1, 1, 0, "A:a:v:n:b",    NULL),
++    BUILTIN("pcre_match",   0, bin_pcre_match,   1, 1, 0, "A:a:v:n:bd",    NULL),
+     BUILTIN("pcre_study",   0, bin_pcre_study,   0, 0, 0, NULL,    NULL)
+ };
+--- a/Test/V07pcre.ztst
++++ b/Test/V07pcre.ztst
+@@ -208,3 +208,8 @@
+ >  [package]=name-12345
+ >  [version]=12345
+ >)
++
++  pcre_compile 'cat(er(pillar)?)?'
++  pcre_match -d 'the caterpillar catchment' && print $match
++0:pcre_match -d
++>caterpillar cater cat
diff --git a/package/utils/zsh/patches/005-51877-do-not-build-pcre-module-if-pcre2-config-is-no.patch b/package/utils/zsh/patches/005-51877-do-not-build-pcre-module-if-pcre2-config-is-no.patch
new file mode 100644 (file)
index 0000000..81632e7
--- /dev/null
@@ -0,0 +1,111 @@
+From 10bdbd8b5b0b43445aff23dcd412f25cf6aa328a Mon Sep 17 00:00:00 2001
+From: Jun-ichi Takimoto <takimoto-j@kba.biglobe.ne.jp>
+Date: Tue, 20 Jun 2023 18:14:27 +0900
+Subject: [PATCH] 51877: do not build pcre module if pcre2-config is not found
+
+---
+ ChangeLog            |  5 +++++
+ Src/Modules/pcre.mdd |  2 +-
+ configure.ac         | 31 +++++++++++++++++++------------
+ 3 files changed, 25 insertions(+), 13 deletions(-)
+
+# diff --git a/ChangeLog b/ChangeLog
+# index 14349dcf2..e89ffee1b 100644
+# --- a/ChangeLog
+# +++ b/ChangeLog
+# @@ -1,3 +1,8 @@
+# +2023-06-20  Jun-ichi Takimoto  <takimoto-j@kba.biglobe.ne.jp>
+# +
+# +    * 51877: Src/Modules/pcre.mdd, configure.ac: do not build pcre
+# +    module if pcre2-config is not available.
+# +
+#  2023-06-19  Jun-ichi Takimoto  <takimoto-j@kba.biglobe.ne.jp>
+#      * 51862: Doc/Makefile.in, configure.ac: support texinfo-7.0
+--- a/Src/Modules/pcre.mdd
++++ b/Src/Modules/pcre.mdd
+@@ -1,5 +1,5 @@
+ name=zsh/pcre
+-link=`if test x$enable_pcre = xyes && (pcre-config --version >/dev/null 2>/dev/null); then echo dynamic; else echo no; fi`
++link=`if test x$enable_pcre = xyes; then echo dynamic; else echo no; fi`
+ load=no
+ autofeatures="b:pcre_compile b:pcre_study b:pcre_match"
+--- a/configure.ac
++++ b/configure.ac
+@@ -440,6 +440,17 @@ dnl Do you want to look for pcre support
+ AC_ARG_ENABLE(pcre,
+ AS_HELP_STRING([--enable-pcre],[enable the search for the pcre2 library (may create run-time library dependencies)]))
++AC_ARG_VAR(PCRE_CONFIG, [pathname of pcre2-config if it is not in PATH])
++if test "x$enable_pcre" = xyes; then
++  AC_CHECK_PROG([PCRE_CONFIG], pcre2-config, pcre2-config)
++  if test "x$PCRE_CONFIG" = x; then
++    enable_pcre=no
++    AC_MSG_WARN([pcre2-config not found: pcre module is disabled.])
++    AC_MSG_NOTICE(
++      [Set PCRE_CONFIG to pathname of pcre2-config if it is not in PATH.])
++  fi
++fi
++
+ dnl Do you want to look for capability support?
+ AC_ARG_ENABLE(cap,
+ AS_HELP_STRING([--enable-cap],[enable the search for POSIX capabilities (may require additional headers to be added by hand)]))
+@@ -660,15 +671,12 @@ AC_HEADER_DIRENT
+ AC_HEADER_STAT
+ AC_HEADER_SYS_WAIT
+-oldcflags="$CFLAGS"
+-if test x$enable_pcre = xyes; then
+-AC_CHECK_PROG([PCRECONF], pcre2-config, pcre2-config)
+ dnl pcre2-config --cflags may produce a -I output which needs to go into
+ dnl CPPFLAGS else configure's preprocessor tests don't pick it up,
+ dnl producing a warning.
+-if test "x$ac_cv_prog_PCRECONF" = xpcre2-config; then
+-  CPPFLAGS="$CPPFLAGS `pcre2-config --cflags`"
+-fi
++if test "x$enable_pcre" = xyes; then
++  CPPFLAGS="`$PCRE_CONFIG --cflags` $CPPFLAGS"
++  AC_CHECK_HEADERS([pcre2.h],,,[#define PCRE2_CODE_UNIT_WIDTH 8])
+ fi
+ AC_CHECK_HEADERS(sys/time.h sys/times.h sys/select.h termcap.h termio.h \
+@@ -680,7 +688,6 @@ AC_CHECK_HEADERS(sys/time.h sys/times.h
+                netinet/in_systm.h langinfo.h wchar.h stddef.h \
+                sys/stropts.h iconv.h ncurses.h ncursesw/ncurses.h \
+                ncurses/ncurses.h)
+-AC_CHECK_HEADERS([pcre2.h],,,[#define PCRE2_CODE_UNIT_WIDTH 8])
+ if test x$dynamic = xyes; then
+   AC_CHECK_HEADERS(dlfcn.h)
+   AC_CHECK_HEADERS(dl.h)
+@@ -957,10 +964,6 @@ if test "x$ac_found_iconv" = "xyes"; the
+     [Define as const if the declaration of iconv() needs const.])
+ fi
+-if test x$enable_pcre = xyes; then
+-  LIBS="`$ac_cv_prog_PCRECONF --libs8` $LIBS"
+-fi
+-
+ dnl ---------------------
+ dnl CHECK TERMCAP LIBRARY
+ dnl ---------------------
+@@ -1321,7 +1324,6 @@ AC_CHECK_FUNCS(strftime strptime mktime
+              pathconf sysconf \
+              tgetent tigetflag tigetnum tigetstr setupterm initscr resize_term \
+              getcchar setcchar waddwstr wget_wch win_wch use_default_colors \
+-             pcre2_compile_8 \
+              nl_langinfo \
+              erand48 open_memstream \
+              posix_openpt \
+@@ -1376,6 +1378,11 @@ if test x$zsh_cv_func_realpath_accepts_n
+   AC_DEFINE(REALPATH_ACCEPTS_NULL)
+ fi
++if test x$enable_pcre = xyes; then
++  LIBS="`$PCRE_CONFIG --libs8` $LIBS"
++  AC_CHECK_FUNCS(pcre2_compile_8)
++fi
++
+ if test x$enable_cap = xyes; then
+   AC_CHECK_FUNCS(cap_get_proc)
+ fi