From 83cd8323f0e34abbb83a1dc79229ac5c0ad93c28 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 29 Sep 2026 21:45:00 +0800 Subject: [PATCH] =?UTF-8?q?=E2=9B=85=20Sync=202026-09-29=2021:45:00?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../po/templates/homeproxy-pro-pro.pot | 3392 ----------------- .../uci-defaults/luci-homeproxy-pro-migration | 5 - .../luci/menu.d/luci-app-homeproxy-pro.json | 45 - .../tests/ucode/test_migrate_config.uc | 144 - .../.gitignore | 2 +- .../LICENSE | 0 .../Makefile | 24 +- .../README.md | 30 +- .../luci-static/resources/homeproxy-pro.js | 26 +- .../resources/view/homeproxy-pro/client.js | 30 +- .../view/homeproxy-pro/client/access.js | 28 +- .../view/homeproxy-pro/client/common.js | 18 +- .../view/homeproxy-pro/client/dns.js | 10 +- .../view/homeproxy-pro/client/nodes.js | 32 +- .../view/homeproxy-pro/client/routing.js | 20 +- .../view/homeproxy-pro/client/subscription.js | 14 +- .../view/homeproxy-pro/client/tun_dns.js | 0 .../view/homeproxy-pro/client/udp_nat.js | 0 .../resources/view/homeproxy-pro/node.js | 68 +- .../resources/view/homeproxy-pro/server.js | 32 +- .../resources/view/homeproxy-pro/status.js | 20 +- .../po/templates/homeproxy-pro.pot | 3392 +++++++++++++++++ .../po/zh-cn | 0 .../po/zh_Hans/homeproxy-pro.po | 1978 +++++----- .../root/etc/capabilities/homeproxy-pro.json | 0 .../root/etc/config/homeproxy-pro | 16 +- .../etc/homeproxy-pro/resources/china_ip4.txt | 0 .../etc/homeproxy-pro/resources/china_ip4.ver | 0 .../etc/homeproxy-pro/resources/china_ip6.txt | 0 .../etc/homeproxy-pro/resources/china_ip6.ver | 0 .../homeproxy-pro/resources/china_list.txt | 0 .../homeproxy-pro/resources/china_list.ver | 0 .../etc/homeproxy-pro/resources/gfw_list.txt | 0 .../etc/homeproxy-pro/resources/gfw_list.ver | 0 .../etc/homeproxy-pro/scripts/clean_log.sh | 2 +- .../homeproxy-pro/scripts/config/adapter.uc | 2 +- .../homeproxy-pro/scripts/config/loader.uc | 6 +- .../etc/homeproxy-pro/scripts/config/model.uc | 2 +- .../homeproxy-pro/scripts/firewall_post.ut | 10 +- .../etc/homeproxy-pro/scripts/firewall_pre.uc | 4 +- .../homeproxy-pro/scripts/firewall_utils.uc | 8 +- .../etc/homeproxy-pro/scripts/fw4_names.sh | 6 +- .../homeproxy-pro/scripts/generate_client.uc | 4 +- .../homeproxy-pro/scripts/generate_server.uc | 2 +- .../homeproxy-pro/scripts/generator/client.uc | 2 +- .../homeproxy-pro/scripts/generator/common.uc | 10 +- .../scripts/generator/context.uc | 8 +- .../homeproxy-pro/scripts/generator/dns.uc | 2 +- .../scripts/generator/inbound.uc | 2 +- .../scripts/generator/outbound.uc | 6 +- .../homeproxy-pro/scripts/generator/route.uc | 2 +- .../scripts/generator/ruleset.uc | 8 +- .../homeproxy-pro/scripts/generator/server.uc | 2 +- .../homeproxy-pro/scripts/homeproxy-pro.uc | 28 +- .../homeproxy-pro/scripts/migrate_config.uc | 6 +- .../homeproxy-pro/scripts/parser/flatten.uc | 0 .../homeproxy-pro/scripts/parser/mapping.uc | 0 .../homeproxy-pro/scripts/parser/normalize.uc | 0 .../homeproxy-pro/scripts/parser/protocols.uc | 2 +- .../etc/homeproxy-pro/scripts/parser/uri.uc | 2 +- .../homeproxy-pro/scripts/parser/validator.uc | 2 +- .../scripts/resource_blob_sha.uc | 0 .../homeproxy-pro/scripts/runtime/config.sh | 12 +- .../etc/homeproxy-pro/scripts/runtime/dns.sh | 22 +- .../homeproxy-pro/scripts/runtime/firewall.sh | 16 +- .../homeproxy-pro/scripts/runtime/health.sh | 8 +- .../etc/homeproxy-pro/scripts/runtime/net.sh | 8 +- .../homeproxy-pro/scripts/runtime/service.sh | 24 +- .../scripts/subscription/decoder.uc | 4 +- .../scripts/subscription/fetcher.uc | 6 +- .../scripts/subscription/filter.uc | 2 +- .../scripts/subscription/repository.uc | 4 +- .../etc/homeproxy-pro/scripts/update_crond.sh | 2 +- .../homeproxy-pro/scripts/update_resources.sh | 4 +- .../scripts/update_subscriptions.uc | 22 +- .../root/etc/init.d/homeproxy-pro | 12 +- .../root/etc/uci-defaults/luci-homeproxy-pro | 8 +- .../uci-defaults/luci-homeproxy-pro-migration | 5 + .../luci/menu.d/luci-app-homeproxy-pro.json | 45 + .../rpcd/acl.d/luci-app-homeproxy-pro.json | 18 +- .../usr/share/rpcd/ucode/luci.homeproxy-pro | 22 +- .../tests/README.md | 44 +- .../tests/arch-guard.sh | 134 +- .../tests/fixtures/generators/client.uci | 4 +- .../tests/fixtures/generators/custom.uci | 6 +- .../tests/fixtures/generators/direct_main.uci | 4 +- .../tests/fixtures/generators/domain.uci | 16 +- .../tests/fixtures/generators/outbounds.uci | 6 +- .../fixtures/generators/partial_invalid.uci | 4 +- .../tests/fixtures/generators/redirect.uci | 4 +- .../tests/fixtures/generators/server.uci | 2 +- .../tests/fixtures/generators/wireguard.uci | 4 +- .../tests/fixtures/runtime/trace.golden.txt | 838 ++-- .../tests/fixtures/runtime/trace.pre-pr05.txt | 192 +- .../tests/frontend-certificate-upload.js | 12 +- .../tests/frontend-md5.js | 6 +- .../tests/frontend-protocol-inventory.js | 8 +- .../tests/frontend-rpc-fallbacks.js | 2 +- .../tests/frontend-rpc-inventory.js | 28 +- .../tests/frontend-title-escaping.js | 6 +- .../tests/frontend-validators.js | 8 +- .../tests/frontend-view-wiring.js | 26 +- .../tests/i18n-coverage.py | 8 +- .../tests/i18n-ignore.txt | 0 .../tests/json-assets.js | 14 +- .../tests/lib/luci-module.js | 0 .../tests/luci-form-snapshot.js | 30 +- .../tests/print-stats.sh | 0 .../tests/run.sh | 4 +- .../tests/runtime/test_config_transaction.sh | 50 +- .../tests/runtime/test_crontab_perms.sh | 6 +- .../tests/runtime/test_dns_snippets.sh | 6 +- .../tests/runtime/test_health_probe.sh | 2 +- .../tests/runtime/test_resource_update.sh | 22 +- .../tests/runtime/test_runtime_extraction.sh | 64 +- .../tests/snapshots/client.json | 56 +- .../tests/snapshots/generator/inbounds.json | 0 .../tests/snapshots/generator/outbounds.json | 2 +- .../tests/snapshots/node.json | 12 +- .../tests/snapshots/server.json | 14 +- .../tests/toolchain/build-ucode-linux.sh | 2 +- .../tests/toolchain/validate-data.sh | 4 +- .../tests/ucode/mocks/homeproxy-pro.uc | 10 +- .../ucode/mocks/homeproxy-pro_fetcher.uc | 10 +- .../ucode/mocks/homeproxy-pro_firewall.uc | 6 +- .../tests/ucode/run.sh | 114 +- .../tests/ucode/test_domain_model_skeleton.sh | 20 +- .../tests/ucode/test_domain_model_skeleton.uc | 2 +- .../tests/ucode/test_factory_config.sh | 10 +- .../tests/ucode/test_firewall_pre.sh | 18 +- .../tests/ucode/test_firewall_pre.uc | 16 +- .../tests/ucode/test_firewall_template.sh | 24 +- .../tests/ucode/test_firewall_validators.sh | 10 +- .../tests/ucode/test_firewall_validators.uc | 2 +- .../tests/ucode/test_fw4_names.sh | 8 +- .../tests/ucode/test_generator_common.uc | 2 +- .../tests/ucode/test_generators.sh | 48 +- .../tests/ucode/test_golden_inbounds.sh | 14 +- .../tests/ucode/test_golden_outbounds.sh | 14 +- .../tests/ucode/test_homeproxy-pro_utils.uc | 4 +- .../ucode/test_homeproxy-pro_utils_inject.uc | 4 +- .../tests/ucode/test_inbound_adapter.uc | 6 +- .../tests/ucode/test_migrate_config.sh | 22 +- .../tests/ucode/test_migrate_config.uc | 144 + .../tests/ucode/test_mock_sync.sh | 12 +- .../tests/ucode/test_parse_uri.uc | 2 +- .../tests/ucode/test_parser_flatten.uc | 2 +- .../tests/ucode/test_parser_normalize.uc | 2 +- .../tests/ucode/test_protocol_inventory.sh | 8 +- .../tests/ucode/test_resource_blob_sha.sh | 6 +- .../tests/ucode/test_rpc_methods.sh | 28 +- .../tests/ucode/test_subscription_decoder.uc | 2 +- .../tests/ucode/test_subscription_fetcher.uc | 10 +- .../tests/ucode/test_subscription_filter.uc | 2 +- .../ucode/test_subscription_repository.sh | 24 +- .../ucode/test_subscription_repository.uc | 4 +- .../ucode/test_subscription_updater_runs.sh | 36 +- .../tests/ucode/test_tls_transport.uc | 20 +- .../tests/ucode/test_ucode_grammar.sh | 0 luci-app-homeproxy/.gitignore | 5 + luci-app-homeproxy/Makefile | 2 +- luci-app-homeproxy/README.md | 22 + .../resources/view/homeproxy/client.js | 7 +- .../resources/view/homeproxy/node.js | 35 +- .../resources/view/homeproxy/status.js | 9 + luci-app-homeproxy/po/templates/homeproxy.pot | 23 +- luci-app-homeproxy/po/zh_Hans/homeproxy.po | 22 +- .../root/etc/capabilities/homeproxy.json | 20 +- luci-app-homeproxy/root/etc/config/homeproxy | 1 + .../etc/homeproxy/scripts/firewall_post.ut | 101 +- .../etc/homeproxy/scripts/firewall_pre.uc | 8 +- .../etc/homeproxy/scripts/generate_client.uc | 206 +- .../etc/homeproxy/scripts/generate_server.uc | 2 + .../root/etc/homeproxy/scripts/homeproxy.uc | 124 +- .../root/etc/homeproxy/scripts/parse_uri.uc | 49 +- .../etc/homeproxy/scripts/update_crond.sh | 15 +- .../etc/homeproxy/scripts/update_resources.sh | 28 +- .../homeproxy/scripts/update_subscriptions.uc | 178 +- luci-app-homeproxy/root/etc/init.d/homeproxy | 219 +- .../share/rpcd/acl.d/luci-app-homeproxy.json | 20 +- .../root/usr/share/rpcd/ucode/luci.homeproxy | 11 +- luci-app-homeproxy/tests/README.md | 20 +- .../tests/luci-form-snapshot.js | 14 +- luci-app-homeproxy/tests/run.sh | 2 +- .../tests/snapshots/client.generated.json | 338 ++ .../tests/snapshots/client.json | 677 ++++ .../tests/ucode/mocks/homeproxy.uc | 60 +- .../tests/ucode/test_generators.sh | 45 + .../tests/ucode/test_homeproxy_utils.uc | 21 +- .../tests/ucode/test_parse_uri.uc | 22 + luci-app-trafficctl/Makefile | 4 +- 191 files changed, 8077 insertions(+), 6247 deletions(-) delete mode 100644 luci-app-homeproxy-pro-pro/po/templates/homeproxy-pro-pro.pot delete mode 100644 luci-app-homeproxy-pro-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration delete mode 100644 luci-app-homeproxy-pro-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json delete mode 100644 luci-app-homeproxy-pro-pro/tests/ucode/test_migrate_config.uc rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/.gitignore (53%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/LICENSE (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/Makefile (74%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/README.md (82%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/homeproxy-pro.js (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client.js (87%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js (88%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js (90%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js (94%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js (90%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/node.js (93%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/server.js (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/htdocs/luci-static/resources/view/homeproxy-pro/status.js (94%) create mode 100644 luci-app-homeproxy-pro/po/templates/homeproxy-pro.pot rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/po/zh-cn (100%) rename luci-app-homeproxy-pro-pro/po/zh_Hans/homeproxy-pro-pro.po => luci-app-homeproxy-pro/po/zh_Hans/homeproxy-pro.po (50%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/capabilities/homeproxy-pro.json (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/config/homeproxy-pro (92%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/china_ip4.txt (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/china_ip4.ver (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/china_ip6.txt (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/china_ip6.ver (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/china_list.txt (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/china_list.ver (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/gfw_list.txt (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/resources/gfw_list.ver (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/clean_log.sh (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/config/adapter.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/config/loader.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/config/model.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/firewall_post.ut (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/firewall_pre.uc (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/firewall_utils.uc (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/fw4_names.sh (89%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generate_client.uc (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generate_server.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/client.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/common.uc (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/context.uc (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/dns.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/inbound.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/outbound.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/route.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/ruleset.uc (91%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/generator/server.uc (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/migrate_config.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/parser/flatten.uc (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/parser/mapping.uc (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/parser/normalize.uc (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/parser/protocols.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/parser/uri.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/parser/validator.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/runtime/config.sh (93%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/runtime/dns.sh (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/runtime/firewall.sh (90%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/runtime/health.sh (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/runtime/net.sh (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/runtime/service.sh (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/subscription/decoder.uc (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/subscription/fetcher.uc (86%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/subscription/filter.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/subscription/repository.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/update_crond.sh (85%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/update_resources.sh (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/homeproxy-pro/scripts/update_subscriptions.uc (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/init.d/homeproxy-pro (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/etc/uci-defaults/luci-homeproxy-pro (76%) create mode 100644 luci-app-homeproxy-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration create mode 100644 luci-app-homeproxy-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/usr/share/rpcd/acl.d/luci-app-homeproxy-pro.json (64%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/root/usr/share/rpcd/ucode/luci.homeproxy-pro (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/README.md (85%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/arch-guard.sh (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/client.uci (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/custom.uci (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/direct_main.uci (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/domain.uci (94%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/outbounds.uci (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/partial_invalid.uci (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/redirect.uci (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/server.uci (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/generators/wireguard.uci (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/runtime/trace.golden.txt (65%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/fixtures/runtime/trace.pre-pr05.txt (79%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-certificate-upload.js (92%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-md5.js (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-protocol-inventory.js (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-rpc-fallbacks.js (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-rpc-inventory.js (85%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-title-escaping.js (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-validators.js (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/frontend-view-wiring.js (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/i18n-coverage.py (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/i18n-ignore.txt (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/json-assets.js (93%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/lib/luci-module.js (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/luci-form-snapshot.js (88%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/print-stats.sh (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/run.sh (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/runtime/test_config_transaction.sh (86%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/runtime/test_crontab_perms.sh (94%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/runtime/test_dns_snippets.sh (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/runtime/test_health_probe.sh (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/runtime/test_resource_update.sh (93%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/runtime/test_runtime_extraction.sh (94%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/snapshots/client.json (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/snapshots/generator/inbounds.json (100%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/snapshots/generator/outbounds.json (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/snapshots/node.json (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/snapshots/server.json (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/toolchain/build-ucode-linux.sh (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/toolchain/validate-data.sh (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/mocks/homeproxy-pro.uc (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/mocks/homeproxy-pro_fetcher.uc (87%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/mocks/homeproxy-pro_firewall.uc (87%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/run.sh (82%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_domain_model_skeleton.sh (75%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_domain_model_skeleton.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_factory_config.sh (93%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_firewall_pre.sh (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_firewall_pre.uc (89%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_firewall_template.sh (90%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_firewall_validators.sh (82%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_firewall_validators.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_fw4_names.sh (86%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_generator_common.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_generators.sh (96%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_golden_inbounds.sh (91%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_golden_outbounds.sh (92%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_homeproxy-pro_utils.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_homeproxy-pro_utils_inject.uc (94%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_inbound_adapter.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_migrate_config.sh (92%) create mode 100644 luci-app-homeproxy-pro/tests/ucode/test_migrate_config.uc rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_mock_sync.sh (92%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_parse_uri.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_parser_flatten.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_parser_normalize.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_protocol_inventory.sh (97%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_resource_blob_sha.sh (95%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_rpc_methods.sh (92%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_subscription_decoder.uc (98%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_subscription_fetcher.uc (93%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_subscription_filter.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_subscription_repository.sh (75%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_subscription_repository.uc (99%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_subscription_updater_runs.sh (86%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_tls_transport.uc (94%) rename {luci-app-homeproxy-pro-pro => luci-app-homeproxy-pro}/tests/ucode/test_ucode_grammar.sh (100%) create mode 100644 luci-app-homeproxy/tests/snapshots/client.generated.json create mode 100644 luci-app-homeproxy/tests/snapshots/client.json diff --git a/luci-app-homeproxy-pro-pro/po/templates/homeproxy-pro-pro.pot b/luci-app-homeproxy-pro-pro/po/templates/homeproxy-pro-pro.pot deleted file mode 100644 index 0690dbc81..000000000 --- a/luci-app-homeproxy-pro-pro/po/templates/homeproxy-pro-pro.pot +++ /dev/null @@ -1,3392 +0,0 @@ -msgid "" -msgstr "Content-Type: text/plain; charset=UTF-8" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:222 -msgid "%s log" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:913 -msgid "%s nodes removed" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:858 -msgid "(empty)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:110 -msgid "(last updated %s)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:111 -msgid "(never updated on this device)" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1098 -msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:221 -msgid "" -"1 matches the latest untagged evaluate result; other values match an " -"evaluate tag (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:81 -msgid "4 or 6. Not limited if empty." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:288 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:436 -msgid "" -"%s will be temporarily overwritten to %s after 50 " -"triggers in 30s if not enabled." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:434 -#: htdocs/luci-static/resources/view/homeproxy/node.js:458 -#: htdocs/luci-static/resources/view/homeproxy/server.js:523 -#: htdocs/luci-static/resources/view/homeproxy/server.js:542 -msgid "Save your configuration before uploading files!" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:375 -msgid "ACME account key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:359 -msgid "ACME key type" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:369 -msgid "ACME profile" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:370 -msgid "ACME profile for certificate issuance (1.14). Example: shortlived." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:419 -msgid "API token" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:227 -msgid "Accept any if empty." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:25 -msgid "Access Control" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:402 -msgid "Access key ID" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:408 -msgid "Access key secret" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:164 -msgid "Action" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35 -msgid "Add a DNS rule" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221 -msgid "Add a DNS server" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:25 -msgid "Add a node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32 -msgid "Add a routing node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35 -msgid "Add a routing rule" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31 -msgid "Add a rule set" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:176 -msgid "Add a server" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:267 -msgid "Additional headers to be sent to the DNS server." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:249 -#: htdocs/luci-static/resources/view/homeproxy/node.js:58 -msgid "Address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:29 -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:40 -msgid "Address and port dependent" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:28 -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:39 -msgid "Address dependent" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:280 -msgid "Address resolver" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:312 -msgid "Address strategy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:166 -msgid "Aggressive" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:395 -msgid "Alibaba Cloud DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:131 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:165 -msgid "Aliyun Public DNS (223.5.5.5)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:104 -msgid "All ports" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:196 -msgid "Allow access from the Internet." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:683 -#: htdocs/luci-static/resources/view/homeproxy/node.js:753 -msgid "Allow insecure" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:684 -msgid "Allow insecure connection at TLS client." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:754 -msgid "Allow insecure connection by default when add nodes from subscriptions." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:615 -msgid "Allowed payload size is in the request." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:129 -msgid "Already at the latest version." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:126 -msgid "Already in updating." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:257 -#: htdocs/luci-static/resources/view/homeproxy/server.js:304 -msgid "Alter ID" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:433 -msgid "Alternative HTTP port" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:439 -msgid "Alternative TLS port" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:305 -msgid "Answer" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:131 -msgid "AnyTLS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:232 -msgid "AnyTLS padding scheme in array." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:213 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:460 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:89 -msgid "" -"Append a edns0-subnet OPT extra record with the specified IP " -"prefix to every query by default.
If value is an IP address instead of " -"prefix, /32 or /128 will be appended automatically." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:420 -msgid "Append self-signed certificate" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:36 -msgid "Applied" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:29 -#: htdocs/luci-static/resources/view/homeproxy/node.js:39 -msgid "Apply" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:16 -msgid "Are you sure to allow insecure?" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:346 -msgid "Auth timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:281 -msgid "Authenticated length" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:263 -msgid "Authentication payload" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:256 -msgid "Authentication type" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:706 -msgid "Auto update" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:707 -msgid "Auto update subscriptions and geodata." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:325 -msgid "BBR" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:163 -msgid "BBR congestion control algorithm profile. Hysteria2 only." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:162 -msgid "BBR profile (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:252 -msgid "BaiDu" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:258 -msgid "Base64" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:170 -msgid "Based on google/gvisor." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:56 -msgid "Binary file" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:38 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:84 -#: htdocs/luci-static/resources/view/homeproxy/server.js:629 -msgid "Bind interface" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:39 -msgid "" -"Bind outbound traffic to specific interface. Leave empty to auto detect." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:90 -msgid "BitTorrent" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:740 -msgid "Blacklist mode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:211 -msgid "Block" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:84 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:108 -#: htdocs/luci-static/resources/view/homeproxy/server.js:624 -msgid "Both" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:190 -msgid "Bypass CN traffic" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:84 -msgid "Bypass mainland China" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:191 -msgid "Bypass mainland China traffic via firewall rules by default." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:382 -msgid "CA provider" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:196 -msgid "CN-IP DNS fallback (sing-box 1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:166 -msgid "CNNIC Public DNS (210.2.4.8)" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:323 -msgid "CUBIC" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:596 -msgid "Cancel" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:425 -#: htdocs/luci-static/resources/view/homeproxy/server.js:511 -msgid "Certificate path" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:95 -msgid "Check" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:139 -msgid "Check update" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:162 -msgid "China DNS server" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:261 -msgid "China IPv4 list version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:265 -msgid "China IPv6 list version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:269 -msgid "China list version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:125 -msgid "Chromium / Cronet" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:708 -msgid "Cipher suites" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:128 -msgid "Cisco Public DNS (208.67.222.222)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:231 -msgid "Clean log" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:123 -msgid "Client" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:14 -msgid "Client Settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:221 -msgid "Client version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:127 -msgid "CloudFlare Public DNS (1.1.1.1)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:396 -msgid "Cloudflare" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:130 -#: htdocs/luci-static/resources/view/homeproxy/server.js:146 -#: htdocs/luci-static/resources/view/homeproxy/status.js:212 -msgid "Collecting data..." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:105 -msgid "Common ports only (bypass P2P traffic)" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:321 -msgid "Congestion control algorithm" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:249 -msgid "Connection check" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:394 -msgid "Connection reuse" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:165 -msgid "Conservative" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:809 -msgid "Could not start subscription update: %s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:86 -msgid "Custom routing" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:92 -msgid "DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25 -msgid "DNS Rules" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:212 -msgid "DNS Servers" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:56 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:122 -msgid "DNS Settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:394 -msgid "DNS provider" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:39 -msgid "DNS query timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34 -msgid "DNS rule" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:410 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:124 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221 -msgid "DNS server" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:390 -msgid "DNS01 challenge" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:93 -msgid "DTLS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:179 -msgid "Debug" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:62 -#: htdocs/luci-static/resources/homeproxy.js:334 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:73 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:416 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:64 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:99 -msgid "Default" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:185 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:417 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:71 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:65 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:287 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:228 -msgid "Default DNS (issued by WAN)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:66 -msgid "Default DNS server" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:223 -msgid "Default DNS server for resolving domain name in the server address." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:61 -msgid "Default DNS strategy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:203 -msgid "Default outbound" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:222 -msgid "Default outbound DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:204 -msgid "Default outbound for connections not matched by any routing rules." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:760 -msgid "Default packet encoding" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:338 -msgid "Default server name" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:40 -msgid "Default timeout per DNS query in seconds (sing-box default: 10)." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:130 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:326 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:97 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:325 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:210 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:100 -msgid "Direct" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:165 -msgid "Direct Domain List" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:54 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:99 -msgid "Direct IPv4 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:57 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:102 -msgid "Direct IPv6 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:60 -msgid "Direct MAC-s" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:257 -#: htdocs/luci-static/resources/homeproxy.js:270 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:48 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:26 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:54 -#: htdocs/luci-static/resources/view/homeproxy/node.js:93 -#: htdocs/luci-static/resources/view/homeproxy/node.js:468 -#: htdocs/luci-static/resources/view/homeproxy/node.js:739 -msgid "Disable" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:209 -msgid "Disable (the service)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:170 -msgid "Disable Chrome QUIC fingerprint (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:171 -msgid "" -"Disable Chrome QUIC handshake parroting, which is enabled by default since " -"sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate " -"or the handshake otherwise fails." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:448 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:83 -msgid "Disable DNS cache" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:449 -msgid "Disable DNS cache in this query." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:425 -msgid "Disable HTTP challenge" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:429 -msgid "Disable TLS ALPN challenge" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:352 -msgid "Disable UDP domain unmapping" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:200 -msgid "Disable cache and save cache in this query." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:85 -msgid "Disable cache expire" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:199 -msgid "Disable dns cache" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:242 -msgid "Disable optimistic DNS caching for this query." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:467 -msgid "Disable optimistic DNS caching in this lookup (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:241 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:466 -msgid "Disable optimistic cache" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:31 -msgid "Disabled" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:487 -msgid "Domain keyword" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:478 -msgid "Domain name" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:491 -msgid "Domain regex" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:58 -msgid "Domain resolver" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:77 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:198 -msgid "Domain strategy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:442 -msgid "Domain strategy for resolving the domain names." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:483 -msgid "Domain suffix" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:332 -msgid "Domains" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:435 -msgid "Don't drop packets" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:287 -msgid "Don't drop requests" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:178 -msgid "Download bandwidth" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:179 -msgid "Download bandwidth in Mbps." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:431 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437 -msgid "Drop packets" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:282 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289 -msgid "Drop requests" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:746 -msgid "" -"Drop/keep nodes that contain the specific keywords. Regex is supported." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:738 -msgid "Drop/keep specific nodes from subscriptions." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:446 -msgid "" -"EAB (External Account Binding) contains information necessary to bind or map " -"an ACME account to some other account known by the CA.
External account " -"bindings are \"used to associate an ACME account with an existing account in " -"a non-ACME system, such as a CA customer database." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:442 -msgid "" -"ECH (Encrypted Client Hello) is a TLS extension that allows a client to " -"encrypt the first part of its ClientHello message." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:462 -#: htdocs/luci-static/resources/view/homeproxy/server.js:590 -msgid "ECH config" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:446 -msgid "ECH config path" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:549 -msgid "ECH key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:212 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:459 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:88 -msgid "EDNS Client subnet" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:614 -msgid "Early data" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:621 -msgid "Early data header name" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:622 -msgid "Early data is sent in path instead of header by default." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:568 -msgid "Edit nodes" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:344 -msgid "Email" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:53 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:45 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:234 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:44 -#: htdocs/luci-static/resources/view/homeproxy/server.js:168 -#: htdocs/luci-static/resources/view/homeproxy/server.js:190 -msgid "Enable" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:355 -msgid "" -"Enable 0-RTT QUIC connection handshake on the client side. This is not " -"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:354 -msgid "Enable 0-RTT handshake" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:327 -msgid "Enable ACME" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:441 -msgid "Enable ECH" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:173 -msgid "Enable TCP Brutal" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:174 -msgid "Enable TCP Brutal congestion control algorithm" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:521 -#: htdocs/luci-static/resources/view/homeproxy/server.js:610 -msgid "Enable UDP fragmentation." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:395 -msgid "Enable connection reuse (the Snell v2 CONNECT command)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:175 -msgid "Enable endpoint-independent NAT" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:195 -msgid "" -"Enable neighbor resolution so rules can match LAN devices by hostname (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:166 -msgid "Enable padding" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:601 -msgid "Enable tcp fast open for listener." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:525 -msgid "" -"Enable the SUoT protocol, requires server support. Conflict with multiplex." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:177 -#: htdocs/luci-static/resources/view/homeproxy/node.js:263 -#: htdocs/luci-static/resources/view/homeproxy/server.js:284 -msgid "Encrypt method" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:27 -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:38 -msgid "Endpoint independent" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:182 -msgid "Error" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:170 -msgid "Evaluate (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:225 -msgid "Evaluate tag" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:220 -#: htdocs/luci-static/resources/homeproxy.js:1035 -#: htdocs/luci-static/resources/homeproxy.js:1085 -#: htdocs/luci-static/resources/homeproxy.js:1098 -#: htdocs/luci-static/resources/homeproxy.js:1117 -#: htdocs/luci-static/resources/homeproxy.js:1126 -#: htdocs/luci-static/resources/homeproxy.js:1137 -#: htdocs/luci-static/resources/homeproxy.js:1146 -#: htdocs/luci-static/resources/homeproxy.js:1148 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126 -#: htdocs/luci-static/resources/view/homeproxy/node.js:484 -#: htdocs/luci-static/resources/view/homeproxy/node.js:727 -#: htdocs/luci-static/resources/view/homeproxy/node.js:730 -#: htdocs/luci-static/resources/view/homeproxy/server.js:350 -#: htdocs/luci-static/resources/view/homeproxy/server.js:352 -msgid "Expecting: %s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:445 -msgid "External Account Binding" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:457 -msgid "External account MAC key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:451 -msgid "External account key ID" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:315 -msgid "Extra records" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:117 -msgid "" -"Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:116 -msgid "Extra tags" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:657 -msgid "Failed to close the import dialog: %s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:93 -msgid "Failed to generate %s, error: %s." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:124 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:177 -msgid "Failed to read domain list: %s." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1075 -msgid "Failed to upload %s, error: %s." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:183 -msgid "Fatal" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:745 -msgid "Filter keywords" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:737 -msgid "Filter nodes" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:194 -msgid "Find neighbor hosts" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:126 -msgid "Firefox / uquic firefox" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:195 -msgid "Firewall" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:251 -#: htdocs/luci-static/resources/view/homeproxy/server.js:298 -msgid "Flow" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:59 -msgid "For resolving domain name in the server address." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:55 -msgid "Format" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:372 -msgid "Fragment TLS handshake into multiple TLS records." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:378 -msgid "" -"Fragment TLS handshakes. Due to poor performance, try %s first." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:384 -msgid "Fragment fallback delay" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:583 -msgid "GET" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:273 -msgid "GFW list version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:83 -msgid "GFWList" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:72 -msgid "Gaming mode IPv4 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:74 -msgid "Gaming mode IPv6 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:77 -msgid "Gaming mode MAC-s" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:272 -msgid "Gecko (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:37 -#: htdocs/luci-static/resources/view/homeproxy/server.js:39 -#: htdocs/luci-static/resources/view/homeproxy/server.js:582 -msgid "Generate" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:277 -msgid "GitHub token" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:87 -msgid "Global" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:274 -msgid "Global padding" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:79 -msgid "Global proxy IPv4 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:82 -msgid "Global proxy IPv6 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:85 -msgid "Global proxy MAC-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:166 -msgid "Global settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:255 -msgid "Google" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:129 -msgid "Google Public DNS (8.8.8.8)" -msgstr "" - -#: root/usr/share/rpcd/acl.d/luci-app-homeproxy.json:3 -msgid "Grant access to homeproxy configuration" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:132 -#: htdocs/luci-static/resources/homeproxy.js:520 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:94 -msgid "HTTP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:407 -msgid "" -"HTTP Host header sent when obfuscation mode is http. bing.com is used by " -"default." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:400 -msgid "HTTP obfuscation. v4 only." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:276 -msgid "HTTP obfuscation. v5 only." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:244 -msgid "HTTP/3" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:257 -msgid "" -"HTTP3 server behavior when authentication fails.
A 404 page will be " -"returned if empty." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:243 -msgid "HTTPS" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:521 -msgid "HTTPUpgrade" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:499 -msgid "Handshake server address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:505 -msgid "Handshake server port" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:717 -msgid "Handshake timeout (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:266 -msgid "Headers" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:360 -msgid "Heartbeat interval" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:33 -msgid "Hijack" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:70 -#: htdocs/luci-static/resources/view/homeproxy/client.js:119 -#: htdocs/luci-static/resources/view/homeproxy/status.js:299 -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3 -msgid "HomeProxy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:75 -#: htdocs/luci-static/resources/view/homeproxy/server.js:136 -msgid "HomeProxy Server" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:129 -msgid "Hop interval" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:123 -msgid "Hopping port" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:566 -#: htdocs/luci-static/resources/homeproxy.js:571 -#: htdocs/luci-static/resources/homeproxy.js:606 -msgid "Host" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:226 -msgid "Host key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:231 -msgid "Host key algorithms" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:44 -msgid "Host/IP fields" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:347 -msgid "" -"How long the server should wait for the client to send the authentication " -"command (in seconds)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:399 -msgid "How the forged segment is rejected by the real server." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:133 -msgid "Hysteria" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:134 -msgid "Hysteria2" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:503 -msgid "IP CIDR" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:80 -msgid "IP version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:82 -msgid "IPv4" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:65 -msgid "IPv4 only" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:83 -msgid "IPv6" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:66 -msgid "IPv6 only" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:135 -msgid "IPv6 support" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:100 -msgid "Idle session check interval" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:107 -msgid "Idle session check timeout" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:589 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:190 -msgid "Idle timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:359 -msgid "" -"If enabled, attempts to connect UDP connection to the destination instead of " -"listen." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:353 -msgid "" -"If enabled, for UDP proxy requests addressed to a domain, the original " -"packet address will be sent in the response instead of the mapped domain." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:561 -msgid "" -"If enabled, the client transport sends keepalive pings even with no active " -"connections." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:199 -msgid "" -"If set, the requested domain name will be resolved to IP before routing." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:24 -msgid "" -"If the transport doesn't see any activity after a duration of this time (in " -"seconds), it pings the client to check if the connection is still active." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:421 -msgid "" -"If you have the root certificate, use this option instead of allowing " -"insecure." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:251 -msgid "Ignore client bandwidth" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:662 -msgid "Import" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:589 -#: htdocs/luci-static/resources/view/homeproxy/node.js:682 -#: htdocs/luci-static/resources/view/homeproxy/node.js:684 -msgid "Import share links" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:658 -msgid "" -"Imported the nodes, but the dialog did not close automatically. Close it " -"manually." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:183 -#: htdocs/luci-static/resources/view/homeproxy/server.js:615 -msgid "In seconds." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:333 -msgid "In seconds. Disabled by default." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:115 -msgid "" -"In the check, at least the first n idle sessions are kept open." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:108 -msgid "" -"In the check, close sessions that have been idle for longer than this, in " -"seconds." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:180 -msgid "Info" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:110 -msgid "Initial path" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:392 -msgid "" -"Inject a forged TLS ClientHello carrying this SNI before the real one to " -"fool SNI-filtering middleboxes. Requires elevated privileges." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:31 -msgid "Interface Control" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:197 -msgid "Interrupt existing connections" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:198 -msgid "Interrupt existing connections when the selected outbound has changed." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:101 -msgid "Interval checking for idle sessions, in seconds." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:361 -msgid "" -"Interval for sending heartbeat packets for keeping the connection alive (in " -"seconds)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:160 -msgid "Invert" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:161 -msgid "Invert match result." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:231 -msgid "" -"Judge this response-dependent rule in parallel; first match wins (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:530 -msgid "Key path" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:45 -msgid "LAN IP Policy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:48 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:40 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:229 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:39 -#: htdocs/luci-static/resources/view/homeproxy/node.js:51 -#: htdocs/luci-static/resources/view/homeproxy/server.js:184 -msgid "Label" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:258 -#: htdocs/luci-static/resources/view/homeproxy/server.js:305 -msgid "" -"Legacy protocol support (VMess MD5 Authentication) is provided for " -"compatibility purposes only, use of alterId > 1 is not recommended." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:172 -msgid "Less compatibility and sometimes better performance." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:384 -msgid "Let's Encrypt" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:293 -msgid "" -"List of IP (v4 or v6) addresses prefixes to be assigned to the interface." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:128 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:35 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:64 -msgid "List of nodes to test." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:678 -msgid "List of supported application level protocols, in order of preference." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:306 -msgid "List of text DNS record to respond as answers." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:316 -msgid "List of text DNS record to respond as extra records." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:311 -msgid "List of text DNS record to respond as name servers." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:201 -msgid "Listen address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:33 -msgid "Listen interfaces" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:206 -msgid "Listen port" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:210 -msgid "Loading" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:50 -msgid "Local" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:292 -msgid "Local address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:111 -msgid "" -"Local file with initial rule-set content; avoids blocking startup on first " -"download (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:59 -msgid "Log file does not exist." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:55 -msgid "Log is empty." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:326 -msgid "MTU" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:53 -msgid "Main UDP node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:25 -msgid "Main node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157 -msgid "Make IP CIDR in rule set used to match the source IP." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157 -msgid "Make IP CIDR in rule sets match the source IP." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:256 -msgid "Masquerade" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:528 -msgid "Match DNSSEC OK" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:504 -msgid "" -"Match IP CIDR with the evaluated response (needs match_response; old rules " -"are auto-wrapped in 1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:505 -msgid "Match IP CIDR." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:514 -msgid "Match LAN device by MAC address." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:519 -msgid "" -"Match LAN device hostname via neighbor resolution; enable find_neighbor." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:484 -msgid "Match domain suffix." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:488 -msgid "Match domain using keyword." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:492 -msgid "Match domain using regular expression." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:479 -msgid "Match full domain." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:549 -msgid "Match port range. Format as START:/:END/START:END." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:544 -msgid "Match port." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:509 -msgid "Match private IP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:510 -msgid "Match private IP with the evaluated response (needs match_response)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:500 -msgid "Match private source IP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:554 -msgid "Match process name." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:562 -msgid "Match process path using regular expression." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:558 -msgid "Match process path." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:529 -msgid "Match queries with the DNSSEC OK bit set (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:115 -msgid "Match query type." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:220 -msgid "Match response" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:141 -msgid "" -"Match rule set. DNS: rules referencing rule-sets that contain query_type are " -"incompatible with legacy address filters (ip_cidr / ip_is_private) — use " -"match_response instead (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:142 -msgid "" -"Match rule set. Since 1.14: a rule-set holding a single default rule is " -"merged into this rule; any other rule-set matches as an OR collection." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:496 -msgid "Match source IP CIDR." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:539 -msgid "Match source port range. Format as START:/:END/START:END." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:534 -msgid "Match source port." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:524 -msgid "Match the EDNS Client Subnet in the query (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:261 -msgid "Match the evaluated response code (requires match_response)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:137 -msgid "Match user name." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:234 -msgid "Max download speed" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:235 -msgid "Max download speed in Mbps." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:137 -msgid "Max hop interval (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:289 -msgid "Max obfs packet size (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:37 -msgid "Max time an expired entry may be served. Examples: 3d, 1h." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:494 -msgid "Max time difference" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:241 -msgid "Max upload speed" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:242 -msgid "Max upload speed in Mbps." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:700 -msgid "Maximum TLS version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:354 -#: htdocs/luci-static/resources/view/homeproxy/node.js:368 -msgid "Maximum connections" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:366 -msgid "" -"Maximum multiplexed streams in a connection before opening a new connection." -"
Conflict with %s and %s." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:290 -msgid "Maximum on-wire packet size in bytes. Gecko only." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:138 -msgid "" -"Maximum port hopping interval in seconds; the actual interval is randomized " -"between the two values. Hysteria2 only." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:365 -msgid "Maximum streams" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:581 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:280 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:429 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437 -msgid "Method" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:282 -msgid "Min obfs packet size (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:692 -msgid "Minimum TLS version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:114 -msgid "Minimum idle sessions" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:360 -msgid "" -"Minimum multiplexed streams in a connection before opening a new connection." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:283 -msgid "Minimum on-wire packet size in bytes. Gecko only." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:359 -#: htdocs/luci-static/resources/view/homeproxy/node.js:368 -msgid "Minimum streams" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:136 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:157 -msgid "Mixed" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:168 -msgid "Mixed system TCP stack and gVisor UDP stack." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:58 -msgid "Mode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:517 -#: htdocs/luci-static/resources/view/homeproxy/server.js:605 -msgid "MultiPath TCP" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:159 -msgid "Multiplex" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:345 -msgid "Multiplex protocol." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:419 -msgid "NOT RUNNING" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:766 -msgid "NOTE: Save current settings before updating subscriptions." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:310 -msgid "NS" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:335 -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:32 -msgid "Native" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:135 -msgid "NaïveProxy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:105 -#: htdocs/luci-static/resources/view/homeproxy/server.js:621 -msgid "Network" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:324 -msgid "New Reno" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:17 -msgid "No TCP transport, plain HTTP is merged into the HTTP transport." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:19 -msgid "No additional encryption support: It's basically duplicate encryption." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:783 -msgid "No subscription available" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:894 -msgid "No subscription node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:637 -msgid "No valid share link found." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:50 -#: htdocs/luci-static/resources/view/homeproxy/node.js:25 -msgid "Node" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:22 -msgid "Node Settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:574 -msgid "Nodes" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:518 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:286 -#: htdocs/luci-static/resources/view/homeproxy/node.js:252 -#: htdocs/luci-static/resources/view/homeproxy/server.js:299 -msgid "None" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:276 -msgid "Obfuscate password" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:269 -msgid "Obfuscate type" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:406 -msgid "Obfuscation host" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:399 -#: htdocs/luci-static/resources/view/homeproxy/server.js:275 -msgid "Obfuscation mode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:114 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:171 -msgid "" -"One domain per line. No spaces, no comments, no wildcards; the backend " -"rejects invalid characters and tells you which line." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:34 -msgid "Only process traffic from specific interfaces. Leave empty for all." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:85 -msgid "Only proxy mainland China" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:30 -msgid "Optimistic DNS cache" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:36 -msgid "Optimistic cache timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:226 -msgid "Optional tag for this evaluate result." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:390 -msgid "Optional; only required when connecting to a multi-user Snell server." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:43 -msgid "Other fields" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:320 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:91 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:319 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:93 -msgid "Outbound" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:51 -msgid "Outbound node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:94 -msgid "" -"Outbound used to download this rule-set (via sing-box 1.14 http_clients)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:338 -msgid "Override address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:472 -msgid "Override dns.timeout for this lookup, in seconds (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:248 -msgid "Override dns.timeout for this query, in seconds." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:345 -msgid "Override port" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:339 -msgid "Override the connection destination address." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:346 -msgid "Override the connection destination port." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:376 -msgid "PEM-encoded private key of an existing ACME account (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:584 -msgid "PUT" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:630 -msgid "Packet encoding" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:231 -msgid "Padding scheme" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:184 -msgid "Panic" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:74 -#: htdocs/luci-static/resources/view/homeproxy/server.js:218 -msgid "Password" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:576 -#: htdocs/luci-static/resources/homeproxy.js:610 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:259 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:61 -msgid "Path" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:307 -msgid "Peer pubkic key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:176 -msgid "" -"Performance may degrade slightly, so it is not recommended to enable on when " -"it is not needed." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:44 -msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:332 -msgid "Persistent keepalive interval" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:597 -msgid "Ping timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:187 -msgid "Plugin" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:194 -msgid "Plugin opts" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:543 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:254 -#: htdocs/luci-static/resources/view/homeproxy/node.js:63 -msgid "Port" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:114 -msgid "Port %s alrealy exists!" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:45 -msgid "Port fields" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:130 -msgid "Port hopping interval in seconds." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:548 -msgid "Port range" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:314 -msgid "Pre-shared key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:169 -msgid "Predefined" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:63 -msgid "Prefer IPv4" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:64 -msgid "Prefer IPv6" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:235 -#: htdocs/luci-static/resources/view/homeproxy/node.js:299 -msgid "Private key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:240 -msgid "Private key passphrase" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:360 -msgid "Private key type for new certificates (1.14). Empty uses the default." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:46 -msgid "Process fields" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:553 -msgid "Process name" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:557 -msgid "Process path" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:561 -msgid "Process path (regex)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:88 -#: htdocs/luci-static/resources/view/homeproxy/node.js:144 -#: htdocs/luci-static/resources/view/homeproxy/node.js:344 -#: htdocs/luci-static/resources/view/homeproxy/server.js:237 -msgid "Protocol" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:282 -msgid "Protocol parameter. Enable length block encryption." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:275 -msgid "" -"Protocol parameter. Will waste traffic randomly if enabled (enabled by " -"default in v2ray and cannot be disabled)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:108 -msgid "Proxy Domain List" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:63 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:92 -msgid "Proxy IPv4 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:66 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:95 -msgid "Proxy IPv6 IP-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:69 -msgid "Proxy MAC-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:50 -msgid "Proxy all except listed" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:47 -msgid "Proxy filter mode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:49 -msgid "Proxy listed only" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:122 -msgid "Proxy mode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:91 -msgid "Proxy protocol" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:336 -#: htdocs/luci-static/resources/homeproxy.js:522 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:95 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:245 -msgid "QUIC" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:322 -msgid "QUIC congestion control algorithm." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:523 -msgid "Query EDNS client subnet" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:247 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:471 -msgid "Query timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:114 -msgid "Query type" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:293 -msgid "RCode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:96 -msgid "RDP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:495 -#: htdocs/luci-static/resources/view/homeproxy/server.js:464 -msgid "REALITY" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:469 -msgid "REALITY private key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:500 -#: htdocs/luci-static/resources/view/homeproxy/server.js:485 -msgid "REALITY public key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:506 -#: htdocs/luci-static/resources/view/homeproxy/server.js:489 -msgid "REALITY short ID" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:417 -msgid "RUNNING" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:230 -msgid "Race" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:222 -msgid "Random version will be used if empty." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:119 -msgid "Recursive outbound detected!" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:305 -msgid "Recursive resolver detected!" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:123 -msgid "Redirect TCP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:125 -msgid "Redirect TCP + TProxy UDP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:127 -msgid "Redirect TCP + Tun UDP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:236 -msgid "Refresh every %s seconds." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:414 -msgid "Region ID" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:167 -msgid "Reject" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:51 -msgid "Remote" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:891 -msgid "Remove %s nodes" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:254 -msgid "Remove EDNS client subnet" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:881 -msgid "Remove all nodes from subscriptions" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:255 -msgid "Remove the edns0-subnet record from the query (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:281 -msgid "Reply with REFUSED" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:430 -msgid "Reply with TCP RST / ICMP port unreachable" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:321 -msgid "Reserved field bytes" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:172 -msgid "Resolve" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:441 -msgid "Resolve strategy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:258 -msgid "Resources management" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:272 -msgid "Response NS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:260 -msgid "Response RCode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:267 -msgid "Response answer" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:276 -msgid "Response extra" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:31 -msgid "" -"Return expired cache immediately and refresh in background (sing-box 1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:635 -msgid "Reuse address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:636 -msgid "Reuse listener address." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:205 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:453 -msgid "Rewrite TTL" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:206 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:454 -msgid "Rewrite TTL in DNS responses." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:165 -msgid "Route" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:166 -msgid "Route options" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:23 -msgid "Routing Nodes" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25 -msgid "Routing Rules" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:23 -msgid "Routing Settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:82 -msgid "Routing mode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32 -msgid "Routing node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:102 -msgid "Routing ports" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34 -msgid "Routing rule" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:22 -msgid "Rule Set" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:140 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31 -msgid "Rule set" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:156 -msgid "Rule set IP CIDR as source IP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:68 -msgid "Rule set URL" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:141 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:97 -msgid "SSH" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:421 -msgid "STATUS UNKNOWN" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:98 -msgid "STUN" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:530 -msgid "SUoT version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:128 -msgid "Safari / Apple Network API" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:271 -msgid "Salamander" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:55 -msgid "Same as main node" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:284 -#: htdocs/luci-static/resources/view/homeproxy/status.js:290 -msgid "Save" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:768 -msgid "Save current settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:765 -msgid "Save subscriptions settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:236 -msgid "Send the query before pending race rules are judged (1.14)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:179 -#: htdocs/luci-static/resources/view/homeproxy/server.js:176 -msgid "Server" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:30 -msgid "Server Settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:339 -msgid "" -"Server name to use when choosing a certificate if the ClientHello's " -"ServerName field is empty." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:171 -msgid "Server settings" -msgstr "" - -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:38 -msgid "Service Status" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:138 -msgid "ShadowTLS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:201 -msgid "ShadowTLS version" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:137 -msgid "Shadowsocks" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:29 -msgid "" -"Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the " -"platform interface DNS and hijacks port 53. On OpenWrt this overlaps with " -"the own dnsmasq/nftables DNS hijack of this plugin, so keep Disabled on a " -"gateway unless you need sing-box to own TUN DNS." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:139 -msgid "Snell (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:376 -#: htdocs/luci-static/resources/view/homeproxy/server.js:263 -msgid "Snell version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:124 -msgid "Sniffed client type (QUIC client type or SSH client name)." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:89 -msgid "" -"Sniffed protocol, see Sniff for details." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:143 -msgid "Sniffer: advanced mode (100ms, universal list)" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:140 -msgid "Socks" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:211 -msgid "Socks version" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:212 -msgid "Socks4" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:213 -msgid "Socks4A" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:214 -msgid "Socks5" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:495 -msgid "Source IP CIDR" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:513 -msgid "Source MAC address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:57 -msgid "Source file" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:518 -msgid "Source hostname" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:533 -msgid "Source port" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:538 -msgid "Source port range" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:411 -msgid "" -"Specifies DNS server tag to use instead of selecting through DNS routing." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:21 -msgid "" -"Specifies the period of time (in seconds) after which a health check will be " -"performed using a ping frame if no frames have been received on the " -"connection.
Please note that a ping response is considered a received " -"frame, so if there is no other traffic on the connection, the health check " -"will be executed every interval." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:23 -msgid "" -"Specifies the time (in seconds) until idle clients should be closed with a " -"GOAWAY frame. PING frames are not considered as activity." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:26 -msgid "" -"Specifies the timeout duration (in seconds) after sending a PING frame, " -"within which a response must be received.
If a response to the PING " -"frame is not received within the specified timeout duration, the connection " -"will be closed." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:103 -msgid "" -"Specify target ports to be proxied. Multiple ports must be separated by " -"commas." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:235 -msgid "Speculative" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:164 -msgid "Standard (default)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:43 -msgid "Store DNS cache" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:259 -msgid "String" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:693 -msgid "Sub (%s)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:720 -msgid "Subscription URL-s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:857 -msgid "Subscription update did not complete cleanly. Last log:" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:805 -msgid "" -"Subscription update is already running. This page will reload when the " -"previous run finishes." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:867 -msgid "" -"Subscription update is taking longer than 90 seconds. Check the log and " -"reload manually." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:704 -msgid "Subscriptions" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:639 -msgid "Successfully imported %s nodes of total %s." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:120 -msgid "Successfully updated." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:590 -#: htdocs/luci-static/resources/view/homeproxy/node.js:721 -msgid "" -"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) " -"online configuration delivery standard." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:125 -msgid "" -"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:160 -msgid "System" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:418 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:72 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:66 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:288 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:229 -msgid "System DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:106 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:241 -#: htdocs/luci-static/resources/view/homeproxy/server.js:622 -msgid "TCP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:514 -#: htdocs/luci-static/resources/view/homeproxy/server.js:600 -msgid "TCP fast open" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:154 -msgid "TCP/IP stack" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:155 -msgid "TCP/IP stack." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:650 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:99 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:242 -msgid "TLS" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:677 -msgid "TLS ALPN" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:672 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:272 -msgid "TLS SNI" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:377 -msgid "TLS fragment" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:718 -msgid "TLS handshake timeout in seconds. 15s is used by default." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:18 -msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:371 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:379 -msgid "TLS record fragment" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:391 -msgid "TLS spoof SNI (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:398 -msgid "TLS spoof method (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:26 -msgid "TUN DNS" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:39 -msgid "TUN DNS addresses (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:28 -msgid "TUN DNS mode (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:281 -msgid "" -"Tag of a another server to resolve the domain name in the address. Required " -"if address contains domain." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:320 -msgid "Tag of an outbound for connecting to the dns server." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:180 -msgid "Tag of the target dns server." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:321 -msgid "Tag of the target outbound." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:252 -msgid "" -"Tell the client to use the BBR flow control algorithm instead of Hysteria CC." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:132 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:167 -msgid "Tencent Public DNS (119.29.29.29)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:147 -msgid "Test URL" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:167 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:41 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:70 -msgid "Test interval" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:175 -msgid "Test interval must be less or equal than idle timeout." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:183 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:47 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:76 -msgid "Test tolerance" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:268 -msgid "Text DNS records to match in the evaluated answer." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:383 -msgid "The ACME CA provider to use." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:62 -msgid "The DNS strategy for resolving the domain name in the address." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:148 -msgid "The URL to test." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:250 -msgid "The address of the dns server." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:434 -msgid "" -"The alternate port to use for the ACME HTTP challenge; if non-empty, this " -"port will be used instead of 80 to spin up a listener for the HTTP challenge." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:440 -msgid "" -"The alternate port to use for the ACME TLS-ALPN challenge; the system must " -"forward 443 to this port for challenge to succeed." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:66 -msgid "" -"The default rule uses the following matching logic:
(domain || " -"domain_suffix || domain_keyword || domain_regex || ip_cidr || " -"ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be considered merged rather " -"than as a single rule sub-item." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:59 -msgid "" -"The default rule uses the following matching logic:
(domain || " -"domain_suffix || domain_keyword || domain_regex) &&
(port " -"|| port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be " -"considered merged rather than as a single rule sub-item." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:163 -msgid "" -"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:78 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:313 -msgid "The domain strategy for resolving the domain name in the address." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:709 -msgid "" -"The elliptic curves that will be used in an ECDHE handshake, in preference " -"order. If empty, the default will be used." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:345 -msgid "" -"The email address to use when creating or selecting an existing ACME server " -"account." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:385 -msgid "" -"The fallback value in milliseconds used when TLS segmentation cannot " -"automatically determine the wait time." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:191 -msgid "The idle timeout in seconds." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:701 -msgid "The maximum TLS version that is acceptable." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:495 -msgid "The maximum time difference between the server and the client." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:693 -msgid "The minimum TLS version that is acceptable." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client.js:120 -#: htdocs/luci-static/resources/view/homeproxy/server.js:137 -msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:85 -#: htdocs/luci-static/resources/view/homeproxy/server.js:630 -msgid "The network interface to bind to." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:260 -msgid "The path of the DNS server." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:447 -msgid "" -"The path to the ECH config, in PEM format. If empty, load from DNS will be " -"attempted." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:426 -msgid "The path to the server certificate, in PEM format." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:207 -msgid "The port must be unique." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:255 -msgid "The port of the DNS server." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:264 -msgid "The pre-shared key (password) above must be 12-255 bytes for v6." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:850 -msgid "The request %s failed: %s." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:294 -msgid "The response code." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:531 -msgid "The server private key, in PEM format." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:512 -msgid "The server public key, in PEM format." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:92 -msgid "" -"The tag of the upstream outbound.
Other dial fields will be ignored when " -"enabled." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:168 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:42 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:71 -msgid "The test interval in seconds." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:184 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:48 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:77 -msgid "The test tolerance in milliseconds." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:28 -msgid "" -"The timeout (in seconds) that after performing a keepalive check, the client " -"will wait for activity. If no activity is detected, the connection will be " -"closed." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:686 -#: htdocs/luci-static/resources/view/homeproxy/node.js:756 -msgid "" -"This is DANGEROUS, your traffic is almost like " -"PLAIN TEXT! Use at your own risk!" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:341 -msgid "" -"This is the TUIC port of the UDP over TCP protocol, designed to provide a " -"QUIC stream based UDP relay mode that TUIC does not provide." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:133 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:168 -msgid "ThreatBook Public DNS (117.50.10.10)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:365 -msgid "" -"Timeout for UDP connections.
Setting a larger value than the UDP timeout " -"in inbounds will have no effect." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:624 -msgid "" -"To be compatible with Xray-core, set this to Sec-WebSocket-Protocol." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:130 -msgid "" -"To enable Tun support, you need to install ip-full and " -"kmod-tun" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:178 -msgid "Trace" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:517 -msgid "Transport" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:142 -msgid "Trojan" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:143 -msgid "Tuic" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:128 -msgid "Tun TCP/UDP" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:461 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:239 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:49 -msgid "Type" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:107 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:240 -#: htdocs/luci-static/resources/view/homeproxy/server.js:623 -msgid "UDP" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:520 -#: htdocs/luci-static/resources/view/homeproxy/server.js:609 -msgid "UDP Fragment" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:24 -msgid "UDP NAT Settings" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:182 -#: htdocs/luci-static/resources/view/homeproxy/server.js:614 -msgid "UDP NAT expiration time" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:37 -msgid "UDP NAT filtering (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:26 -msgid "UDP NAT mapping (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:48 -msgid "UDP NAT sessions max (1.14)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:524 -msgid "UDP over TCP" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:340 -msgid "UDP over stream" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:333 -msgid "UDP packet relay mode." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:332 -msgid "UDP relay mode" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:364 -msgid "UDP timeout" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:52 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:27 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:56 -msgid "URLTest" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:127 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:34 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:63 -msgid "URLTest nodes" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:309 -msgid "UUID" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:132 -msgid "Unknown error." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:61 -msgid "Unknown error: %s" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:30 -msgid "Unset (default)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:488 -msgid "Unsupported fingerprint!" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:780 -msgid "Update %s subscriptions" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:123 -msgid "Update failed." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:132 -msgid "Update interval" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:133 -msgid "Update interval of rule set." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:775 -msgid "Update nodes from subscriptions" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:717 -msgid "Update subscriptions via proxy." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:710 -msgid "Update time" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:716 -msgid "Update via proxy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:813 -#: htdocs/luci-static/resources/view/homeproxy/node.js:825 -msgid "Updating subscriptions…" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:457 -msgid "Upload ECH config" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:184 -msgid "Upload bandwidth" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:185 -msgid "Upload bandwidth in Mbps." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:433 -#: htdocs/luci-static/resources/view/homeproxy/server.js:522 -msgid "Upload certificate" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:541 -msgid "Upload key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:436 -#: htdocs/luci-static/resources/view/homeproxy/node.js:460 -#: htdocs/luci-static/resources/view/homeproxy/server.js:525 -#: htdocs/luci-static/resources/view/homeproxy/server.js:544 -msgid "Upload..." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:328 -msgid "Use ACME TLS certificate issuer." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:144 -msgid "" -"Use the tutorial-recommended sniffer profile (100ms timeout, http/tls/stun/" -"quic/dns). Default keeps the 300ms / unconstrained-list behaviour." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:673 -msgid "" -"Used to verify the hostname on the returned certificates unless insecure is " -"given." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:273 -msgid "Used to verify the hostname on the returned certificates." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:136 -msgid "User" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:389 -msgid "User key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:750 -msgid "User-Agent" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:68 -#: htdocs/luci-static/resources/view/homeproxy/server.js:211 -msgid "Username" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:145 -msgid "VLESS" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:146 -msgid "VMess" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:126 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:164 -msgid "WAN DNS (read from interface)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:90 -msgid "WAN IP Policy" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:181 -msgid "Warn" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:523 -msgid "WebSocket" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:197 -msgid "" -"When the main DNS returns a mainland China IP, re-resolve via China DNS " -"using evaluate/match_response." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:741 -msgid "Whitelist mode" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:144 -msgid "WireGuard" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:308 -msgid "WireGuard peer public key." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:315 -msgid "WireGuard pre-shared key." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:300 -msgid "WireGuard requires base64-encoded private keys." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:92 -msgid "Write proxy protocol in the connection header." -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:633 -#: htdocs/luci-static/resources/view/homeproxy/node.js:763 -msgid "Xudp (Xray-core)" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1073 -msgid "Your %s was successfully uploaded. Size: %sB." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:385 -msgid "ZeroSSL" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:438 -#: htdocs/luci-static/resources/view/homeproxy/server.js:527 -msgid "certificate" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:358 -msgid "connect UDP connections" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:694 -#: htdocs/luci-static/resources/homeproxy.js:702 -msgid "default" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:91 -msgid "failed" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:519 -msgid "gRPC" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:560 -msgid "gRPC permit without stream" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:555 -msgid "gRPC service name" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:158 -msgid "gVisor" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:402 -#: htdocs/luci-static/resources/view/homeproxy/server.js:278 -msgid "http" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:220 -#: htdocs/luci-static/resources/homeproxy.js:1126 -#: htdocs/luci-static/resources/homeproxy.js:1146 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72 -#: htdocs/luci-static/resources/view/homeproxy/node.js:484 -msgid "non-empty value" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:631 -#: htdocs/luci-static/resources/view/homeproxy/node.js:188 -#: htdocs/luci-static/resources/view/homeproxy/node.js:401 -#: htdocs/luci-static/resources/view/homeproxy/node.js:761 -#: htdocs/luci-static/resources/view/homeproxy/server.js:277 -msgid "none" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:632 -#: htdocs/luci-static/resources/view/homeproxy/node.js:762 -msgid "packet addr (v2ray-core v5+)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:88 -msgid "passed" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:546 -msgid "private key" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:127 -msgid "quic-go / uquic chrome" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:302 -msgid "sing-box client" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:41 -msgid "" -"sing-box default; recommended for home use (accepts replies from any remote " -"after mapping). Choose stricter only for specific UDP issues." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:30 -msgid "" -"sing-box default; recommended for home use (small NAT table, QUIC/game " -"friendly). Choose stricter only for specific UDP issues." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:377 -msgid "" -"sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key " -"(Password above) must be 12-255 bytes for v6." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:305 -msgid "sing-box server" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:466 -msgid "uTLS fingerprint" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:467 -msgid "" -"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting " -"resistance." -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/status.js:97 -msgid "unchecked" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1035 -msgid "unique UCI identifier" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1137 -msgid "unique value" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:809 -msgid "unknown error" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:94 -#: htdocs/luci-static/resources/view/homeproxy/node.js:202 -#: htdocs/luci-static/resources/view/homeproxy/node.js:531 -msgid "v1" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:95 -#: htdocs/luci-static/resources/view/homeproxy/node.js:203 -#: htdocs/luci-static/resources/view/homeproxy/node.js:532 -msgid "v2" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:204 -msgid "v3" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:383 -msgid "v4" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/server.js:269 -msgid "v5" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/node.js:384 -#: htdocs/luci-static/resources/view/homeproxy/server.js:270 -msgid "v6" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190 -msgid "valid DNS server address" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83 -#: htdocs/luci-static/resources/view/homeproxy/node.js:727 -#: htdocs/luci-static/resources/view/homeproxy/node.js:730 -msgid "valid URL" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1085 -msgid "valid base64 key with %d characters" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203 -msgid "valid hostname" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1117 -msgid "valid port range (port1:port2)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112 -msgid "valid port value" -msgstr "" - -#: htdocs/luci-static/resources/homeproxy.js:1148 -msgid "valid uuid" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:402 -msgid "wrong-ack" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:401 -msgid "wrong-checksum" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:403 -msgid "wrong-md5" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:400 -msgid "wrong-sequence (default)" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:404 -msgid "wrong-timestamp" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123 -msgid "{tag} in URL when extra tags are used" -msgstr "" - -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126 -msgid "{tag} in initial path when extra tags are used" -msgstr "" diff --git a/luci-app-homeproxy-pro-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration b/luci-app-homeproxy-pro-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration deleted file mode 100644 index a2082d0c2..000000000 --- a/luci-app-homeproxy-pro-pro/root/etc/uci-defaults/luci-homeproxy-pro-migration +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh - -ucode "/etc/homeproxy/scripts/migrate_config.uc" - -exit 0 diff --git a/luci-app-homeproxy-pro-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json b/luci-app-homeproxy-pro-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json deleted file mode 100644 index 9892a9b97..000000000 --- a/luci-app-homeproxy-pro-pro/root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json +++ /dev/null @@ -1,45 +0,0 @@ -{ - "admin/services/homeproxy": { - "title": "HomeProxy", - "order": 10, - "action": { - "type": "firstchild" - }, - "depends": { - "acl": [ "luci-app-homeproxy" ], - "uci": { "homeproxy": true } - } - }, - "admin/services/homeproxy/client": { - "title": "Client Settings", - "order": 10, - "action": { - "type": "view", - "path": "homeproxy/client" - } - }, - "admin/services/homeproxy/node": { - "title": "Node Settings", - "order": 15, - "action": { - "type": "view", - "path": "homeproxy/node" - } - }, - "admin/services/homeproxy/server": { - "title": "Server Settings", - "order": 20, - "action": { - "type": "view", - "path": "homeproxy/server" - } - }, - "admin/services/homeproxy/status": { - "title": "Service Status", - "order": 30, - "action": { - "type": "view", - "path": "homeproxy/status" - } - } -} diff --git a/luci-app-homeproxy-pro-pro/tests/ucode/test_migrate_config.uc b/luci-app-homeproxy-pro-pro/tests/ucode/test_migrate_config.uc deleted file mode 100644 index 1ef7dc628..000000000 --- a/luci-app-homeproxy-pro-pro/tests/ucode/test_migrate_config.uc +++ /dev/null @@ -1,144 +0,0 @@ -#!/usr/bin/ucode -/* - * SPDX-License-Identifier: GPL-2.0-only - * - * Driver for tests/ucode/test_migrate_config.sh. - * - * migrate_config.uc has no exports: the migration executes at import - * time and writes through a UCI cursor. The staged copy of - * migrate_config.uc has been rewritten by the runner so its cursor - * reads ARGV[0] (the sandbox dir) instead of /etc/config - so this - * driver just imports it and lets the side effect run. - * - * The assertions below then re-read the sandbox and check the - * post-state step by step, so a failure names the migration step - * that regressed rather than "migrate broke something". - */ - -'use strict'; - -import { cursor } from 'uci'; - -import 'migrate_config'; - -const uci = cursor(ARGV[0]); -uci.load('homeproxy'); - -let failures = 0, - checks = 0; - -function expect(name, actual, want) { - checks++; - if (sprintf('%J', actual) !== sprintf('%J', want)) { - printf('FAIL %s: expected %J, got %J\n', name, want, actual); - failures++; - } -} - -/* --- infra section ---------------------------------------------------- */ - -/* chinadns-ng removed: china_dns_port deleted. */ -expect('infra.china_dns_port deleted', uci.get('homeproxy', 'infra', 'china_dns_port'), null); - -/* github_token moved from infra to config. */ -expect('config.github_token set', uci.get('homeproxy', 'config', 'github_token'), 'secret'); -expect('infra.github_token deleted', uci.get('homeproxy', 'infra', 'github_token'), null); - -/* ntp_server introduced, defaults to the 'nil' sentinel. */ -expect('infra.ntp_server default', uci.get('homeproxy', 'infra', 'ntp_server'), 'nil'); - -/* tun_gso deprecated in sing-box 1.11: absent here, so nothing to do - - * assert it stays absent rather than flapping to a default. */ -expect('infra.tun_gso stays absent', uci.get('homeproxy', 'infra', 'tun_gso'), null); - -/* --- config section --------------------------------------------------- */ - -/* single-value chinadns server: legacy 'wan_114' maps to 114.114.114.114. */ -expect('config.china_dns_server→114', uci.get('homeproxy', 'config', 'china_dns_server'), '114.114.114.114'); - -/* log_level introduced, defaults to 'warn'. */ -expect('config.log_level default', uci.get('homeproxy', 'config', 'log_level'), 'warn'); - -/* routing_port='all' means "every port" = no option at all. */ -expect('config.routing_port deleted', uci.get('homeproxy', 'config', 'routing_port'), null); - -/* --- dns section ------------------------------------------------------ */ - -/* default_server='block-dns' becomes 'default-dns' plus an appended - * reject rule that reproduces the old "block everything" behaviour. */ -expect('dns.default_server→default-dns', uci.get('homeproxy', 'dns', 'default_server'), 'default-dns'); -expect('dns final-block action', uci.get('homeproxy', '_migration_dns_final_block', 'action'), 'reject'); -expect('dns final-block enabled', uci.get('homeproxy', '_migration_dns_final_block', 'enabled'), '1'); - -/* sing-box 1.14 deprecated DNS semantics. */ -expect('dns.independent_cache deleted', uci.get('homeproxy', 'dns', 'independent_cache'), null); -expect('dns.store_rdrc→store_dns', uci.get('homeproxy', 'dns', 'cache_file_store_dns'), '1'); -expect('dns.store_rdrc deleted', uci.get('homeproxy', 'dns', 'cache_file_store_rdrc'), null); -expect('dns.rdrc_timeout deleted', uci.get('homeproxy', 'dns', 'cache_file_rdrc_timeout'), null); - -/* --- dns_server: legacy address form ---------------------------------- */ - -/* 'tls://1.1.1.1:853' splits into type/server/server_port, and the - * legacy address key is dropped so the generator stops reading it. */ -expect('ds_default.type', uci.get('homeproxy', 'ds_default', 'type'), 'tls'); -expect('ds_default.server', uci.get('homeproxy', 'ds_default', 'server'), '1.1.1.1'); -expect('ds_default.server_port', uci.get('homeproxy', 'ds_default', 'server_port'), '853'); -expect('ds_default.address deleted', uci.get('homeproxy', 'ds_default', 'address'), null); - -/* strategy / client_subnet moved out of the dns_server and into the - * dns_rule that referenced it. */ -expect('ds_default.strategy deleted', uci.get('homeproxy', 'ds_default', 'strategy'), null); -expect('ds_default.client_subnet deleted', uci.get('homeproxy', 'ds_default', 'client_subnet'), null); -expect('dr_uses_default.strategy', uci.get('homeproxy', 'dr_uses_default', 'strategy'), 'prefer_ipv4'); -expect('dr_uses_default.client_subnet', uci.get('homeproxy', 'dr_uses_default', 'client_subnet'), '1.2.3.0/24'); - -/* RCode-as-address migrated into the predefined-rcode rule form; the - * dns_server section itself is removed. */ -expect('ds_rcode section deleted', uci.get_all('homeproxy', 'ds_rcode'), null); - -/* --- dns_rule --------------------------------------------------------- */ - -/* server='block-dns' moved into action='reject'. */ -expect('dr_block.action=reject', uci.get('homeproxy', 'dr_block', 'action'), 'reject'); -expect('dr_block.server deleted', uci.get('homeproxy', 'dr_block', 'server'), null); - -/* rule_set_ipcidr_match_source renamed to rule_set_ip_cidr_match_source. */ -expect('dr_stale.old key deleted', uci.get('homeproxy', 'dr_stale', 'rule_set_ipcidr_match_source'), null); -expect('dr_stale.new key set', uci.get('homeproxy', 'dr_stale', 'rule_set_ip_cidr_match_source'), '1'); - -/* a rule with no action gets the 'route' default. */ -expect('dr_uses_default.action=route', uci.get('homeproxy', 'dr_uses_default', 'action'), 'route'); - -/* --- routing_rule ----------------------------------------------------- */ - -/* outbound='block-out' moved into action='reject'. */ -expect('rr_block.action=reject', uci.get('homeproxy', 'rr_block', 'action'), 'reject'); -expect('rr_block.outbound deleted', uci.get('homeproxy', 'rr_block', 'outbound'), null); - -/* --- server ----------------------------------------------------------- */ - -/* auto_firewall was a single global flag; it is redistributed onto - * each server section as firewall='1'. */ -expect('srv_one.firewall set', uci.get('homeproxy', 'srv_one', 'firewall'), '1'); -expect('server.auto_firewall deleted', uci.get('homeproxy', 'server', 'auto_firewall'), null); - -/* sniff_override deprecated in sing-box 1.11. */ -expect('srv_one.sniff_override deleted', uci.get('homeproxy', 'srv_one', 'sniff_override'), null); - -/* server log_level introduced, defaults to 'warn'. */ -expect('server.log_level default', uci.get('homeproxy', 'server', 'log_level'), 'warn'); - -/* --- migration bookkeeping -------------------------------------------- */ - -/* the migration marker section must survive so the crontab cleanup - * does not run twice. */ -expect('migration.crontab marker', uci.get('homeproxy', 'migration', 'crontab'), '1'); - -/* --- summary ---------------------------------------------------------- */ - -if (failures > 0) - printf('FAIL: %d/%d checks failed\n', failures, checks); -else - printf('PASS: %d checks\n', checks); - -exit(failures > 0 ? 1 : 0); diff --git a/luci-app-homeproxy-pro-pro/.gitignore b/luci-app-homeproxy-pro/.gitignore similarity index 53% rename from luci-app-homeproxy-pro-pro/.gitignore rename to luci-app-homeproxy-pro/.gitignore index 8c9d5901a..1634f28a2 100644 --- a/luci-app-homeproxy-pro-pro/.gitignore +++ b/luci-app-homeproxy-pro/.gitignore @@ -1,3 +1,3 @@ .DS_Store -/homeproxy +/homeproxy-pro /docs/ diff --git a/luci-app-homeproxy-pro-pro/LICENSE b/luci-app-homeproxy-pro/LICENSE similarity index 100% rename from luci-app-homeproxy-pro-pro/LICENSE rename to luci-app-homeproxy-pro/LICENSE diff --git a/luci-app-homeproxy-pro-pro/Makefile b/luci-app-homeproxy-pro/Makefile similarity index 74% rename from luci-app-homeproxy-pro-pro/Makefile rename to luci-app-homeproxy-pro/Makefile index 880c463b1..54de3d01f 100644 --- a/luci-app-homeproxy-pro-pro/Makefile +++ b/luci-app-homeproxy-pro/Makefile @@ -21,9 +21,9 @@ LUCI_DEPENDS:= \ +kmod-tun \ +ucode-mod-digest -PKG_NAME:=luci-app-homeproxy +PKG_NAME:=luci-app-homeproxy-pro PKG_VERSION:=28.9.1.14 -PKG_RELEASE:=2 +PKG_RELEASE:=4 # Only files the package actually ships belong here. The previous list named # four paths that exist nowhere in the tree - certs/ and ruleset/ are created at @@ -31,16 +31,16 @@ PKG_RELEASE:=2 # those declarations did nothing. What is listed instead is the resource data # the router updates by itself: on a running device those files are newer than # the ones in the package, and without this an upgrade would overwrite them. -define Package/luci-app-homeproxy/conffiles -/etc/config/homeproxy -/etc/homeproxy/resources/china_ip4.txt -/etc/homeproxy/resources/china_ip6.txt -/etc/homeproxy/resources/china_list.txt -/etc/homeproxy/resources/gfw_list.txt -/etc/homeproxy/resources/china_ip4.ver -/etc/homeproxy/resources/china_ip6.ver -/etc/homeproxy/resources/china_list.ver -/etc/homeproxy/resources/gfw_list.ver +define Package/luci-app-homeproxy-pro/conffiles +/etc/config/homeproxy-pro +/etc/homeproxy-pro/resources/china_ip4.txt +/etc/homeproxy-pro/resources/china_ip6.txt +/etc/homeproxy-pro/resources/china_list.txt +/etc/homeproxy-pro/resources/gfw_list.txt +/etc/homeproxy-pro/resources/china_ip4.ver +/etc/homeproxy-pro/resources/china_ip6.ver +/etc/homeproxy-pro/resources/china_list.ver +/etc/homeproxy-pro/resources/gfw_list.ver endef include $(TOPDIR)/feeds/luci/luci.mk diff --git a/luci-app-homeproxy-pro-pro/README.md b/luci-app-homeproxy-pro/README.md similarity index 82% rename from luci-app-homeproxy-pro-pro/README.md rename to luci-app-homeproxy-pro/README.md index 79afe11de..7c64b2ee3 100644 --- a/luci-app-homeproxy-pro-pro/README.md +++ b/luci-app-homeproxy-pro/README.md @@ -10,7 +10,7 @@ ## 项目定位 -本项目是试验性产品,对 [homeproxy](https://github.com/szwjp/luci-app-homeproxy) 架构重构版:以 sing-box **1.14** 内核为唯一目标, +本项目是试验性产品,对 [homeproxy-pro](https://github.com/szwjp/luci-app-homeproxy-pro) 架构重构版:以 sing-box **1.14** 内核为唯一目标, 充分利用 1.14 引入的新特性,不再兼容 1.13 及更早内核。 ## 运行要求 @@ -23,16 +23,16 @@ | 维度 | upstream 形态 | pro 形态 | 证据 | |---|---|---|---| -| 后端架构 | 单文件巨型(`generate_client.uc` 1217 行 / 40 KB;`parse_uri.uc` ~400 行 / 15 KB) | orchestrator + 5 子层(`parser` / `config` / `generator` / `subscription` / `runtime`)+ 公共库(`homeproxy.uc` / `firewall_utils.uc`)+ table-driven adapters | `root/etc/homeproxy/scripts/{config,parser,generator,subscription,runtime}/` | -| 前端架构 | 单一 66 KB `client.js` | `client.js` thin 入口 + 8 个 Tab 模块(`access` / `common` / `dns` / `nodes` / `routing` / `subscription` / `tun_dns` / `udp_nat`)+ 共享 helpers + 集中 `RPC.declare` | `htdocs/luci-static/resources/view/homeproxy/client/` | -| 协议建模 | 单 `parse_uri.uc` 内 13 个 scheme 分支 | `parser/{uri,flatten,normalize,mapping,protocols,validator}.uc` 6 个文件 + canonical Node 模型 + adapter table | `root/etc/homeproxy/scripts/parser/` + `config/{model,adapter}.uc` | -| Tab 模块化 | 1 个 `client.js` 含 12 个 Tab 渲染 | `homeproxy.js` (1153 行 helpers) + 4 顶层 view + 8 个 `client/*.js`;helpers 集中 RPC / MD5 / validators / statusPoller / renderSectionAdd / uploadCertificate | `view/homeproxy/client/{routing,nodes,dns,access,subscription,udp_nat,tun_dns,common}.js` | +| 后端架构 | 单文件巨型(`generate_client.uc` 1217 行 / 40 KB;`parse_uri.uc` ~400 行 / 15 KB) | orchestrator + 5 子层(`parser` / `config` / `generator` / `subscription` / `runtime`)+ 公共库(`homeproxy-pro.uc` / `firewall_utils.uc`)+ table-driven adapters | `root/etc/homeproxy-pro/scripts/{config,parser,generator,subscription,runtime}/` | +| 前端架构 | 单一 66 KB `client.js` | `client.js` thin 入口 + 8 个 Tab 模块(`access` / `common` / `dns` / `nodes` / `routing` / `subscription` / `tun_dns` / `udp_nat`)+ 共享 helpers + 集中 `RPC.declare` | `htdocs/luci-static/resources/view/homeproxy-pro/client/` | +| 协议建模 | 单 `parse_uri.uc` 内 13 个 scheme 分支 | `parser/{uri,flatten,normalize,mapping,protocols,validator}.uc` 6 个文件 + canonical Node 模型 + adapter table | `root/etc/homeproxy-pro/scripts/parser/` + `config/{model,adapter}.uc` | +| Tab 模块化 | 1 个 `client.js` 含 12 个 Tab 渲染 | `homeproxy-pro.js` (1153 行 helpers) + 4 顶层 view + 8 个 `client/*.js`;helpers 集中 RPC / MD5 / validators / statusPoller / renderSectionAdd / uploadCertificate | `view/homeproxy-pro/client/{routing,nodes,dns,access,subscription,udp_nat,tun_dns,common}.js` | ### 稳定性 | 维度 | upstream 形态 | pro 形态 | 证据 | |---|---|---|---| -| reload 事务 | 写完直接 restart | 生成 → `sing-box check` → 新实例 probe → 健康门(连续采样)→ 提为 known-good;不健康自动回滚 | `root/etc/init.d/homeproxy` + `runtime/{config,health}.sh` | +| reload 事务 | 写完直接 restart | 生成 → `sing-box check` → 新实例 probe → 健康门(连续采样)→ 提为 known-good;不健康自动回滚 | `root/etc/init.d/homeproxy-pro` + `runtime/{config,health}.sh` | | 健康门 | `ubus` + `pgrep` 简单轮询 | `hp_wait_service` 连续 N 次采样(默认 3/30s)+ `netstat -p` 端口归属校验;不健康自动 rollback | `runtime/health.sh:hp_wait_service` | | UCI 1.14 迁移 | r10/r11 自述较弱 | `migrate_config.uc` 36 checks 覆盖 1.14 DNS renames / `dns_server.address` 拆分 / `rcode://` → predefined rule / `rule_set_ipcidr_match_source` rename / `block-out`/`block-dns` → `action='reject'` / `auto_firewall` 重分发 / `block-dns` default-server | `scripts/migrate_config.uc` + `tests/ucode/test_migrate_config.sh` | | sing-box 版本门 | 无 | `hp_require_singbox()` 在 start 时显式拒绝 `<1.14`,启动失败记录明确日志 | `runtime/service.sh:hp_require_singbox` | @@ -41,12 +41,12 @@ | 维度 | upstream 形态 | pro 形态 | 证据 | |---|---|---|---| -| capabilities | `CAP_SYS_PTRACE` + `CAP_NET_RAW` + `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(4 个) | 仅 `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(2 个) | `root/etc/capabilities/homeproxy.json` + arch-guard guard 12 | -| 路径白名单(cert / rule) | 仅前端 UI 校验 | `validateHomeProxyPath()` 拒 traversal + relative,限 `/etc/homeproxy/` 与 `/tmp/homeproxy_*`;`validateCertificatePath()` 限 `/etc/homeproxy/certs/` `/etc/acme/` `/etc/ssl/`;前后端列表 arch-guard 29 锁同步 | `homeproxy.uc:56 / :104` + `homeproxy.js:HP_CERT_PATH_ROOTS` | -| 订阅 token 脱敏 | 调用点各自脱敏 | `wGETVerbose()` 内部脱敏(scheme/host/port 保留,userinfo / path / query 全脱;mock 与生产 `redactUrl` 由 arch-guard 35 锁一致) | `homeproxy.uc:226 (redactUrl)` + arch-guard 14 / 35 | +| capabilities | `CAP_SYS_PTRACE` + `CAP_NET_RAW` + `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(4 个) | 仅 `CAP_NET_ADMIN` + `CAP_NET_BIND_SERVICE`(2 个) | `root/etc/capabilities/homeproxy-pro.json` + arch-guard guard 12 | +| 路径白名单(cert / rule) | 仅前端 UI 校验 | `validateHomeProxyPath()` 拒 traversal + relative,限 `/etc/homeproxy-pro/` 与 `/tmp/homeproxy_*`;`validateCertificatePath()` 限 `/etc/homeproxy-pro/certs/` `/etc/acme/` `/etc/ssl/`;前后端列表 arch-guard 29 锁同步 | `homeproxy-pro.uc:56 / :104` + `homeproxy-pro.js:HP_CERT_PATH_ROOTS` | +| 订阅 token 脱敏 | 调用点各自脱敏 | `wGETVerbose()` 内部脱敏(scheme/host/port 保留,userinfo / path / query 全脱;mock 与生产 `redactUrl` 由 arch-guard 35 锁一致) | `homeproxy-pro.uc:226 (redactUrl)` + arch-guard 14 / 35 | | crontab 权限 | `sed -i`(GNU-only)+ mv 后留给 0644 | `sed + mv` 跨 busybox / GNU / BSD + `chmod 600` 修 root crontab 0644 → 0600 | `runtime/service.sh:hp_crontab_drop` | | procd jail mount | 默认未对所有模式 mount | tun/wireguard 自动 unjail(要 host netns),其他模式 mount HP_DIR + /etc/acme + /etc/ssl + /tmp/dhcp.leases + /etc/localtime + /etc/TZ | `runtime/service.sh:hp_procd_client_instance` | -| cert upload 并发 | 4 个按钮共用 `/tmp/homeproxy_certificate.tmp` | 4 个按钮各自 `/tmp/homeproxy_cert_.tmp`,ACL 显式列 4 个写路径 | `homeproxy.js:uploadCertificate` + `acl.d/luci-app-homeproxy.json` | +| cert upload 并发 | 4 个按钮共用 `/tmp/homeproxy_certificate.tmp` | 4 个按钮各自 `/tmp/homeproxy_cert_.tmp`,ACL 显式列 4 个写路径 | `homeproxy-pro.js:uploadCertificate` + `acl.d/luci-app-homeproxy-pro.json` | | firewall 字段白名单 | 部分值校验 | `firewall_pre.uc` `tun_name` 严格 `^[A-Za-z0-9_.-]{1,15}$` 防 nft 注入;`firewall_post.ut` 每个 UCI 派生值走 `*_to_nftarr()` 校验器(guard 11 锁模板全覆盖) | `firewall_pre.uc:32` + `firewall_utils.uc` | ### 测试 / CI @@ -57,20 +57,20 @@ | 测试规模 | 7 个脚本 / 约 27 个 check | `tests/` 下 80 个文件:ucode 套件 + 8 个 frontend 验证器 + golden snapshot + mocks + 离线 runtime 测试;arch-guard 单跑 135 个 check | `tests/print-stats.sh` 实测 | | CI | `build` + `i18n` 两条平行 workflow | `build` 用 `workflow_call` 依赖 `arch-test`;`arch-test` 8 步(翻译 fast gate → toolchain cache → toolchain 校验 → `tests/run.sh` 唯一套件入口 → 模板检查);`on-target` 手动 ssh + 不安装 | `.github/workflows/{arch-test,build,on-target}.yml` | | uCode dialect pin | 跟随 upstream HEAD(已放宽) | pin `UCODE_REV=85922056ef7abeace3cca3ab28bc1ac2d88e31b1`(完整 40 位 commit)+ `test_ucode_grammar.sh` canary 锁 strict 语法(拒 `export function … }` 无 `;`、对象/数组解构) | `tests/toolchain/build-ucode-linux.sh:UCODE_REV` + `tests/ucode/test_ucode_grammar.sh` | -| MD5 实现 | 388 行 minified snippet;vmess 分支漏 `vmess_global_padding` | RFC 1321 完整实现 + `tests/frontend-md5.js` 锁 RFC 向量 + 与 Node `crypto.createHash('md5')` 双向 cross-check(44 / 44 PASS) | `homeproxy.js:calcStringMD5` + `tests/frontend-md5.js` | +| MD5 实现 | 388 行 minified snippet;vmess 分支漏 `vmess_global_padding` | RFC 1321 完整实现 + `tests/frontend-md5.js` 锁 RFC 向量 + 与 Node `crypto.createHash('md5')` 双向 cross-check(44 / 44 PASS) | `homeproxy-pro.js:calcStringMD5` + `tests/frontend-md5.js` | ### UX / Ops | 维度 | upstream 形态 | pro 形态 | 证据 | |---|---|---|---| -| Status 语义 | 2 态(RUNNING / NOT RUNNING) | 3 态(+ **STATUS UNKNOWN** 黄),区分 "rpc 没回" vs "service 死了" | `homeproxy.js:statusLabel` + `client.js:renderStatus` | -| 前端特异性 bug 修复 | `stubValidator` 缺 `factory` 致 ip6addr TypeError;`L.bind(hp.renderSectionAdd, …)` 把 factory 塞 `extra_class` 槽致 `InvalidCharacterError` | 已修:`stubValidator` 持 `factory: validation`;`renderSectionAdd` 改薄 wrap(arch-guard 22 / 23 锁 binding 形态) | `view/homeproxy/client.js:73` + `homeproxy.js:1018-1026` | +| Status 语义 | 2 态(RUNNING / NOT RUNNING) | 3 态(+ **STATUS UNKNOWN** 黄),区分 "rpc 没回" vs "service 死了" | `homeproxy-pro.js:statusLabel` + `client.js:renderStatus` | +| 前端特异性 bug 修复 | `stubValidator` 缺 `factory` 致 ip6addr TypeError;`L.bind(hp.renderSectionAdd, …)` 把 factory 塞 `extra_class` 槽致 `InvalidCharacterError` | 已修:`stubValidator` 持 `factory: validation`;`renderSectionAdd` 改薄 wrap(arch-guard 22 / 23 锁 binding 形态) | `view/homeproxy-pro/client.js:73` + `homeproxy-pro.js:1018-1026` | | 协议增改成本 | 改 110 行 ternary(README 旧行) | 改 5 个表行:`model.uc CREDENTIALS` + `loader.uc PROTOCOL_OPTIONS` + `adapter.uc OPTION_FIELDS` + `fixtures/` + golden snapshot;arch-guard 5 强制 fixtures 同步 | `config/{model,loader,adapter}.uc` + `tests/fixtures/generators/` | | 资源更新 | jsdelivr 单一镜像 | 4 镜像 fallback(`fastly.jsdelivr.net` / `gcore.jsdelivr.net` / `cdn.jsdelivr.net` / `raw.githubusercontent.com`)+ UI「上次成功时间」(arch-guard 17 / 18 锁) | `runtime/dns.sh` + arch-guard 17 / 18 | -| ECH 上传 | 后端 case 缺失 | 补齐 `client_ech_conf` 标签 + `isValidECHConfig()` PEM 校验;ACL 显式列 4 个 tmp 路径 | `homeproxy.uc:isValidECHConfig` + `luci.homeproxy:certificate_write` | +| ECH 上传 | 后端 case 缺失 | 补齐 `client_ech_conf` 标签 + `isValidECHConfig()` PEM 校验;ACL 显式列 4 个 tmp 路径 | `homeproxy-pro.uc:isValidECHConfig` + `luci.homeproxy-pro:certificate_write` | | 默认测试主机 | 硬编码作者内网 IP | `HP_TEST_HOST` 注入,未设时 fail-fast;`on-target.yml` ;ssh 前 `ssh -o ConnectTimeout=10` 先确认可达(不要从记忆里写地址) | `tests/run.sh` + `.github/workflows/on-target.yml` | | 文档 | 标准(README + CONTRIBUTING + SECURITY) | 精简(README only),`docs/` 自 2026-09-16 起只留本地(untrack + `.gitignore`),远端公开仓库不再发布 | `README.md` + `docs/`(本地) | -| 路由 ops | — | 替换文件只动 JS / menu / acl / rpcd ucode(reload 不影响网络);更深层改动前 `cp /etc/config/homeproxy /tmp/hp-r-preflight-/`,保留上一发版 .apk 24h;`killall -HUP rpcd` 由 apk scripts 自动做 | `runtime/{config,service}.sh` | +| 路由 ops | — | 替换文件只动 JS / menu / acl / rpcd ucode(reload 不影响网络);更深层改动前 `cp /etc/config/homeproxy-pro /tmp/hp-r-preflight-/`,保留上一发版 .apk 24h;`killall -HUP rpcd` 由 apk scripts 自动做 | `runtime/{config,service}.sh` | **一句话总结**:pro 的核心价值是**把"单文件能跑"变成"orchestrator + table-driven adapter + 可独立测试的模块"**,并把约束、质量、回滚三件事从靠人盯变成靠代码执行(arch-guard 135 checks 静态锁住跨文件不变量)。 diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/homeproxy-pro.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/homeproxy-pro.js similarity index 97% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/homeproxy-pro.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/homeproxy-pro.js index 9f30fb0d1..8949aedb8 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/homeproxy-pro.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/homeproxy-pro.js @@ -28,11 +28,11 @@ const HTTP_PING_HEALTH_CHECK_HINT = _('Specifies the timeout duration (in second const HTTP_PING_KEEPALIVE_HINT = _('The timeout (in seconds) that after performing a keepalive check, the client will wait for activity. If no activity is detected, the connection will be closed.'); /* Certificates the backend lets sing-box read. This list mirrors - CERT_PATH_ROOTS in /etc/homeproxy/scripts/homeproxy.uc, and + CERT_PATH_ROOTS in /etc/homeproxy-pro/scripts/homeproxy-pro.uc, and tests/arch-guard.sh guard 29 fails when the two drift apart: a path the UI accepted but the backend dropped made certificate_path null silently, so the TLS listener failed with nothing pointing at the path. */ -const HP_CERT_PATH_ROOTS = [ '/etc/homeproxy/certs/', '/etc/acme/', '/etc/ssl/' ]; +const HP_CERT_PATH_ROOTS = [ '/etc/homeproxy-pro/certs/', '/etc/acme/', '/etc/ssl/' ]; /* Methods whose failure has already been reported, so that a polled call cannot repeat the same notification every few seconds. */ @@ -525,7 +525,7 @@ return baseclass.extend({ o.depends('type', 'vless'); o.depends('type', 'vmess'); o.onchange = function(ev, section_id, value) { - let desc = this.map.findElement('id', 'cbid.homeproxy.%s.transport'.format(section_id)).nextElementSibling; + let desc = this.map.findElement('id', 'cbid.homeproxy-pro.%s.transport'.format(section_id)).nextElementSibling; if (value === 'http') desc.innerHTML = TRANSPORT_HTTP_HINT; else if (value === 'quic') @@ -533,20 +533,20 @@ return baseclass.extend({ else desc.innerHTML = TRANSPORT_NONE_HINT; - let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild; + let tls = this.map.findElement('id', 'cbid.homeproxy-pro.%s.tls'.format(section_id)).firstElementChild; if ((value === 'http' && tls.checked) || (value === 'grpc' && !features.with_grpc)) { - this.map.findElement('id', 'cbid.homeproxy.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML = + this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML = (side === 'server') ? HTTP_IDLE_GOAWAY_HINT : HTTP_IDLE_HEALTH_CHECK_HINT; if (side !== 'server') - this.map.findElement('id', 'cbid.homeproxy.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML = + this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML = HTTP_PING_HEALTH_CHECK_HINT; } else if (value === 'grpc' && features.with_grpc) { - this.map.findElement('id', 'cbid.homeproxy.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML = + this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_idle_timeout'.format(section_id)).nextElementSibling.innerHTML = HTTP_IDLE_KEEPALIVE_HINT; if (side !== 'server') - this.map.findElement('id', 'cbid.homeproxy.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML = + this.map.findElement('id', 'cbid.homeproxy-pro.%s.http_ping_timeout'.format(section_id)).nextElementSibling.innerHTML = HTTP_PING_KEEPALIVE_HINT; } } @@ -655,7 +655,7 @@ return baseclass.extend({ o.validate = function(section_id, _value) { if (section_id) { let type = this.map.lookupOption('type', section_id)[0].formvalue(section_id); - let tls = this.map.findElement('id', 'cbid.homeproxy.%s.tls'.format(section_id)).firstElementChild; + let tls = this.map.findElement('id', 'cbid.homeproxy-pro.%s.tls'.format(section_id)).firstElementChild; if ((options.tls_forced_types || []).includes(type)) { tls.checked = true; @@ -833,7 +833,7 @@ return baseclass.extend({ * this only covers "the call did not come back". */ rpcCall(method, args, options) { options = options || {}; - const object = options.object || 'luci.homeproxy'; + const object = options.object || 'luci.homeproxy-pro'; const call = rpc.declare({ object: object, @@ -868,7 +868,7 @@ return baseclass.extend({ * that had already drifted (its vmess branch lost vmess_global_padding) * and that validated nothing before writing the node into UCI. */ parseShareLink(uri) { - /* Backend (luci.homeproxy node_parse) returns one of + /* Backend (luci.homeproxy-pro node_parse) returns one of * { config: {...the-node-fields}, error: '' } on success * { config: null, error: '...' } on failure * (rpcParse's `expect` would unpack-and-type-check, which the @@ -1061,7 +1061,7 @@ return baseclass.extend({ * land in the certs/ directory. The filename argument is the * UCI option name (e.g. server_publickey), which we map onto * a stable per-button path. The ACL write list in - * acl.d/luci-app-homeproxy.json enumerates all four paths. + * acl.d/luci-app-homeproxy-pro.json enumerates all four paths. * * The signature is (type, filename, ev) on purpose: L.bind() * binds arguments *in front of* the event the Button hands in @@ -1103,7 +1103,7 @@ return baseclass.extend({ /etc/ssl/../shadow, and sing-box reads these paths as root. */ if (value.match(/(^|\/)\.\.(\/|$)/) || !HP_CERT_PATH_ROOTS.some((root) => value.indexOf(root) === 0 && value.length > root.length)) - return _('Expecting: %s').format(_('/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/...')); + return _('Expecting: %s').format(_('/etc/homeproxy-pro/certs/..., /etc/acme/..., /etc/ssl/...')); return true; }, diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js similarity index 87% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js index 56019dfc1..be5e03ae9 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client.js @@ -13,15 +13,15 @@ 'require validation'; 'require view'; -'require homeproxy as hp'; -'require view.homeproxy.client.common as common'; -'require view.homeproxy.client.routing as routing'; -'require view.homeproxy.client.nodes as nodes'; -'require view.homeproxy.client.dns as dns'; -'require view.homeproxy.client.access as access'; -'require view.homeproxy.client.subscription as subscription'; -'require view.homeproxy.client.udp_nat as udp_nat'; -'require view.homeproxy.client.tun_dns as tun_dns'; +'require homeproxy-pro as hp'; +'require view.homeproxy-pro.client.common as common'; +'require view.homeproxy-pro.client.routing as routing'; +'require view.homeproxy-pro.client.nodes as nodes'; +'require view.homeproxy-pro.client.dns as dns'; +'require view.homeproxy-pro.client.access as access'; +'require view.homeproxy-pro.client.subscription as subscription'; +'require view.homeproxy-pro.client.udp_nat as udp_nat'; +'require view.homeproxy-pro.client.tun_dns as tun_dns'; /* Module-scoped guard: register the view-level status poll exactly * once, regardless of how many times the view's render() runs (LuCI @@ -39,13 +39,13 @@ function getServiceStatus() { * "the status query did not answer" from "the service is not running". * With the default `{}` the try/catch below swallowed the difference and * reported a failed query as NOT RUNNING. */ - return hp.rpcCall('list', ['homeproxy'], + return hp.rpcCall('list', ['homeproxy-pro'], { object: 'service', params: ['name'], expect: { '': {} }, fallback: null }).then((res) => { if (res === null) return null; try { - return res['homeproxy']['instances']['sing-box-c']['running'] === true; + return res['homeproxy-pro']['instances']['sing-box-c']['running'] === true; } catch (e) { /* It answered, and there is no such instance. */ return false; @@ -93,7 +93,7 @@ let stubValidator = { return view.extend({ load() { return Promise.all([ - uci.load('homeproxy'), + uci.load('homeproxy-pro'), hp.getBuiltinFeatures(), network.getHostHints() ]); @@ -107,7 +107,7 @@ return view.extend({ /* Cache all configured proxy nodes, they will be called multiple times */ let proxy_nodes = {}; - uci.sections('homeproxy', 'node', (res) => { + uci.sections('homeproxy-pro', 'node', (res) => { let nodeaddr = ((res.type === 'direct') ? res.override_address : res.address) || '', nodeport = ((res.type === 'direct') ? res.override_port : res.port) || ''; @@ -116,7 +116,7 @@ return view.extend({ String.format('[%s]', nodeaddr) : nodeaddr) + ':' + nodeport)); }); - m = new form.Map('homeproxy', _('HomeProxy'), + m = new form.Map('homeproxy-pro', _('HomeProxy'), _('The modern ImmortalWrt proxy platform for ARM64/AMD64.')); s = m.section(form.TypedSection); @@ -148,7 +148,7 @@ return view.extend({ ensureStatusPoll(); - s = m.section(form.NamedSection, 'config', 'homeproxy'); + s = m.section(form.NamedSection, 'config', 'homeproxy-pro'); /* ctx bundles the values each tab needs so the tab modules don't * have to recompute them. The destructuring keys are intentionally diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js similarity index 88% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js index 633eb3ae4..ea2a2f09d 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/access.js @@ -10,7 +10,7 @@ 'require form'; 'require uci'; -'require homeproxy as hp'; +'require homeproxy-pro as hp'; 'require tools.firewall as fwtool'; 'require tools.widgets as widgets'; @@ -24,7 +24,7 @@ function render(ctx) { s.tab('control', _('Access Control')); - o = s.taboption('control', form.SectionValue, '_control', form.NamedSection, 'control', 'homeproxy'); + o = s.taboption('control', form.SectionValue, '_control', form.NamedSection, 'control', 'homeproxy-pro'); ss = o.subsection; /* Interface control start */ @@ -55,7 +55,7 @@ function render(ctx) { so.depends('lan_proxy_mode', 'except_listed'); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_direct_ipv6_ips', _('Direct IPv6 IP-s'), null, 'ipv6', hosts, true); - so.depends({'lan_proxy_mode': 'except_listed', 'homeproxy.config.ipv6_support': '1'}); + so.depends({'lan_proxy_mode': 'except_listed', 'homeproxy-pro.config.ipv6_support': '1'}); so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_direct_mac_addrs', _('Direct MAC-s'), null, hosts); so.depends('lan_proxy_mode', 'except_listed'); @@ -64,7 +64,7 @@ function render(ctx) { so.depends('lan_proxy_mode', 'listed_only'); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_proxy_ipv6_ips', _('Proxy IPv6 IP-s'), null, 'ipv6', hosts, true); - so.depends({'lan_proxy_mode': 'listed_only', 'homeproxy.config.ipv6_support': '1'}); + so.depends({'lan_proxy_mode': 'listed_only', 'homeproxy-pro.config.ipv6_support': '1'}); so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_proxy_mac_addrs', _('Proxy MAC-s'), null, hosts); so.depends('lan_proxy_mode', 'listed_only'); @@ -72,18 +72,18 @@ function render(ctx) { so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_gaming_mode_ipv4_ips', _('Gaming mode IPv4 IP-s'), null, 'ipv4', hosts, true); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_gaming_mode_ipv6_ips', _('Gaming mode IPv6 IP-s'), null, 'ipv6', hosts, true); - so.depends('homeproxy.config.ipv6_support', '1'); + so.depends('homeproxy-pro.config.ipv6_support', '1'); so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_gaming_mode_mac_addrs', _('Gaming mode MAC-s'), null, hosts); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_global_proxy_ipv4_ips', _('Global proxy IPv4 IP-s'), null, 'ipv4', hosts, true); - so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true}); + so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true}); so = fwtool.addIPOption(ss, 'lan_ip_policy', 'lan_global_proxy_ipv6_ips', _('Global proxy IPv6 IP-s'), null, 'ipv6', hosts, true); - so.depends({'homeproxy.config.routing_mode': /^((?!custom).)+$/, 'homeproxy.config.ipv6_support': '1'}); + so.depends({'homeproxy-pro.config.routing_mode': /^((?!custom).)+$/, 'homeproxy-pro.config.ipv6_support': '1'}); so = fwtool.addMACOption(ss, 'lan_ip_policy', 'lan_global_proxy_mac_addrs', _('Global proxy MAC-s'), null, hosts); - so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true}); + so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true}); /* LAN IP policy end */ /* WAN IP policy start */ @@ -94,14 +94,14 @@ function render(ctx) { so = ss.taboption('wan_ip_policy', form.DynamicList, 'wan_proxy_ipv6_ips', _('Proxy IPv6 IP-s')); so.datatype = 'or(ip6addr, cidr6)'; - so.depends('homeproxy.config.ipv6_support', '1'); + so.depends('homeproxy-pro.config.ipv6_support', '1'); so = ss.taboption('wan_ip_policy', form.DynamicList, 'wan_direct_ipv4_ips', _('Direct IPv4 IP-s')); so.datatype = 'or(ip4addr, cidr4)'; so = ss.taboption('wan_ip_policy', form.DynamicList, 'wan_direct_ipv6_ips', _('Direct IPv6 IP-s')); so.datatype = 'or(ip6addr, cidr6)'; - so.depends('homeproxy.config.ipv6_support', '1'); + so.depends('homeproxy-pro.config.ipv6_support', '1'); /* WAN IP policy end */ /* Proxy domain list start */ @@ -112,7 +112,7 @@ function render(ctx) { so.monospace = true; so.datatype = 'hostname'; so.description = _('One domain per line. No spaces, no comments, no wildcards; the backend rejects invalid characters and tells you which line.'); - so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true}); + so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true}); so.load = function(/* ... */) { return hp.rpcCall('acllist_read', ['proxy_list'], { params: ['type'], expect: { '': {} } }).then((res) => { @@ -142,7 +142,7 @@ function render(ctx) { * so the test below was always true and a reset wiped the file even * in custom mode, where the list is in use. Read the saved UCI value * the backend will act on. */ - let routing_mode = uci.get('homeproxy', 'config', 'routing_mode'); + let routing_mode = uci.get('homeproxy-pro', 'config', 'routing_mode'); if (routing_mode !== 'custom') return hp.rpcCall('acllist_write', ['proxy_list', ''], { params: ['type', 'content'], expect: { '': {} } }).then((ret) => { if (ret && ret.result === false) @@ -169,7 +169,7 @@ function render(ctx) { so.monospace = true; so.datatype = 'hostname'; so.description = _('One domain per line. No spaces, no comments, no wildcards; the backend rejects invalid characters and tells you which line.'); - so.depends({'homeproxy.config.routing_mode': 'custom', '!reverse': true}); + so.depends({'homeproxy-pro.config.routing_mode': 'custom', '!reverse': true}); so.load = function(/* ... */) { return hp.rpcCall('acllist_read', ['direct_list'], { params: ['type'], expect: { '': {} } }).then((res) => { @@ -187,7 +187,7 @@ function render(ctx) { } so.remove = function(/* ... */) { /* Same `this.section` mistake as the proxy list above. */ - let routing_mode = uci.get('homeproxy', 'config', 'routing_mode'); + let routing_mode = uci.get('homeproxy-pro', 'config', 'routing_mode'); if (routing_mode !== 'custom') return hp.rpcCall('acllist_write', ['direct_list', ''], { params: ['type', 'content'], expect: { '': {} } }).then((ret) => { if (ret && ret.result === false) diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js similarity index 97% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js index 3621001fd..e57ff0666 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/common.js @@ -10,7 +10,7 @@ 'require form'; 'require uci'; -'require homeproxy as hp'; +'require homeproxy-pro as hp'; /* Build the shared body of a routing/dns rule section. The two sections * differ in their tab/option names, the sniffed-protocol value list, the @@ -32,8 +32,8 @@ function renderRuleSection(s, kind, self) { ss.sortable = true; ss.nodescriptions = true; ss.modaltitle = L.bind(hp.loadModalTitle, hp, is_dns ? _('DNS rule') : _('Routing rule'), - is_dns ? _('Add a DNS rule') : _('Add a routing rule'), 'homeproxy'); - ss.sectiontitle = L.bind(hp.loadDefaultLabel, self, 'homeproxy'); + is_dns ? _('Add a DNS rule') : _('Add a routing rule'), 'homeproxy-pro'); + ss.sectiontitle = L.bind(hp.loadDefaultLabel, self, 'homeproxy-pro'); /* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound * form hands a call site's button factory to the wrong argument. */ ss.renderSectionAdd = function(extra_class) { @@ -46,8 +46,8 @@ function renderRuleSection(s, kind, self) { ss.tab('fields_process', _('Process fields')); so = ss.taboption('field_other', form.Value, 'label', _('Label')); - so.load = L.bind(hp.loadDefaultLabel, self, 'homeproxy'); - so.validate = L.bind(hp.validateUniqueValue, self, 'homeproxy', uci_type, 'label'); + so.load = L.bind(hp.loadDefaultLabel, self, 'homeproxy-pro'); + so.validate = L.bind(hp.validateUniqueValue, self, 'homeproxy-pro', uci_type, 'label'); so.modalonly = true; so = ss.taboption('field_other', form.Flag, 'enabled', _('Enable')); @@ -144,7 +144,7 @@ function renderRuleSection(s, kind, self) { delete this.keylist; delete this.vallist; - uci.sections('homeproxy', 'ruleset', (res) => { + uci.sections('homeproxy-pro', 'ruleset', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); @@ -196,7 +196,7 @@ function renderRuleSection(s, kind, self) { this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - uci.sections('homeproxy', 'dns_server', (res) => { + uci.sections('homeproxy-pro', 'dns_server', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); @@ -333,7 +333,7 @@ function renderRuleSection(s, kind, self) { delete this.vallist; this.value('direct-out', _('Direct')); - uci.sections('homeproxy', 'routing_node', (res) => { + uci.sections('homeproxy-pro', 'routing_node', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); @@ -416,7 +416,7 @@ function renderRuleSection(s, kind, self) { this.value('', _('Default')); this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - uci.sections('homeproxy', 'dns_server', (res) => { + uci.sections('homeproxy-pro', 'dns_server', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js similarity index 97% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js index d0c9062c6..baa3392a7 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js @@ -10,8 +10,8 @@ 'require form'; 'require uci'; -'require homeproxy as hp'; -'require view.homeproxy.client.common as common'; +'require homeproxy-pro as hp'; +'require view.homeproxy-pro.client.common as common'; /* The four cache options exist on the 'dns' NamedSection in both the custom * mode tab (renderDnsSettings) and the preset mode tab (renderDnsCache). @@ -54,7 +54,7 @@ function renderDnsSettings(ctx) { let o, ss, so; s.tab('dns', _('DNS Settings')); - o = s.taboption('dns', form.SectionValue, '_dns', form.NamedSection, 'dns', 'homeproxy'); + o = s.taboption('dns', form.SectionValue, '_dns', form.NamedSection, 'dns', 'homeproxy-pro'); o.depends('routing_mode', 'custom'); ss = o.subsection; @@ -70,7 +70,7 @@ function renderDnsSettings(ctx) { this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - uci.sections('homeproxy', 'dns_server', (res) => { + uci.sections('homeproxy-pro', 'dns_server', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); @@ -198,7 +198,7 @@ function renderDnsCache(ctx) { o.depends('routing_mode', 'bypass_mainland_china'); o.rmempty = false; - o = s.taboption('dns_cache', form.SectionValue, '_dns_cache', form.NamedSection, 'dns', 'homeproxy'); + o = s.taboption('dns_cache', form.SectionValue, '_dns_cache', form.NamedSection, 'dns', 'homeproxy-pro'); o.depends({'routing_mode': 'custom', '!reverse': true}); ss = o.subsection; diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js similarity index 90% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js index 57b118ad3..3039a1668 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js @@ -10,7 +10,7 @@ 'require form'; 'require uci'; -'require homeproxy as hp'; +'require homeproxy-pro as hp'; 'require tools.widgets as widgets'; /* Routing nodes sub-grid (the per-outbound entries that routing_rule @@ -29,8 +29,8 @@ function renderRoutingNodes(ctx) { ss.rowcolors = true; ss.sortable = true; ss.nodescriptions = true; - ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Routing node'), _('Add a routing node'), 'homeproxy'); - ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); + ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Routing node'), _('Add a routing node'), 'homeproxy-pro'); + ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); /* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound * form hands a call site's button factory to the wrong argument. */ ss.renderSectionAdd = function(extra_class) { @@ -38,8 +38,8 @@ function renderRoutingNodes(ctx) { }; so = ss.option(form.Value, 'label', _('Label')); - so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); - so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'routing_node', 'label'); + so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); + so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'routing_node', 'label'); so.modalonly = true; so = ss.option(form.Flag, 'enabled', _('Enable')); @@ -52,7 +52,7 @@ function renderRoutingNodes(ctx) { so.value('urltest', _('URLTest')); for (let i in proxy_nodes) so.value(i, proxy_nodes[i]); - so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'routing_node', 'node'); + so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'routing_node', 'node'); so.editable = true; so = ss.option(form.ListValue, 'domain_resolver', _('Domain resolver'), @@ -64,7 +64,7 @@ function renderRoutingNodes(ctx) { this.value('', _('Default')); this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - uci.sections('homeproxy', 'dns_server', (res) => { + uci.sections('homeproxy-pro', 'dns_server', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); @@ -95,7 +95,7 @@ function renderRoutingNodes(ctx) { delete this.vallist; this.value('', _('Direct')); - uci.sections('homeproxy', 'routing_node', (res) => { + uci.sections('homeproxy-pro', 'routing_node', (res) => { if (res['.name'] !== section_id && res.enabled === '1') this.value(res['.name'], res.label); }); @@ -107,7 +107,7 @@ function renderRoutingNodes(ctx) { let node = this.section.formvalue(section_id, 'node'); let conflict = false; - uci.sections('homeproxy', 'routing_node', (res) => { + uci.sections('homeproxy-pro', 'routing_node', (res) => { if (res['.name'] !== section_id) { if (res.outbound === section_id && res['.name'] == value) conflict = true; @@ -218,8 +218,8 @@ function renderDnsServers(ctx) { ss.rowcolors = true; ss.sortable = true; ss.nodescriptions = true; - ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('DNS server'), _('Add a DNS server'), 'homeproxy'); - ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); + ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('DNS server'), _('Add a DNS server'), 'homeproxy-pro'); + ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); /* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound * form hands a call site's button factory to the wrong argument. */ ss.renderSectionAdd = function(extra_class) { @@ -227,8 +227,8 @@ function renderDnsServers(ctx) { }; so = ss.option(form.Value, 'label', _('Label')); - so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); - so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'dns_server', 'label'); + so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); + so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'dns_server', 'label'); so.modalonly = true; so = ss.option(form.Flag, 'enabled', _('Enable')); @@ -286,7 +286,7 @@ function renderDnsServers(ctx) { this.value('', _('None')); this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - uci.sections('homeproxy', 'dns_server', (res) => { + uci.sections('homeproxy-pro', 'dns_server', (res) => { if (res['.name'] !== section_id && res.enabled === '1') this.value(res['.name'], res.label); }); @@ -296,7 +296,7 @@ function renderDnsServers(ctx) { so.validate = function(section_id, value) { if (section_id && value) { let conflict = false; - uci.sections('homeproxy', 'dns_server', (res) => { + uci.sections('homeproxy-pro', 'dns_server', (res) => { if (res['.name'] !== section_id) if (res.address_resolver === section_id && res['.name'] == value) conflict = true; @@ -323,7 +323,7 @@ function renderDnsServers(ctx) { delete this.vallist; this.value('direct-out', _('Direct')); - uci.sections('homeproxy', 'routing_node', (res) => { + uci.sections('homeproxy-pro', 'routing_node', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js similarity index 94% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js index 18b105475..842f8cf64 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js @@ -10,8 +10,8 @@ 'require form'; 'require uci'; -'require homeproxy as hp'; -'require view.homeproxy.client.common as common'; +'require homeproxy-pro as hp'; +'require view.homeproxy-pro.client.common as common'; /* Routing tab and the wrapping custom-routing NamedSection. The * routing_node tab lives in nodes.js; the routing_rule sub-section is @@ -147,7 +147,7 @@ function render(ctx) { /* Custom routing settings start */ /* Routing settings start */ - o = s.taboption('routing', form.SectionValue, '_routing', form.NamedSection, 'routing', 'homeproxy'); + o = s.taboption('routing', form.SectionValue, '_routing', form.NamedSection, 'routing', 'homeproxy-pro'); o.depends('routing_mode', 'custom'); ss = o.subsection; @@ -159,8 +159,8 @@ function render(ctx) { } so.value('system', _('System')); so.default = 'system'; - so.depends('homeproxy.config.proxy_mode', 'redirect_tun'); - so.depends('homeproxy.config.proxy_mode', 'tun'); + so.depends('homeproxy-pro.config.proxy_mode', 'redirect_tun'); + so.depends('homeproxy-pro.config.proxy_mode', 'tun'); so.rmempty = false; so.onchange = function(ev, section_id, value) { let desc = ev.target.nextElementSibling; @@ -183,9 +183,9 @@ function render(ctx) { _('In seconds.')); so.datatype = 'uinteger'; so.placeholder = '300'; - so.depends('homeproxy.config.proxy_mode', 'redirect_tproxy'); - so.depends('homeproxy.config.proxy_mode', 'redirect_tun'); - so.depends('homeproxy.config.proxy_mode', 'tun'); + so.depends('homeproxy-pro.config.proxy_mode', 'redirect_tproxy'); + so.depends('homeproxy-pro.config.proxy_mode', 'redirect_tun'); + so.depends('homeproxy-pro.config.proxy_mode', 'tun'); so = ss.option(form.Flag, 'bypass_cn_traffic', _('Bypass CN traffic'), _('Bypass mainland China traffic via firewall rules by default.')); @@ -209,7 +209,7 @@ function render(ctx) { this.value('nil', _('Disable (the service)')); this.value('direct-out', _('Direct')); this.value('block-out', _('Block')); - uci.sections('homeproxy', 'routing_node', (res) => { + uci.sections('homeproxy-pro', 'routing_node', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); @@ -227,7 +227,7 @@ function render(ctx) { this.value('default-dns', _('Default DNS (issued by WAN)')); this.value('system-dns', _('System DNS')); - uci.sections('homeproxy', 'dns_server', (res) => { + uci.sections('homeproxy-pro', 'dns_server', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js similarity index 90% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js index ff1e45b76..aed378dcf 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js @@ -10,7 +10,7 @@ 'require form'; 'require uci'; -'require homeproxy as hp'; +'require homeproxy-pro as hp'; /* Rule set sub-grid (per-rule-set entries: local file or remote URL with * download metadata). Called after dns.renderDnsRules() so the @@ -28,8 +28,8 @@ function render(ctx) { ss.rowcolors = true; ss.sortable = true; ss.nodescriptions = true; - ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Rule set'), _('Add a rule set'), 'homeproxy'); - ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); + ss.modaltitle = L.bind(hp.loadModalTitle, hp, _('Rule set'), _('Add a rule set'), 'homeproxy-pro'); + ss.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); /* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the bound * form hands a call site's button factory to the wrong argument. */ ss.renderSectionAdd = function(extra_class) { @@ -37,8 +37,8 @@ function render(ctx) { }; so = ss.option(form.Value, 'label', _('Label')); - so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); - so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'ruleset', 'label'); + so.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); + so.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'ruleset', 'label'); so.modalonly = true; so = ss.option(form.Flag, 'enabled', _('Enable')); @@ -60,7 +60,7 @@ function render(ctx) { so = ss.option(form.Value, 'path', _('Path')); so.datatype = 'file'; - so.placeholder = '/etc/homeproxy/ruleset/example.json'; + so.placeholder = '/etc/homeproxy-pro/ruleset/example.json'; so.rmempty = false; so.depends('type', 'local'); so.modalonly = true; @@ -98,7 +98,7 @@ function render(ctx) { this.value('', _('Default')); this.value('direct-out', _('Direct')); - uci.sections('homeproxy', 'routing_node', (res) => { + uci.sections('homeproxy-pro', 'routing_node', (res) => { if (res.enabled === '1') this.value(res['.name'], res.label); }); diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js similarity index 100% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js similarity index 100% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js similarity index 93% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js index e49623e3e..fce346d54 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/node.js @@ -10,7 +10,7 @@ 'require ui'; 'require view'; -'require homeproxy as hp'; +'require homeproxy-pro as hp'; function allowInsecureConfirm(ev, _section_id, value) { if (value === '1' && !confirm(_('Are you sure to allow insecure?'))) @@ -22,8 +22,8 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { s.rowcolors = true; s.sortable = true; s.nodescriptions = true; - s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Node'), _('Add a node'), 'homeproxy'); - s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); + s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Node'), _('Add a node'), 'homeproxy-pro'); + s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); if (routing_mode !== 'custom') { o = s.option(form.Button, '_apply', _('Apply')); @@ -40,7 +40,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { } } o.onclick = function(ev, section_id) { - uci.set('homeproxy', 'config', 'main_node', section_id); + uci.set('homeproxy-pro', 'config', 'main_node', section_id); return this.map.save(null, true).then(() => { ui.changes.apply(true); @@ -49,8 +49,8 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { } o = s.option(form.Value, 'label', _('Label')); - o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); - o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'node', 'label'); + o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); + o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'node', 'label'); o.modalonly = true; o = hp.renderProtocolOptions(s, { features: features, side: 'client' }); @@ -424,7 +424,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Value, 'tls_cert_path', _('Certificate path'), _('The path to the server certificate, in PEM format.')); - o.value('/etc/homeproxy/certs/client_ca.pem'); + o.value('/etc/homeproxy-pro/certs/client_ca.pem'); o.depends('tls_self_sign', '1'); o.validate = hp.validateCertificatePath; o.rmempty = false; @@ -434,7 +434,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { _('Save your configuration before uploading files!')); o.inputstyle = 'action'; o.inputtitle = _('Upload...'); - o.depends({'tls_self_sign': '1', 'tls_cert_path': '/etc/homeproxy/certs/client_ca.pem'}); + o.depends({'tls_self_sign': '1', 'tls_cert_path': '/etc/homeproxy-pro/certs/client_ca.pem'}); o.onclick = L.bind(hp.uploadCertificate, hp, _('certificate'), 'client_ca'); o.modalonly = true; @@ -445,10 +445,10 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o = s.option(form.Value, 'tls_ech_config_path', _('ECH config path'), _('The path to the ECH config, in PEM format. If empty, load from DNS will be attempted.')); - o.value('/etc/homeproxy/certs/client_ech_conf.pem'); + o.value('/etc/homeproxy-pro/certs/client_ech_conf.pem'); /* Same policy as cert_path / key_path: sing-box reads this file as root and the backend drops any path outside CERT_PATH_ROOTS (validateCertificatePath - in homeproxy.uc). Without it the UI accepted a path the generator then + in homeproxy-pro.uc). Without it the UI accepted a path the generator then silently discarded. */ o.validate = hp.validateCertificatePath; o.depends('tls_ech', '1'); @@ -458,7 +458,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { _('Save your configuration before uploading files!')); o.inputstyle = 'action'; o.inputtitle = _('Upload...'); - o.depends({'tls_ech': '1', 'tls_ech_config_path': '/etc/homeproxy/certs/client_ech_conf.pem'}); + o.depends({'tls_ech': '1', 'tls_ech_config_path': '/etc/homeproxy-pro/certs/client_ech_conf.pem'}); o.onclick = L.bind(hp.uploadCertificate, hp, _('ECH config'), 'client_ech_conf'); o.modalonly = true; @@ -479,7 +479,7 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { o.depends({'tls': '1', 'type': /^((?!hysteria2?|tuic$).)+$/}); o.validate = function(section_id, value) { if (section_id) { - let tls_reality = this.map.findElement('id', 'cbid.homeproxy.%s.tls_reality'.format(section_id)).firstElementChild; + let tls_reality = this.map.findElement('id', 'cbid.homeproxy-pro.%s.tls_reality'.format(section_id)).firstElementChild; if (tls_reality.checked && !value) return _('Expecting: %s').format(_('non-empty value')); @@ -541,15 +541,15 @@ function renderNodeSettings(section, data, features, main_node, routing_mode) { return view.extend({ load() { return Promise.all([ - uci.load('homeproxy'), + uci.load('homeproxy-pro'), hp.getBuiltinFeatures() ]); }, render(data) { let m, s, o, ss, so; - let main_node = uci.get('homeproxy', 'config', 'main_node'); - let routing_mode = uci.get('homeproxy', 'config', 'routing_mode'); + let main_node = uci.get('homeproxy-pro', 'config', 'main_node'); + let routing_mode = uci.get('homeproxy-pro', 'config', 'routing_mode'); let features = data[1]; /* Cache subscription information, it will be called multiple times. @@ -569,7 +569,7 @@ return view.extend({ * first-seen entry is the one both sides agree on. */ let subinfo = []; const seen_hashes = {}; - for (let suburl of (uci.get('homeproxy', 'subscription', 'subscription_url') || [])) { + for (let suburl of (uci.get('homeproxy-pro', 'subscription', 'subscription_url') || [])) { const info = hp.subscriptionInfo(suburl); if (!info) continue; @@ -579,9 +579,9 @@ return view.extend({ subinfo.push(info); } - m = new form.Map('homeproxy', _('Edit nodes')); + m = new form.Map('homeproxy-pro', _('Edit nodes')); - s = m.section(form.NamedSection, 'subscription', 'homeproxy'); + s = m.section(form.NamedSection, 'subscription', 'homeproxy-pro'); /* Node settings start */ /* User nodes start */ @@ -591,7 +591,7 @@ return view.extend({ ss.addremove = true; ss.filter = function(section_id) { for (let info of subinfo) - if (info.hash === uci.get('homeproxy', section_id, 'grouphash')) + if (info.hash === uci.get('homeproxy-pro', section_id, 'grouphash')) return false; return true; @@ -620,8 +620,8 @@ return view.extend({ input_links = input_links.reduce((pre, cur) => (!pre.includes(cur) && pre.push(cur), pre), []); - let allow_insecure = uci.get('homeproxy', 'subscription', 'allow_insecure'); - let packet_encoding = uci.get('homeproxy', 'subscription', 'packet_encoding'); + let allow_insecure = uci.get('homeproxy-pro', 'subscription', 'allow_insecure'); + let packet_encoding = uci.get('homeproxy-pro', 'subscription', 'packet_encoding'); /* Every link is parsed - and rejected - by the * backend parser (parser/uri.uc), so importing a @@ -640,9 +640,9 @@ return view.extend({ config.packet_encoding = packet_encoding; let nameHash = hp.calcStringMD5(config.label); - let sid = uci.add('homeproxy', 'node', nameHash); + let sid = uci.add('homeproxy-pro', 'node', nameHash); Object.keys(config).forEach((k) => { - uci.set('homeproxy', sid, k, config[k]); + uci.set('homeproxy-pro', sid, k, config[k]); }); imported_node++; }); @@ -677,7 +677,7 @@ return view.extend({ ]) ]) } - /* The shared renderer (homeproxy.js) appends the extra button this + /* The shared renderer (homeproxy-pro.js) appends the extra button this * page needs; it used to carry a verbatim copy of the whole method. * The factory gets the section back so the handler binds to it, the * same receiver the copy's `this` had. @@ -708,7 +708,7 @@ return view.extend({ o = s.taboption('sub_' + info.hash, form.SectionValue, '_sub_' + info.hash, form.GridSection, 'node'); ss = renderNodeSettings(o.subsection, data, features, main_node, routing_mode); ss.filter = function(section_id) { - return (uci.get('homeproxy', section_id, 'grouphash') === info.hash); + return (uci.get('homeproxy-pro', section_id, 'grouphash') === info.hash); } } /* Subscription nodes end */ @@ -789,7 +789,7 @@ return view.extend({ o = s.taboption('subscription', form.Button, '_update_subscriptions', _('Update nodes from subscriptions')); o.inputstyle = 'apply'; o.inputtitle = function(section_id) { - let sublist = uci.get('homeproxy', section_id, 'subscription_url') || []; + let sublist = uci.get('homeproxy-pro', section_id, 'subscription_url') || []; if (sublist.length > 0) { return _('Update %s subscriptions').format(sublist.length); } else { @@ -799,7 +799,7 @@ return view.extend({ } o.onclick = function() { /* The updater pipeline (wget through a CN -> overseas link, - UCI commit, /etc/init.d/homeproxy reload, the 30 s sing-box + UCI commit, /etc/init.d/homeproxy-pro reload, the 30 s sing-box health gate) takes 5-15 s on a real device, which exceeds the browser XHR timeout. The old synchronous RPC waited for the whole thing inside one XHR; the browser saw @@ -896,7 +896,7 @@ return view.extend({ o.inputstyle = 'reset'; o.inputtitle = function() { let subnodes = []; - uci.sections('homeproxy', 'node', (res) => { + uci.sections('homeproxy-pro', 'node', (res) => { if (res.grouphash) subnodes = subnodes.concat(res['.name']) }); @@ -910,19 +910,19 @@ return view.extend({ } o.onclick = function() { let subnodes = []; - uci.sections('homeproxy', 'node', (res) => { + uci.sections('homeproxy-pro', 'node', (res) => { if (res.grouphash) subnodes = subnodes.concat(res['.name']) }); for (let i in subnodes) - uci.remove('homeproxy', subnodes[i]); + uci.remove('homeproxy-pro', subnodes[i]); - if (subnodes.includes(uci.get('homeproxy', 'config', 'main_node'))) - uci.set('homeproxy', 'config', 'main_node', 'nil'); + if (subnodes.includes(uci.get('homeproxy-pro', 'config', 'main_node'))) + uci.set('homeproxy-pro', 'config', 'main_node', 'nil'); - if (subnodes.includes(uci.get('homeproxy', 'config', 'main_udp_node'))) - uci.set('homeproxy', 'config', 'main_udp_node', 'nil'); + if (subnodes.includes(uci.get('homeproxy-pro', 'config', 'main_udp_node'))) + uci.set('homeproxy-pro', 'config', 'main_udp_node', 'nil'); this.inputtitle = _('%s nodes removed').format(subnodes.length); this.readonly = true; diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js similarity index 95% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js index e42d3bca1..c7feccf7a 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/server.js @@ -11,7 +11,7 @@ 'require ui'; 'require view'; -'require homeproxy as hp'; +'require homeproxy-pro as hp'; 'require tools.widgets as widgets'; /* Module-scoped guard for the view-level status poll: see the comment @@ -47,13 +47,13 @@ function getServiceStatus() { * "the status query did not answer" from "the service is not running". * With the default `{}` the try/catch below swallowed the difference and * reported a failed query as NOT RUNNING. */ - return hp.rpcCall('list', ['homeproxy'], + return hp.rpcCall('list', ['homeproxy-pro'], { object: 'service', params: ['name'], expect: { '': {} }, fallback: null }).then((res) => { if (res === null) return null; try { - return res['homeproxy']['instances']['sing-box-s']['running'] === true; + return res['homeproxy-pro']['instances']['sing-box-s']['running'] === true; } catch (e) { /* It answered, and there is no such instance. */ return false; @@ -124,7 +124,7 @@ function handleGenKey(option) { return view.extend({ load() { return Promise.all([ - uci.load('homeproxy'), + uci.load('homeproxy-pro'), hp.getBuiltinFeatures() ]); }, @@ -133,7 +133,7 @@ return view.extend({ let m, s, o; let features = data[1]; - m = new form.Map('homeproxy', _('HomeProxy Server'), + m = new form.Map('homeproxy-pro', _('HomeProxy Server'), _('The modern ImmortalWrt proxy platform for ARM64/AMD64.')); s = m.section(form.TypedSection); @@ -163,7 +163,7 @@ return view.extend({ ensureStatusPoll(); - s = m.section(form.NamedSection, 'server', 'homeproxy', _('Global settings')); + s = m.section(form.NamedSection, 'server', 'homeproxy-pro', _('Global settings')); o = s.option(form.Flag, 'enabled', _('Enable')); o.rmempty = false; @@ -173,8 +173,8 @@ return view.extend({ s.rowcolors = true; s.sortable = true; s.nodescriptions = true; - s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Server'), _('Add a server'), 'homeproxy'); - s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); + s.modaltitle = L.bind(hp.loadModalTitle, hp, _('Server'), _('Add a server'), 'homeproxy-pro'); + s.sectiontitle = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); /* Plain wrapper, not L.bind(): see hp.renderSectionAdd() for why the * bound form hands a call site's button factory to the wrong argument. */ s.renderSectionAdd = function(extra_class) { @@ -182,8 +182,8 @@ return view.extend({ }; o = s.option(form.Value, 'label', _('Label')); - o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy'); - o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'server', 'label'); + o.load = L.bind(hp.loadDefaultLabel, this, 'homeproxy-pro'); + o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'server', 'label'); o.rmempty = false; o.modalonly = true; @@ -206,7 +206,7 @@ return view.extend({ o = s.option(form.Value, 'port', _('Listen port'), _('The port must be unique.')); o.datatype = 'port'; - o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy', 'server', 'port'); + o.validate = L.bind(hp.validateUniqueValue, this, 'homeproxy-pro', 'server', 'port'); o = s.option(form.Value, 'username', _('Username')); o.depends('type', 'http'); @@ -284,7 +284,7 @@ return view.extend({ o = s.option(form.ListValue, 'shadowsocks_encrypt_method', _('Encrypt method')); for (let i of hp.shadowsocks_encrypt_methods) o.value(i); - /* The legacy stream ciphers are client-only; see homeproxy.js's + /* The legacy stream ciphers are client-only; see homeproxy-pro.js's shadowsocks_stream_methods for why, and the plan's 2.11. */ o.default = 'aes-128-gcm'; o.depends('type', 'shadowsocks'); @@ -510,7 +510,7 @@ return view.extend({ o = s.option(form.Value, 'tls_cert_path', _('Certificate path'), _('The server public key, in PEM format.')); - o.value('/etc/homeproxy/certs/server_publickey.pem'); + o.value('/etc/homeproxy-pro/certs/server_publickey.pem'); o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': null}); o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': '0'}); o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'}); @@ -523,13 +523,13 @@ return view.extend({ _('Save your configuration before uploading files!')); o.inputstyle = 'action'; o.inputtitle = _('Upload...'); - o.depends({'tls': '1', 'tls_cert_path': '/etc/homeproxy/certs/server_publickey.pem'}); + o.depends({'tls': '1', 'tls_cert_path': '/etc/homeproxy-pro/certs/server_publickey.pem'}); o.onclick = L.bind(hp.uploadCertificate, hp, _('certificate'), 'server_publickey'); o.modalonly = true; o = s.option(form.Value, 'tls_key_path', _('Key path'), _('The server private key, in PEM format.')); - o.value('/etc/homeproxy/certs/server_privatekey.pem'); + o.value('/etc/homeproxy-pro/certs/server_privatekey.pem'); o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': '0'}); o.depends({'tls': '1', 'tls_acme': '0', 'tls_reality': null}); o.depends({'tls': '1', 'tls_acme': null, 'tls_reality': '0'}); @@ -542,7 +542,7 @@ return view.extend({ _('Save your configuration before uploading files!')); o.inputstyle = 'action'; o.inputtitle = _('Upload...'); - o.depends({'tls': '1', 'tls_key_path': '/etc/homeproxy/certs/server_privatekey.pem'}); + o.depends({'tls': '1', 'tls_key_path': '/etc/homeproxy-pro/certs/server_privatekey.pem'}); o.onclick = L.bind(hp.uploadCertificate, hp, _('private key'), 'server_privatekey'); o.modalonly = true; diff --git a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js similarity index 94% rename from luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js rename to luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js index e99ecde1f..e30b3793d 100644 --- a/luci-app-homeproxy-pro-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js +++ b/luci-app-homeproxy-pro/htdocs/luci-static/resources/view/homeproxy-pro/status.js @@ -13,7 +13,7 @@ 'require ui'; 'require view'; -'require homeproxy as hp'; +'require homeproxy-pro as hp'; /* Thanks to luci-app-aria2 */ const css = ' \ @@ -27,7 +27,7 @@ const css = ' \ margin: 0; \ }'; -const hp_dir = '/var/run/homeproxy'; +const hp_dir = '/var/run/homeproxy-pro'; /* One view-level poll for all three log views. * @@ -161,7 +161,7 @@ function getResVersion(o, type) { function getRuntimeLog(o, name, filename, _option_index, section_id, _in_table) { let section, log_level_el; switch (filename) { - case 'homeproxy': + case 'homeproxy-pro': section = null; break; case 'sing-box-c': @@ -173,7 +173,7 @@ function getRuntimeLog(o, name, filename, _option_index, section_id, _in_table) } if (section) { - const selected = uci.get('homeproxy', section, 'log_level') || 'warn'; + const selected = uci.get('homeproxy-pro', section, 'log_level') || 'warn'; const choices = { trace: _('Trace'), debug: _('Debug'), @@ -189,7 +189,7 @@ function getRuntimeLog(o, name, filename, _option_index, section_id, _in_table) 'class': 'cbi-input-select', 'style': 'margin-left: 4px; width: 6em;', 'change': ui.createHandlerFn(this, (ev) => { - uci.set('homeproxy', section, 'log_level', ev.target.value); + uci.set('homeproxy-pro', section, 'log_level', ev.target.value); return o.map.save(null, true).then(() => { ui.changes.apply(true); }); @@ -244,9 +244,9 @@ return view.extend({ render() { let m, s, o; - m = new form.Map('homeproxy'); + m = new form.Map('homeproxy-pro'); - s = m.section(form.NamedSection, 'config', 'homeproxy', _('Connection check')); + s = m.section(form.NamedSection, 'config', 'homeproxy-pro', _('Connection check')); s.anonymous = true; o = s.option(form.DummyValue, '_check_baidu', _('BaiDu')); @@ -255,7 +255,7 @@ return view.extend({ o = s.option(form.DummyValue, '_check_google', _('Google')); o.cfgvalue = L.bind(getConnStat, this, o, 'google'); - s = m.section(form.NamedSection, 'config', 'homeproxy', _('Resources management')); + s = m.section(form.NamedSection, 'config', 'homeproxy-pro', _('Resources management')); s.anonymous = true; o = s.option(form.DummyValue, '_china_ip4_version', _('China IPv4 list version')); @@ -292,11 +292,11 @@ return view.extend({ return node; } - s = m.section(form.NamedSection, 'config', 'homeproxy'); + s = m.section(form.NamedSection, 'config', 'homeproxy-pro'); s.anonymous = true; o = s.option(form.DummyValue, '_homeproxy_logview'); - o.render = L.bind(getRuntimeLog, this, o, _('HomeProxy'), 'homeproxy'); + o.render = L.bind(getRuntimeLog, this, o, _('HomeProxy'), 'homeproxy-pro'); o = s.option(form.DummyValue, '_sing-box-c_logview'); o.render = L.bind(getRuntimeLog, this, o, _('sing-box client'), 'sing-box-c'); diff --git a/luci-app-homeproxy-pro/po/templates/homeproxy-pro.pot b/luci-app-homeproxy-pro/po/templates/homeproxy-pro.pot new file mode 100644 index 000000000..aa5c4df31 --- /dev/null +++ b/luci-app-homeproxy-pro/po/templates/homeproxy-pro.pot @@ -0,0 +1,3392 @@ +msgid "" +msgstr "Content-Type: text/plain; charset=UTF-8" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:222 +msgid "%s log" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:913 +msgid "%s nodes removed" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:858 +msgid "(empty)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:110 +msgid "(last updated %s)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:111 +msgid "(never updated on this device)" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1098 +msgid "/etc/homeproxy-pro/certs/..., /etc/acme/..., /etc/ssl/..." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:221 +msgid "" +"1 matches the latest untagged evaluate result; other values match an " +"evaluate tag (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:81 +msgid "4 or 6. Not limited if empty." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:288 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:436 +msgid "" +"%s will be temporarily overwritten to %s after 50 " +"triggers in 30s if not enabled." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:434 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:458 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:523 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:542 +msgid "Save your configuration before uploading files!" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:375 +msgid "ACME account key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:359 +msgid "ACME key type" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:369 +msgid "ACME profile" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:370 +msgid "ACME profile for certificate issuance (1.14). Example: shortlived." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:419 +msgid "API token" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:227 +msgid "Accept any if empty." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:25 +msgid "Access Control" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:402 +msgid "Access key ID" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:408 +msgid "Access key secret" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:164 +msgid "Action" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35 +msgid "Add a DNS rule" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221 +msgid "Add a DNS server" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25 +msgid "Add a node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32 +msgid "Add a routing node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35 +msgid "Add a routing rule" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31 +msgid "Add a rule set" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176 +msgid "Add a server" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:267 +msgid "Additional headers to be sent to the DNS server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:249 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:58 +msgid "Address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:29 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:40 +msgid "Address and port dependent" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:28 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:39 +msgid "Address dependent" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:280 +msgid "Address resolver" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:312 +msgid "Address strategy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:166 +msgid "Aggressive" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:395 +msgid "Alibaba Cloud DNS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:131 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:165 +msgid "Aliyun Public DNS (223.5.5.5)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:104 +msgid "All ports" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:196 +msgid "Allow access from the Internet." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:683 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:753 +msgid "Allow insecure" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:684 +msgid "Allow insecure connection at TLS client." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:754 +msgid "Allow insecure connection by default when add nodes from subscriptions." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:615 +msgid "Allowed payload size is in the request." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:129 +msgid "Already at the latest version." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:126 +msgid "Already in updating." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:257 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:304 +msgid "Alter ID" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:433 +msgid "Alternative HTTP port" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:439 +msgid "Alternative TLS port" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:305 +msgid "Answer" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:131 +msgid "AnyTLS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:232 +msgid "AnyTLS padding scheme in array." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:213 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:460 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:89 +msgid "" +"Append a edns0-subnet OPT extra record with the specified IP " +"prefix to every query by default.
If value is an IP address instead of " +"prefix, /32 or /128 will be appended automatically." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:420 +msgid "Append self-signed certificate" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:36 +msgid "Applied" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:29 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:39 +msgid "Apply" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:16 +msgid "Are you sure to allow insecure?" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:346 +msgid "Auth timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:281 +msgid "Authenticated length" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:263 +msgid "Authentication payload" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:256 +msgid "Authentication type" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:706 +msgid "Auto update" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:707 +msgid "Auto update subscriptions and geodata." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:325 +msgid "BBR" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:163 +msgid "BBR congestion control algorithm profile. Hysteria2 only." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:162 +msgid "BBR profile (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:252 +msgid "BaiDu" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:258 +msgid "Base64" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:170 +msgid "Based on google/gvisor." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:56 +msgid "Binary file" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:38 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:84 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:629 +msgid "Bind interface" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:39 +msgid "" +"Bind outbound traffic to specific interface. Leave empty to auto detect." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:90 +msgid "BitTorrent" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:740 +msgid "Blacklist mode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:211 +msgid "Block" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:84 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:108 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:624 +msgid "Both" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:190 +msgid "Bypass CN traffic" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:84 +msgid "Bypass mainland China" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:191 +msgid "Bypass mainland China traffic via firewall rules by default." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:382 +msgid "CA provider" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:196 +msgid "CN-IP DNS fallback (sing-box 1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:166 +msgid "CNNIC Public DNS (210.2.4.8)" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:323 +msgid "CUBIC" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:596 +msgid "Cancel" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:425 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:511 +msgid "Certificate path" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:95 +msgid "Check" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:139 +msgid "Check update" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:162 +msgid "China DNS server" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:261 +msgid "China IPv4 list version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:265 +msgid "China IPv6 list version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:269 +msgid "China list version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:125 +msgid "Chromium / Cronet" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:708 +msgid "Cipher suites" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:128 +msgid "Cisco Public DNS (208.67.222.222)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:231 +msgid "Clean log" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:123 +msgid "Client" +msgstr "" + +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:14 +msgid "Client Settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:221 +msgid "Client version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:127 +msgid "CloudFlare Public DNS (1.1.1.1)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:396 +msgid "Cloudflare" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:130 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:146 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:212 +msgid "Collecting data..." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:105 +msgid "Common ports only (bypass P2P traffic)" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:321 +msgid "Congestion control algorithm" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:249 +msgid "Connection check" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:394 +msgid "Connection reuse" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:165 +msgid "Conservative" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809 +msgid "Could not start subscription update: %s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:86 +msgid "Custom routing" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:92 +msgid "DNS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25 +msgid "DNS Rules" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:212 +msgid "DNS Servers" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:56 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:122 +msgid "DNS Settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:394 +msgid "DNS provider" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:39 +msgid "DNS query timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34 +msgid "DNS rule" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:410 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:124 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221 +msgid "DNS server" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:390 +msgid "DNS01 challenge" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:93 +msgid "DTLS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:179 +msgid "Debug" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:62 +#: htdocs/luci-static/resources/homeproxy-pro.js:334 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:73 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:416 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:64 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:99 +msgid "Default" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:185 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:417 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:71 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:65 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:287 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:228 +msgid "Default DNS (issued by WAN)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:66 +msgid "Default DNS server" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:223 +msgid "Default DNS server for resolving domain name in the server address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:61 +msgid "Default DNS strategy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:203 +msgid "Default outbound" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:222 +msgid "Default outbound DNS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:204 +msgid "Default outbound for connections not matched by any routing rules." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:760 +msgid "Default packet encoding" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:338 +msgid "Default server name" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:40 +msgid "Default timeout per DNS query in seconds (sing-box default: 10)." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:130 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:326 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:97 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:325 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:210 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:100 +msgid "Direct" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:165 +msgid "Direct Domain List" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:54 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:99 +msgid "Direct IPv4 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:57 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:102 +msgid "Direct IPv6 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:60 +msgid "Direct MAC-s" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:257 +#: htdocs/luci-static/resources/homeproxy-pro.js:270 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:48 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:26 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:54 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:93 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:468 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:739 +msgid "Disable" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:209 +msgid "Disable (the service)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:170 +msgid "Disable Chrome QUIC fingerprint (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:171 +msgid "" +"Disable Chrome QUIC handshake parroting, which is enabled by default since " +"sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate " +"or the handshake otherwise fails." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:448 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:83 +msgid "Disable DNS cache" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:449 +msgid "Disable DNS cache in this query." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:425 +msgid "Disable HTTP challenge" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:429 +msgid "Disable TLS ALPN challenge" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:352 +msgid "Disable UDP domain unmapping" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:200 +msgid "Disable cache and save cache in this query." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:85 +msgid "Disable cache expire" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:199 +msgid "Disable dns cache" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:242 +msgid "Disable optimistic DNS caching for this query." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:467 +msgid "Disable optimistic DNS caching in this lookup (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:241 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:466 +msgid "Disable optimistic cache" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:31 +msgid "Disabled" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:487 +msgid "Domain keyword" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:478 +msgid "Domain name" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:491 +msgid "Domain regex" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:58 +msgid "Domain resolver" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:77 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:198 +msgid "Domain strategy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:442 +msgid "Domain strategy for resolving the domain names." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:483 +msgid "Domain suffix" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:332 +msgid "Domains" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:435 +msgid "Don't drop packets" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:287 +msgid "Don't drop requests" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:178 +msgid "Download bandwidth" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:179 +msgid "Download bandwidth in Mbps." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:431 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437 +msgid "Drop packets" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:282 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289 +msgid "Drop requests" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:746 +msgid "" +"Drop/keep nodes that contain the specific keywords. Regex is supported." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:738 +msgid "Drop/keep specific nodes from subscriptions." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:446 +msgid "" +"EAB (External Account Binding) contains information necessary to bind or map " +"an ACME account to some other account known by the CA.
External account " +"bindings are \"used to associate an ACME account with an existing account in " +"a non-ACME system, such as a CA customer database." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:442 +msgid "" +"ECH (Encrypted Client Hello) is a TLS extension that allows a client to " +"encrypt the first part of its ClientHello message." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:462 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:590 +msgid "ECH config" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:446 +msgid "ECH config path" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:549 +msgid "ECH key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:212 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:459 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:88 +msgid "EDNS Client subnet" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:614 +msgid "Early data" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:621 +msgid "Early data header name" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:622 +msgid "Early data is sent in path instead of header by default." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:568 +msgid "Edit nodes" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:344 +msgid "Email" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:53 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:45 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:234 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:44 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:168 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:190 +msgid "Enable" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:355 +msgid "" +"Enable 0-RTT QUIC connection handshake on the client side. This is not " +"impacting much on the performance, as the protocol is fully multiplexed.
Disabling this is highly recommended, as it is vulnerable to replay attacks." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:354 +msgid "Enable 0-RTT handshake" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:327 +msgid "Enable ACME" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:441 +msgid "Enable ECH" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:173 +msgid "Enable TCP Brutal" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:174 +msgid "Enable TCP Brutal congestion control algorithm" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:521 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:610 +msgid "Enable UDP fragmentation." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:395 +msgid "Enable connection reuse (the Snell v2 CONNECT command)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:175 +msgid "Enable endpoint-independent NAT" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:195 +msgid "" +"Enable neighbor resolution so rules can match LAN devices by hostname (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:166 +msgid "Enable padding" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:601 +msgid "Enable tcp fast open for listener." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:525 +msgid "" +"Enable the SUoT protocol, requires server support. Conflict with multiplex." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:177 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:263 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:284 +msgid "Encrypt method" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:27 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:38 +msgid "Endpoint independent" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:182 +msgid "Error" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:170 +msgid "Evaluate (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:225 +msgid "Evaluate tag" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:220 +#: htdocs/luci-static/resources/homeproxy-pro.js:1035 +#: htdocs/luci-static/resources/homeproxy-pro.js:1085 +#: htdocs/luci-static/resources/homeproxy-pro.js:1098 +#: htdocs/luci-static/resources/homeproxy-pro.js:1117 +#: htdocs/luci-static/resources/homeproxy-pro.js:1126 +#: htdocs/luci-static/resources/homeproxy-pro.js:1137 +#: htdocs/luci-static/resources/homeproxy-pro.js:1146 +#: htdocs/luci-static/resources/homeproxy-pro.js:1148 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:350 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:352 +msgid "Expecting: %s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:445 +msgid "External Account Binding" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:457 +msgid "External account MAC key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:451 +msgid "External account key ID" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:315 +msgid "Extra records" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:117 +msgid "" +"Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:116 +msgid "Extra tags" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:657 +msgid "Failed to close the import dialog: %s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:93 +msgid "Failed to generate %s, error: %s." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:124 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:177 +msgid "Failed to read domain list: %s." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1075 +msgid "Failed to upload %s, error: %s." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:183 +msgid "Fatal" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:745 +msgid "Filter keywords" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:737 +msgid "Filter nodes" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:194 +msgid "Find neighbor hosts" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:126 +msgid "Firefox / uquic firefox" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:195 +msgid "Firewall" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:251 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:298 +msgid "Flow" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:59 +msgid "For resolving domain name in the server address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:55 +msgid "Format" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:372 +msgid "Fragment TLS handshake into multiple TLS records." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:378 +msgid "" +"Fragment TLS handshakes. Due to poor performance, try %s first." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:384 +msgid "Fragment fallback delay" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:583 +msgid "GET" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:273 +msgid "GFW list version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:83 +msgid "GFWList" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:72 +msgid "Gaming mode IPv4 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:74 +msgid "Gaming mode IPv6 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:77 +msgid "Gaming mode MAC-s" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:272 +msgid "Gecko (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:37 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:582 +msgid "Generate" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:277 +msgid "GitHub token" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:87 +msgid "Global" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:274 +msgid "Global padding" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:79 +msgid "Global proxy IPv4 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:82 +msgid "Global proxy IPv6 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:85 +msgid "Global proxy MAC-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:166 +msgid "Global settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:255 +msgid "Google" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:129 +msgid "Google Public DNS (8.8.8.8)" +msgstr "" + +#: root/usr/share/rpcd/acl.d/luci-app-homeproxy-pro.json:3 +msgid "Grant access to homeproxy-pro configuration" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:132 +#: htdocs/luci-static/resources/homeproxy-pro.js:520 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:94 +msgid "HTTP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:407 +msgid "" +"HTTP Host header sent when obfuscation mode is http. bing.com is used by " +"default." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:400 +msgid "HTTP obfuscation. v4 only." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:276 +msgid "HTTP obfuscation. v5 only." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:244 +msgid "HTTP/3" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:257 +msgid "" +"HTTP3 server behavior when authentication fails.
A 404 page will be " +"returned if empty." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:243 +msgid "HTTPS" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:521 +msgid "HTTPUpgrade" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:499 +msgid "Handshake server address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:505 +msgid "Handshake server port" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:717 +msgid "Handshake timeout (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:266 +msgid "Headers" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:360 +msgid "Heartbeat interval" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:33 +msgid "Hijack" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:70 +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:119 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:299 +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:3 +msgid "HomeProxy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:75 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:136 +msgid "HomeProxy Server" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:129 +msgid "Hop interval" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:123 +msgid "Hopping port" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:566 +#: htdocs/luci-static/resources/homeproxy-pro.js:571 +#: htdocs/luci-static/resources/homeproxy-pro.js:606 +msgid "Host" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:226 +msgid "Host key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:231 +msgid "Host key algorithms" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:44 +msgid "Host/IP fields" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:347 +msgid "" +"How long the server should wait for the client to send the authentication " +"command (in seconds)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:399 +msgid "How the forged segment is rejected by the real server." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:133 +msgid "Hysteria" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:134 +msgid "Hysteria2" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:503 +msgid "IP CIDR" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:80 +msgid "IP version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:82 +msgid "IPv4" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:65 +msgid "IPv4 only" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:83 +msgid "IPv6" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:66 +msgid "IPv6 only" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:135 +msgid "IPv6 support" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:100 +msgid "Idle session check interval" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:107 +msgid "Idle session check timeout" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:589 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:190 +msgid "Idle timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:359 +msgid "" +"If enabled, attempts to connect UDP connection to the destination instead of " +"listen." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:353 +msgid "" +"If enabled, for UDP proxy requests addressed to a domain, the original " +"packet address will be sent in the response instead of the mapped domain." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:561 +msgid "" +"If enabled, the client transport sends keepalive pings even with no active " +"connections." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:199 +msgid "" +"If set, the requested domain name will be resolved to IP before routing." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:24 +msgid "" +"If the transport doesn't see any activity after a duration of this time (in " +"seconds), it pings the client to check if the connection is still active." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:421 +msgid "" +"If you have the root certificate, use this option instead of allowing " +"insecure." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:251 +msgid "Ignore client bandwidth" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:662 +msgid "Import" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:589 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:682 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:684 +msgid "Import share links" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:658 +msgid "" +"Imported the nodes, but the dialog did not close automatically. Close it " +"manually." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:183 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:615 +msgid "In seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:333 +msgid "In seconds. Disabled by default." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:115 +msgid "" +"In the check, at least the first n idle sessions are kept open." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:108 +msgid "" +"In the check, close sessions that have been idle for longer than this, in " +"seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:180 +msgid "Info" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:110 +msgid "Initial path" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:392 +msgid "" +"Inject a forged TLS ClientHello carrying this SNI before the real one to " +"fool SNI-filtering middleboxes. Requires elevated privileges." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:31 +msgid "Interface Control" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:197 +msgid "Interrupt existing connections" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:198 +msgid "Interrupt existing connections when the selected outbound has changed." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:101 +msgid "Interval checking for idle sessions, in seconds." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:361 +msgid "" +"Interval for sending heartbeat packets for keeping the connection alive (in " +"seconds)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:160 +msgid "Invert" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:161 +msgid "Invert match result." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:231 +msgid "" +"Judge this response-dependent rule in parallel; first match wins (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:530 +msgid "Key path" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:45 +msgid "LAN IP Policy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:48 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:40 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:229 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:51 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:184 +msgid "Label" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:258 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:305 +msgid "" +"Legacy protocol support (VMess MD5 Authentication) is provided for " +"compatibility purposes only, use of alterId > 1 is not recommended." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:172 +msgid "Less compatibility and sometimes better performance." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:384 +msgid "Let's Encrypt" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:293 +msgid "" +"List of IP (v4 or v6) addresses prefixes to be assigned to the interface." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:128 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:35 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:64 +msgid "List of nodes to test." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:678 +msgid "List of supported application level protocols, in order of preference." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:306 +msgid "List of text DNS record to respond as answers." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:316 +msgid "List of text DNS record to respond as extra records." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:311 +msgid "List of text DNS record to respond as name servers." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:201 +msgid "Listen address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:33 +msgid "Listen interfaces" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:206 +msgid "Listen port" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:210 +msgid "Loading" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:50 +msgid "Local" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:292 +msgid "Local address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:111 +msgid "" +"Local file with initial rule-set content; avoids blocking startup on first " +"download (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:59 +msgid "Log file does not exist." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:55 +msgid "Log is empty." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:326 +msgid "MTU" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:53 +msgid "Main UDP node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:25 +msgid "Main node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157 +msgid "Make IP CIDR in rule set used to match the source IP." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157 +msgid "Make IP CIDR in rule sets match the source IP." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:256 +msgid "Masquerade" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:528 +msgid "Match DNSSEC OK" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:504 +msgid "" +"Match IP CIDR with the evaluated response (needs match_response; old rules " +"are auto-wrapped in 1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:505 +msgid "Match IP CIDR." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:514 +msgid "Match LAN device by MAC address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:519 +msgid "" +"Match LAN device hostname via neighbor resolution; enable find_neighbor." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:484 +msgid "Match domain suffix." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:488 +msgid "Match domain using keyword." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:492 +msgid "Match domain using regular expression." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:479 +msgid "Match full domain." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:549 +msgid "Match port range. Format as START:/:END/START:END." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:544 +msgid "Match port." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:509 +msgid "Match private IP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:510 +msgid "Match private IP with the evaluated response (needs match_response)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:500 +msgid "Match private source IP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:554 +msgid "Match process name." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:562 +msgid "Match process path using regular expression." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:558 +msgid "Match process path." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:529 +msgid "Match queries with the DNSSEC OK bit set (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:115 +msgid "Match query type." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:220 +msgid "Match response" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:141 +msgid "" +"Match rule set. DNS: rules referencing rule-sets that contain query_type are " +"incompatible with legacy address filters (ip_cidr / ip_is_private) — use " +"match_response instead (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:142 +msgid "" +"Match rule set. Since 1.14: a rule-set holding a single default rule is " +"merged into this rule; any other rule-set matches as an OR collection." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:496 +msgid "Match source IP CIDR." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:539 +msgid "Match source port range. Format as START:/:END/START:END." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:534 +msgid "Match source port." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:524 +msgid "Match the EDNS Client Subnet in the query (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:261 +msgid "Match the evaluated response code (requires match_response)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:137 +msgid "Match user name." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:234 +msgid "Max download speed" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:235 +msgid "Max download speed in Mbps." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:137 +msgid "Max hop interval (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:289 +msgid "Max obfs packet size (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:37 +msgid "Max time an expired entry may be served. Examples: 3d, 1h." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:494 +msgid "Max time difference" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:241 +msgid "Max upload speed" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:242 +msgid "Max upload speed in Mbps." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:700 +msgid "Maximum TLS version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:354 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368 +msgid "Maximum connections" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:366 +msgid "" +"Maximum multiplexed streams in a connection before opening a new connection." +"
Conflict with %s and %s." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:290 +msgid "Maximum on-wire packet size in bytes. Gecko only." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:138 +msgid "" +"Maximum port hopping interval in seconds; the actual interval is randomized " +"between the two values. Hysteria2 only." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:365 +msgid "Maximum streams" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:581 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:280 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:429 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437 +msgid "Method" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:282 +msgid "Min obfs packet size (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:692 +msgid "Minimum TLS version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:114 +msgid "Minimum idle sessions" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:360 +msgid "" +"Minimum multiplexed streams in a connection before opening a new connection." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:283 +msgid "Minimum on-wire packet size in bytes. Gecko only." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:359 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368 +msgid "Minimum streams" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:136 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:157 +msgid "Mixed" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:168 +msgid "Mixed system TCP stack and gVisor UDP stack." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:58 +msgid "Mode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:517 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:605 +msgid "MultiPath TCP" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:159 +msgid "Multiplex" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:345 +msgid "Multiplex protocol." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:419 +msgid "NOT RUNNING" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:766 +msgid "NOTE: Save current settings before updating subscriptions." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:310 +msgid "NS" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:335 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:32 +msgid "Native" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:135 +msgid "NaïveProxy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:105 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:621 +msgid "Network" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:324 +msgid "New Reno" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:17 +msgid "No TCP transport, plain HTTP is merged into the HTTP transport." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:19 +msgid "No additional encryption support: It's basically duplicate encryption." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:783 +msgid "No subscription available" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:894 +msgid "No subscription node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:637 +msgid "No valid share link found." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:50 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25 +msgid "Node" +msgstr "" + +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:22 +msgid "Node Settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:574 +msgid "Nodes" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:518 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:286 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:252 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:299 +msgid "None" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:276 +msgid "Obfuscate password" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:269 +msgid "Obfuscate type" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:406 +msgid "Obfuscation host" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:399 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:275 +msgid "Obfuscation mode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:114 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:171 +msgid "" +"One domain per line. No spaces, no comments, no wildcards; the backend " +"rejects invalid characters and tells you which line." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:34 +msgid "Only process traffic from specific interfaces. Leave empty for all." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:85 +msgid "Only proxy mainland China" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:30 +msgid "Optimistic DNS cache" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:36 +msgid "Optimistic cache timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:226 +msgid "Optional tag for this evaluate result." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:390 +msgid "Optional; only required when connecting to a multi-user Snell server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:43 +msgid "Other fields" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:320 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:91 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:319 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:93 +msgid "Outbound" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:51 +msgid "Outbound node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:94 +msgid "" +"Outbound used to download this rule-set (via sing-box 1.14 http_clients)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:338 +msgid "Override address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:472 +msgid "Override dns.timeout for this lookup, in seconds (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:248 +msgid "Override dns.timeout for this query, in seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:345 +msgid "Override port" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:339 +msgid "Override the connection destination address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:346 +msgid "Override the connection destination port." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:376 +msgid "PEM-encoded private key of an existing ACME account (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:584 +msgid "PUT" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:630 +msgid "Packet encoding" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:231 +msgid "Padding scheme" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:184 +msgid "Panic" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:74 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:218 +msgid "Password" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:576 +#: htdocs/luci-static/resources/homeproxy-pro.js:610 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:259 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:61 +msgid "Path" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:307 +msgid "Peer pubkic key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:176 +msgid "" +"Performance may degrade slightly, so it is not recommended to enable on when " +"it is not needed." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:44 +msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:332 +msgid "Persistent keepalive interval" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:597 +msgid "Ping timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:187 +msgid "Plugin" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:194 +msgid "Plugin opts" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:543 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:254 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:63 +msgid "Port" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:114 +msgid "Port %s alrealy exists!" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:45 +msgid "Port fields" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:130 +msgid "Port hopping interval in seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:548 +msgid "Port range" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:314 +msgid "Pre-shared key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:169 +msgid "Predefined" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:63 +msgid "Prefer IPv4" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:64 +msgid "Prefer IPv6" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:235 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:299 +msgid "Private key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:240 +msgid "Private key passphrase" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:360 +msgid "Private key type for new certificates (1.14). Empty uses the default." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:46 +msgid "Process fields" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:553 +msgid "Process name" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:557 +msgid "Process path" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:561 +msgid "Process path (regex)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:88 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:144 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:344 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:237 +msgid "Protocol" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:282 +msgid "Protocol parameter. Enable length block encryption." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:275 +msgid "" +"Protocol parameter. Will waste traffic randomly if enabled (enabled by " +"default in v2ray and cannot be disabled)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:108 +msgid "Proxy Domain List" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:63 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:92 +msgid "Proxy IPv4 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:66 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:95 +msgid "Proxy IPv6 IP-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:69 +msgid "Proxy MAC-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:50 +msgid "Proxy all except listed" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:47 +msgid "Proxy filter mode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:49 +msgid "Proxy listed only" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:122 +msgid "Proxy mode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:91 +msgid "Proxy protocol" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:336 +#: htdocs/luci-static/resources/homeproxy-pro.js:522 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:95 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:245 +msgid "QUIC" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:322 +msgid "QUIC congestion control algorithm." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:523 +msgid "Query EDNS client subnet" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:247 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:471 +msgid "Query timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:114 +msgid "Query type" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:293 +msgid "RCode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:96 +msgid "RDP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:495 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:464 +msgid "REALITY" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:469 +msgid "REALITY private key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:500 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:485 +msgid "REALITY public key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:506 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:489 +msgid "REALITY short ID" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:417 +msgid "RUNNING" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:230 +msgid "Race" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:222 +msgid "Random version will be used if empty." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:119 +msgid "Recursive outbound detected!" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:305 +msgid "Recursive resolver detected!" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:123 +msgid "Redirect TCP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:125 +msgid "Redirect TCP + TProxy UDP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:127 +msgid "Redirect TCP + Tun UDP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:236 +msgid "Refresh every %s seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:414 +msgid "Region ID" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:167 +msgid "Reject" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:51 +msgid "Remote" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:891 +msgid "Remove %s nodes" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:254 +msgid "Remove EDNS client subnet" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:881 +msgid "Remove all nodes from subscriptions" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:255 +msgid "Remove the edns0-subnet record from the query (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:281 +msgid "Reply with REFUSED" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:430 +msgid "Reply with TCP RST / ICMP port unreachable" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:321 +msgid "Reserved field bytes" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:172 +msgid "Resolve" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:441 +msgid "Resolve strategy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:258 +msgid "Resources management" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:272 +msgid "Response NS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:260 +msgid "Response RCode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:267 +msgid "Response answer" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:276 +msgid "Response extra" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:31 +msgid "" +"Return expired cache immediately and refresh in background (sing-box 1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:635 +msgid "Reuse address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:636 +msgid "Reuse listener address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:205 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:453 +msgid "Rewrite TTL" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:206 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:454 +msgid "Rewrite TTL in DNS responses." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:165 +msgid "Route" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:166 +msgid "Route options" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:23 +msgid "Routing Nodes" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25 +msgid "Routing Rules" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:23 +msgid "Routing Settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:82 +msgid "Routing mode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32 +msgid "Routing node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:102 +msgid "Routing ports" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34 +msgid "Routing rule" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:22 +msgid "Rule Set" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:140 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31 +msgid "Rule set" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:156 +msgid "Rule set IP CIDR as source IP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:68 +msgid "Rule set URL" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:141 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:97 +msgid "SSH" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:421 +msgid "STATUS UNKNOWN" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:98 +msgid "STUN" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:530 +msgid "SUoT version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:128 +msgid "Safari / Apple Network API" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:271 +msgid "Salamander" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:55 +msgid "Same as main node" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:284 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:290 +msgid "Save" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:768 +msgid "Save current settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:765 +msgid "Save subscriptions settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:236 +msgid "Send the query before pending race rules are judged (1.14)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:179 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176 +msgid "Server" +msgstr "" + +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:30 +msgid "Server Settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:339 +msgid "" +"Server name to use when choosing a certificate if the ClientHello's " +"ServerName field is empty." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:171 +msgid "Server settings" +msgstr "" + +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:38 +msgid "Service Status" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:138 +msgid "ShadowTLS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:201 +msgid "ShadowTLS version" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:137 +msgid "Shadowsocks" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:29 +msgid "" +"Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the " +"platform interface DNS and hijacks port 53. On OpenWrt this overlaps with " +"the own dnsmasq/nftables DNS hijack of this plugin, so keep Disabled on a " +"gateway unless you need sing-box to own TUN DNS." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:139 +msgid "Snell (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:376 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:263 +msgid "Snell version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:124 +msgid "Sniffed client type (QUIC client type or SSH client name)." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:89 +msgid "" +"Sniffed protocol, see Sniff for details." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:143 +msgid "Sniffer: advanced mode (100ms, universal list)" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:140 +msgid "Socks" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:211 +msgid "Socks version" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:212 +msgid "Socks4" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:213 +msgid "Socks4A" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:214 +msgid "Socks5" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:495 +msgid "Source IP CIDR" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:513 +msgid "Source MAC address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:57 +msgid "Source file" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:518 +msgid "Source hostname" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:533 +msgid "Source port" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:538 +msgid "Source port range" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:411 +msgid "" +"Specifies DNS server tag to use instead of selecting through DNS routing." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:21 +msgid "" +"Specifies the period of time (in seconds) after which a health check will be " +"performed using a ping frame if no frames have been received on the " +"connection.
Please note that a ping response is considered a received " +"frame, so if there is no other traffic on the connection, the health check " +"will be executed every interval." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:23 +msgid "" +"Specifies the time (in seconds) until idle clients should be closed with a " +"GOAWAY frame. PING frames are not considered as activity." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:26 +msgid "" +"Specifies the timeout duration (in seconds) after sending a PING frame, " +"within which a response must be received.
If a response to the PING " +"frame is not received within the specified timeout duration, the connection " +"will be closed." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:103 +msgid "" +"Specify target ports to be proxied. Multiple ports must be separated by " +"commas." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:235 +msgid "Speculative" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:164 +msgid "Standard (default)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:43 +msgid "Store DNS cache" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:259 +msgid "String" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:693 +msgid "Sub (%s)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:720 +msgid "Subscription URL-s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:857 +msgid "Subscription update did not complete cleanly. Last log:" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:805 +msgid "" +"Subscription update is already running. This page will reload when the " +"previous run finishes." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:867 +msgid "" +"Subscription update is taking longer than 90 seconds. Check the log and " +"reload manually." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:704 +msgid "Subscriptions" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:639 +msgid "Successfully imported %s nodes of total %s." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:120 +msgid "Successfully updated." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:590 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:721 +msgid "" +"Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) " +"online configuration delivery standard." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:125 +msgid "" +"Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:160 +msgid "System" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:186 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:418 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:72 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:66 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:288 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:229 +msgid "System DNS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:106 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:241 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:622 +msgid "TCP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:514 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:600 +msgid "TCP fast open" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:154 +msgid "TCP/IP stack" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:155 +msgid "TCP/IP stack." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:650 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:99 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:242 +msgid "TLS" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:677 +msgid "TLS ALPN" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:672 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:272 +msgid "TLS SNI" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:377 +msgid "TLS fragment" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:718 +msgid "TLS handshake timeout in seconds. 15s is used by default." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:18 +msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:371 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:379 +msgid "TLS record fragment" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:391 +msgid "TLS spoof SNI (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:398 +msgid "TLS spoof method (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:26 +msgid "TUN DNS" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:39 +msgid "TUN DNS addresses (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:28 +msgid "TUN DNS mode (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:281 +msgid "" +"Tag of a another server to resolve the domain name in the address. Required " +"if address contains domain." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:320 +msgid "Tag of an outbound for connecting to the dns server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:180 +msgid "Tag of the target dns server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:321 +msgid "Tag of the target outbound." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:252 +msgid "" +"Tell the client to use the BBR flow control algorithm instead of Hysteria CC." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:132 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:167 +msgid "Tencent Public DNS (119.29.29.29)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:147 +msgid "Test URL" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:167 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:41 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:70 +msgid "Test interval" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:175 +msgid "Test interval must be less or equal than idle timeout." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:183 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:47 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:76 +msgid "Test tolerance" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:268 +msgid "Text DNS records to match in the evaluated answer." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:383 +msgid "The ACME CA provider to use." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:62 +msgid "The DNS strategy for resolving the domain name in the address." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:148 +msgid "The URL to test." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:250 +msgid "The address of the dns server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:434 +msgid "" +"The alternate port to use for the ACME HTTP challenge; if non-empty, this " +"port will be used instead of 80 to spin up a listener for the HTTP challenge." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:440 +msgid "" +"The alternate port to use for the ACME TLS-ALPN challenge; the system must " +"forward 443 to this port for challenge to succeed." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:66 +msgid "" +"The default rule uses the following matching logic:
(domain || " +"domain_suffix || domain_keyword || domain_regex || ip_cidr || " +"ip_is_private) &&
(port || port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be considered merged rather " +"than as a single rule sub-item." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:59 +msgid "" +"The default rule uses the following matching logic:
(domain || " +"domain_suffix || domain_keyword || domain_regex) &&
(port " +"|| port_range) &&
(source_ip_cidr || source_ip_is_private) &&
(source_port || source_port_range) &&
other fields.
Additionally, included rule sets can be " +"considered merged rather than as a single rule sub-item." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:163 +msgid "" +"The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:78 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:313 +msgid "The domain strategy for resolving the domain name in the address." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:709 +msgid "" +"The elliptic curves that will be used in an ECDHE handshake, in preference " +"order. If empty, the default will be used." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:345 +msgid "" +"The email address to use when creating or selecting an existing ACME server " +"account." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:385 +msgid "" +"The fallback value in milliseconds used when TLS segmentation cannot " +"automatically determine the wait time." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:191 +msgid "The idle timeout in seconds." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:701 +msgid "The maximum TLS version that is acceptable." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:495 +msgid "The maximum time difference between the server and the client." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:693 +msgid "The minimum TLS version that is acceptable." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:120 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:137 +msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:85 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:630 +msgid "The network interface to bind to." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:260 +msgid "The path of the DNS server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:447 +msgid "" +"The path to the ECH config, in PEM format. If empty, load from DNS will be " +"attempted." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:426 +msgid "The path to the server certificate, in PEM format." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:207 +msgid "The port must be unique." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:255 +msgid "The port of the DNS server." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:264 +msgid "The pre-shared key (password) above must be 12-255 bytes for v6." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:850 +msgid "The request %s failed: %s." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:294 +msgid "The response code." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:531 +msgid "The server private key, in PEM format." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:512 +msgid "The server public key, in PEM format." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:92 +msgid "" +"The tag of the upstream outbound.
Other dial fields will be ignored when " +"enabled." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:168 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:42 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:71 +msgid "The test interval in seconds." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:184 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:48 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:77 +msgid "The test tolerance in milliseconds." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:28 +msgid "" +"The timeout (in seconds) that after performing a keepalive check, the client " +"will wait for activity. If no activity is detected, the connection will be " +"closed." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:686 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:756 +msgid "" +"This is DANGEROUS, your traffic is almost like " +"PLAIN TEXT! Use at your own risk!" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:341 +msgid "" +"This is the TUIC port of the UDP over TCP protocol, designed to provide a " +"QUIC stream based UDP relay mode that TUIC does not provide." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:133 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:168 +msgid "ThreatBook Public DNS (117.50.10.10)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:365 +msgid "" +"Timeout for UDP connections.
Setting a larger value than the UDP timeout " +"in inbounds will have no effect." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:624 +msgid "" +"To be compatible with Xray-core, set this to Sec-WebSocket-Protocol." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:130 +msgid "" +"To enable Tun support, you need to install ip-full and " +"kmod-tun" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:178 +msgid "Trace" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:517 +msgid "Transport" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:142 +msgid "Trojan" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:143 +msgid "Tuic" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:128 +msgid "Tun TCP/UDP" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:461 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:239 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:49 +msgid "Type" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:107 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:240 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:623 +msgid "UDP" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:520 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:609 +msgid "UDP Fragment" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:24 +msgid "UDP NAT Settings" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:182 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:614 +msgid "UDP NAT expiration time" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:37 +msgid "UDP NAT filtering (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:26 +msgid "UDP NAT mapping (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:48 +msgid "UDP NAT sessions max (1.14)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:524 +msgid "UDP over TCP" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:340 +msgid "UDP over stream" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:333 +msgid "UDP packet relay mode." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:332 +msgid "UDP relay mode" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:364 +msgid "UDP timeout" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:52 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:27 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:56 +msgid "URLTest" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:127 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:34 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:63 +msgid "URLTest nodes" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:309 +msgid "UUID" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:132 +msgid "Unknown error." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:61 +msgid "Unknown error: %s" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:30 +msgid "Unset (default)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:488 +msgid "Unsupported fingerprint!" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:780 +msgid "Update %s subscriptions" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:123 +msgid "Update failed." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:132 +msgid "Update interval" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:133 +msgid "Update interval of rule set." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:775 +msgid "Update nodes from subscriptions" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:717 +msgid "Update subscriptions via proxy." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:710 +msgid "Update time" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:716 +msgid "Update via proxy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:813 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:825 +msgid "Updating subscriptions…" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:457 +msgid "Upload ECH config" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:184 +msgid "Upload bandwidth" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:185 +msgid "Upload bandwidth in Mbps." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:433 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:522 +msgid "Upload certificate" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:541 +msgid "Upload key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:436 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:460 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:525 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:544 +msgid "Upload..." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:328 +msgid "Use ACME TLS certificate issuer." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:144 +msgid "" +"Use the tutorial-recommended sniffer profile (100ms timeout, http/tls/stun/" +"quic/dns). Default keeps the 300ms / unconstrained-list behaviour." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:673 +msgid "" +"Used to verify the hostname on the returned certificates unless insecure is " +"given." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:273 +msgid "Used to verify the hostname on the returned certificates." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:136 +msgid "User" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:389 +msgid "User key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:750 +msgid "User-Agent" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:68 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:211 +msgid "Username" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:145 +msgid "VLESS" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:146 +msgid "VMess" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:126 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:164 +msgid "WAN DNS (read from interface)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:90 +msgid "WAN IP Policy" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:181 +msgid "Warn" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:523 +msgid "WebSocket" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:197 +msgid "" +"When the main DNS returns a mainland China IP, re-resolve via China DNS " +"using evaluate/match_response." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:741 +msgid "Whitelist mode" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:144 +msgid "WireGuard" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:308 +msgid "WireGuard peer public key." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:315 +msgid "WireGuard pre-shared key." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:300 +msgid "WireGuard requires base64-encoded private keys." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:92 +msgid "Write proxy protocol in the connection header." +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:633 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:763 +msgid "Xudp (Xray-core)" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1073 +msgid "Your %s was successfully uploaded. Size: %sB." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:385 +msgid "ZeroSSL" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:438 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:527 +msgid "certificate" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:358 +msgid "connect UDP connections" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:694 +#: htdocs/luci-static/resources/homeproxy-pro.js:702 +msgid "default" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:91 +msgid "failed" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:519 +msgid "gRPC" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:560 +msgid "gRPC permit without stream" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:555 +msgid "gRPC service name" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:158 +msgid "gVisor" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:402 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:278 +msgid "http" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:220 +#: htdocs/luci-static/resources/homeproxy-pro.js:1126 +#: htdocs/luci-static/resources/homeproxy-pro.js:1146 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484 +msgid "non-empty value" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:631 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:188 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:401 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:761 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:277 +msgid "none" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:632 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:762 +msgid "packet addr (v2ray-core v5+)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:88 +msgid "passed" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:546 +msgid "private key" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:127 +msgid "quic-go / uquic chrome" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:302 +msgid "sing-box client" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:41 +msgid "" +"sing-box default; recommended for home use (accepts replies from any remote " +"after mapping). Choose stricter only for specific UDP issues." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:30 +msgid "" +"sing-box default; recommended for home use (small NAT table, QUIC/game " +"friendly). Choose stricter only for specific UDP issues." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:377 +msgid "" +"sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key " +"(Password above) must be 12-255 bytes for v6." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:305 +msgid "sing-box server" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:466 +msgid "uTLS fingerprint" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:467 +msgid "" +"uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting " +"resistance." +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:97 +msgid "unchecked" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1035 +msgid "unique UCI identifier" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1137 +msgid "unique value" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809 +msgid "unknown error" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:94 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:202 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:531 +msgid "v1" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:95 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:203 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:532 +msgid "v2" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:204 +msgid "v3" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:383 +msgid "v4" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:269 +msgid "v5" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:384 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:270 +msgid "v6" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190 +msgid "valid DNS server address" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730 +msgid "valid URL" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1085 +msgid "valid base64 key with %d characters" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203 +msgid "valid hostname" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1117 +msgid "valid port range (port1:port2)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112 +msgid "valid port value" +msgstr "" + +#: htdocs/luci-static/resources/homeproxy-pro.js:1148 +msgid "valid uuid" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:402 +msgid "wrong-ack" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:401 +msgid "wrong-checksum" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:403 +msgid "wrong-md5" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:400 +msgid "wrong-sequence (default)" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:404 +msgid "wrong-timestamp" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123 +msgid "{tag} in URL when extra tags are used" +msgstr "" + +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126 +msgid "{tag} in initial path when extra tags are used" +msgstr "" diff --git a/luci-app-homeproxy-pro-pro/po/zh-cn b/luci-app-homeproxy-pro/po/zh-cn similarity index 100% rename from luci-app-homeproxy-pro-pro/po/zh-cn rename to luci-app-homeproxy-pro/po/zh-cn diff --git a/luci-app-homeproxy-pro-pro/po/zh_Hans/homeproxy-pro-pro.po b/luci-app-homeproxy-pro/po/zh_Hans/homeproxy-pro.po similarity index 50% rename from luci-app-homeproxy-pro-pro/po/zh_Hans/homeproxy-pro-pro.po rename to luci-app-homeproxy-pro/po/zh_Hans/homeproxy-pro.po index 25e6989d2..d6b0b1d0e 100644 --- a/luci-app-homeproxy-pro-pro/po/zh_Hans/homeproxy-pro-pro.po +++ b/luci-app-homeproxy-pro/po/zh_Hans/homeproxy-pro.po @@ -8,31 +8,31 @@ msgstr "" "MIME-Version: 1.0\n" "Content-Transfer-Encoding: 8bit\n" -#: htdocs/luci-static/resources/view/homeproxy/status.js:222 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:222 msgid "%s log" msgstr "%s 日志" -#: htdocs/luci-static/resources/view/homeproxy/node.js:913 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:913 msgid "%s nodes removed" msgstr "移除了 %s 个节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:858 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:858 msgid "(empty)" msgstr "(空)" -#: htdocs/luci-static/resources/view/homeproxy/status.js:110 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:110 msgid "(last updated %s)" msgstr "(最后更新 %s)" -#: htdocs/luci-static/resources/view/homeproxy/status.js:111 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:111 msgid "(never updated on this device)" msgstr "(本设备从未更新)" -#: htdocs/luci-static/resources/homeproxy.js:1098 -msgid "/etc/homeproxy/certs/..., /etc/acme/..., /etc/ssl/..." -msgstr "/etc/homeproxy/certs/...,/etc/acme/...,/etc/ssl/..." +#: htdocs/luci-static/resources/homeproxy-pro.js:1098 +msgid "/etc/homeproxy-pro/certs/..., /etc/acme/..., /etc/ssl/..." +msgstr "/etc/homeproxy-pro/certs/...,/etc/acme/...,/etc/ssl/..." -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:221 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:221 msgid "" "1 matches the latest untagged evaluate result; other values match an " "evaluate tag (1.14)." @@ -40,194 +40,194 @@ msgstr "" "1 匹配最近一次无 tag 的 evaluate 结果;其它值匹配对应的 evaluate tag" "(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:81 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:81 msgid "4 or 6. Not limited if empty." msgstr "4 或 6。留空不限制。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:288 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:436 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:288 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:436 msgid "" "%s will be temporarily overwritten to %s after 50 " "triggers in 30s if not enabled." msgstr "" "若未启用,30 秒内触发 50 次后,%s 将临时改为 %s。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:434 -#: htdocs/luci-static/resources/view/homeproxy/node.js:458 -#: htdocs/luci-static/resources/view/homeproxy/server.js:523 -#: htdocs/luci-static/resources/view/homeproxy/server.js:542 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:434 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:458 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:523 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:542 msgid "Save your configuration before uploading files!" msgstr "上传文件前请先保存配置!" -#: htdocs/luci-static/resources/view/homeproxy/server.js:375 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:375 msgid "ACME account key" msgstr "ACME 账户密钥" -#: htdocs/luci-static/resources/view/homeproxy/server.js:359 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:359 msgid "ACME key type" msgstr "ACME 密钥类型" -#: htdocs/luci-static/resources/view/homeproxy/server.js:369 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:369 msgid "ACME profile" msgstr "ACME 配置档" -#: htdocs/luci-static/resources/view/homeproxy/server.js:370 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:370 msgid "ACME profile for certificate issuance (1.14). Example: shortlived." msgstr "证书签发使用的 ACME profile(1.14)。示例:shortlived。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:419 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:419 msgid "API token" msgstr "API 令牌" -#: htdocs/luci-static/resources/view/homeproxy/node.js:227 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:227 msgid "Accept any if empty." msgstr "留空则不校验。" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:25 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:25 msgid "Access Control" msgstr "访问控制" -#: htdocs/luci-static/resources/view/homeproxy/server.js:402 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:402 msgid "Access key ID" msgstr "访问密钥 ID" -#: htdocs/luci-static/resources/view/homeproxy/server.js:408 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:408 msgid "Access key secret" msgstr "访问密钥 Secret" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:164 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:164 msgid "Action" msgstr "操作" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35 msgid "Add a DNS rule" msgstr "新增 DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221 msgid "Add a DNS server" msgstr "新增 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/node.js:25 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25 msgid "Add a node" msgstr "新增节点" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32 msgid "Add a routing node" msgstr "新增路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:35 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:35 msgid "Add a routing rule" msgstr "新增路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31 msgid "Add a rule set" msgstr "新增规则集" -#: htdocs/luci-static/resources/view/homeproxy/server.js:176 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176 msgid "Add a server" msgstr "新增服务器" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:267 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:267 msgid "Additional headers to be sent to the DNS server." msgstr "发送到 DNS 服务器的附加标头。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:249 -#: htdocs/luci-static/resources/view/homeproxy/node.js:58 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:249 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:58 msgid "Address" msgstr "地址" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:29 -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:40 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:29 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:40 msgid "Address and port dependent" msgstr "地址与端口相关" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:28 -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:28 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:39 msgid "Address dependent" msgstr "地址相关" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:280 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:280 msgid "Address resolver" msgstr "地址解析器" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:312 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:312 msgid "Address strategy" msgstr "地址解析策略" -#: htdocs/luci-static/resources/view/homeproxy/node.js:166 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:166 msgid "Aggressive" msgstr "激进" -#: htdocs/luci-static/resources/view/homeproxy/server.js:395 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:395 msgid "Alibaba Cloud DNS" msgstr "阿里云 DNS" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:131 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:165 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:131 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:165 msgid "Aliyun Public DNS (223.5.5.5)" msgstr "阿里云公共 DNS(223.5.5.5)" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:104 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:104 msgid "All ports" msgstr "所有端口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:196 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:196 msgid "Allow access from the Internet." msgstr "允许来自互联网的访问。" -#: htdocs/luci-static/resources/homeproxy.js:683 -#: htdocs/luci-static/resources/view/homeproxy/node.js:753 +#: htdocs/luci-static/resources/homeproxy-pro.js:683 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:753 msgid "Allow insecure" msgstr "允许不安全连接" -#: htdocs/luci-static/resources/homeproxy.js:684 +#: htdocs/luci-static/resources/homeproxy-pro.js:684 msgid "Allow insecure connection at TLS client." msgstr "允许 TLS 客户端侧的不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:754 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:754 msgid "Allow insecure connection by default when add nodes from subscriptions." msgstr "从订阅获取节点时,默认允许不安全连接。" -#: htdocs/luci-static/resources/homeproxy.js:615 +#: htdocs/luci-static/resources/homeproxy-pro.js:615 msgid "Allowed payload size is in the request." msgstr "请求中允许的载荷大小。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:129 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:129 msgid "Already at the latest version." msgstr "已是最新版本。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:126 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:126 msgid "Already in updating." msgstr "已在更新中。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:257 -#: htdocs/luci-static/resources/view/homeproxy/server.js:304 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:257 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:304 msgid "Alter ID" msgstr "额外 ID" -#: htdocs/luci-static/resources/view/homeproxy/server.js:433 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:433 msgid "Alternative HTTP port" msgstr "替代 HTTP 端口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:439 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:439 msgid "Alternative TLS port" msgstr "替代 HTTPS 端口" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:305 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:305 msgid "Answer" msgstr "回答" -#: htdocs/luci-static/resources/homeproxy.js:131 +#: htdocs/luci-static/resources/homeproxy-pro.js:131 msgid "AnyTLS" msgstr "AnyTLS" -#: htdocs/luci-static/resources/view/homeproxy/server.js:232 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:232 msgid "AnyTLS padding scheme in array." msgstr "AnyTLS 填充方案。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:213 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:460 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:89 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:213 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:460 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:89 msgid "" "Append a edns0-subnet OPT extra record with the specified IP " "prefix to every query by default.
If value is an IP address instead of " @@ -237,383 +237,383 @@ msgstr "" "OPT 附加记录。
如果值是 IP 地址而非前缀,将自动附加 /32 或 " "/128。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:420 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:420 msgid "Append self-signed certificate" msgstr "追加自签名证书" -#: htdocs/luci-static/resources/view/homeproxy/node.js:36 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:36 msgid "Applied" msgstr "已应用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:29 -#: htdocs/luci-static/resources/view/homeproxy/node.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:29 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:39 msgid "Apply" msgstr "应用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:16 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:16 msgid "Are you sure to allow insecure?" msgstr "确定要允许不安全连接吗?" -#: htdocs/luci-static/resources/homeproxy.js:346 +#: htdocs/luci-static/resources/homeproxy-pro.js:346 msgid "Auth timeout" msgstr "认证超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:281 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:281 msgid "Authenticated length" msgstr "认证长度" -#: htdocs/luci-static/resources/homeproxy.js:263 +#: htdocs/luci-static/resources/homeproxy-pro.js:263 msgid "Authentication payload" msgstr "认证载荷" -#: htdocs/luci-static/resources/homeproxy.js:256 +#: htdocs/luci-static/resources/homeproxy-pro.js:256 msgid "Authentication type" msgstr "认证类型" -#: htdocs/luci-static/resources/view/homeproxy/node.js:706 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:706 msgid "Auto update" msgstr "自动更新" -#: htdocs/luci-static/resources/view/homeproxy/node.js:707 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:707 msgid "Auto update subscriptions and geodata." msgstr "自动更新订阅和地理数据。" -#: htdocs/luci-static/resources/homeproxy.js:325 +#: htdocs/luci-static/resources/homeproxy-pro.js:325 msgid "BBR" msgstr "BBR" -#: htdocs/luci-static/resources/view/homeproxy/node.js:163 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:163 msgid "BBR congestion control algorithm profile. Hysteria2 only." msgstr "BBR 拥塞控制算法档位。仅 Hysteria2。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:162 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:162 msgid "BBR profile (1.14)" msgstr "BBR 档位(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/status.js:252 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:252 msgid "BaiDu" msgstr "百度" -#: htdocs/luci-static/resources/homeproxy.js:258 +#: htdocs/luci-static/resources/homeproxy-pro.js:258 msgid "Base64" msgstr "Base64" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:170 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:170 msgid "Based on google/gvisor." msgstr "基于 google/gvisor。" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:56 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:56 msgid "Binary file" msgstr "二进制文件" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:38 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:84 -#: htdocs/luci-static/resources/view/homeproxy/server.js:629 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:38 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:84 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:629 msgid "Bind interface" msgstr "绑定接口" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:39 msgid "" "Bind outbound traffic to specific interface. Leave empty to auto detect." msgstr "绑定出站流量至指定端口。留空自动检测。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:90 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:90 msgid "BitTorrent" msgstr "BitTorrent" -#: htdocs/luci-static/resources/view/homeproxy/node.js:740 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:740 msgid "Blacklist mode" msgstr "黑名单模式" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:211 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:211 msgid "Block" msgstr "封锁" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:84 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:108 -#: htdocs/luci-static/resources/view/homeproxy/server.js:624 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:84 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:108 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:624 msgid "Both" msgstr "全部" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:190 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:190 msgid "Bypass CN traffic" msgstr "绕过中国流量" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:84 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:84 msgid "Bypass mainland China" msgstr "大陆白名单" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:191 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:191 msgid "Bypass mainland China traffic via firewall rules by default." msgstr "默认使用防火墙规则绕过中国大陆流量。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:382 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:382 msgid "CA provider" msgstr "CA 颁发机构" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:196 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:196 msgid "CN-IP DNS fallback (sing-box 1.14)" msgstr "大陆 IP DNS 兜底(sing-box 1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:166 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:166 msgid "CNNIC Public DNS (210.2.4.8)" msgstr "CNNIC 公共 DNS(210.2.4.8)" -#: htdocs/luci-static/resources/homeproxy.js:323 +#: htdocs/luci-static/resources/homeproxy-pro.js:323 msgid "CUBIC" msgstr "CUBIC" -#: htdocs/luci-static/resources/view/homeproxy/node.js:596 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:596 msgid "Cancel" msgstr "取消" -#: htdocs/luci-static/resources/view/homeproxy/node.js:425 -#: htdocs/luci-static/resources/view/homeproxy/server.js:511 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:425 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:511 msgid "Certificate path" msgstr "证书路径" -#: htdocs/luci-static/resources/view/homeproxy/status.js:95 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:95 msgid "Check" msgstr "检查" -#: htdocs/luci-static/resources/view/homeproxy/status.js:139 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:139 msgid "Check update" msgstr "检查更新" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:162 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:162 msgid "China DNS server" msgstr "国内 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/status.js:261 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:261 msgid "China IPv4 list version" msgstr "国内 IPv4 库版本" -#: htdocs/luci-static/resources/view/homeproxy/status.js:265 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:265 msgid "China IPv6 list version" msgstr "国内 IPv6 库版本" -#: htdocs/luci-static/resources/view/homeproxy/status.js:269 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:269 msgid "China list version" msgstr "国内域名列表版本" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:125 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:125 msgid "Chromium / Cronet" msgstr "Chromium / Cronet" -#: htdocs/luci-static/resources/homeproxy.js:708 +#: htdocs/luci-static/resources/homeproxy-pro.js:708 msgid "Cipher suites" msgstr "密码套件" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:128 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:128 msgid "Cisco Public DNS (208.67.222.222)" msgstr "思科公共 DNS(208.67.222.222)" -#: htdocs/luci-static/resources/view/homeproxy/status.js:231 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:231 msgid "Clean log" msgstr "清空日志" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:123 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:123 msgid "Client" msgstr "客户端" -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:14 +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:14 msgid "Client Settings" msgstr "客户端设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:221 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:221 msgid "Client version" msgstr "客户端版本" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:127 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:127 msgid "CloudFlare Public DNS (1.1.1.1)" msgstr "CloudFlare 公共 DNS(1.1.1.1)" -#: htdocs/luci-static/resources/view/homeproxy/server.js:396 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:396 msgid "Cloudflare" msgstr "Cloudflare" -#: htdocs/luci-static/resources/view/homeproxy/client.js:130 -#: htdocs/luci-static/resources/view/homeproxy/server.js:146 -#: htdocs/luci-static/resources/view/homeproxy/status.js:212 +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:130 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:146 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:212 msgid "Collecting data..." msgstr "正在收集数据中..." -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:105 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:105 msgid "Common ports only (bypass P2P traffic)" msgstr "仅常用端口(绕过 P2P 流量)" -#: htdocs/luci-static/resources/homeproxy.js:321 +#: htdocs/luci-static/resources/homeproxy-pro.js:321 msgid "Congestion control algorithm" msgstr "拥塞控制算法" -#: htdocs/luci-static/resources/view/homeproxy/status.js:249 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:249 msgid "Connection check" msgstr "连接检查" -#: htdocs/luci-static/resources/view/homeproxy/node.js:394 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:394 msgid "Connection reuse" msgstr "连接复用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:165 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:165 msgid "Conservative" msgstr "保守" -#: htdocs/luci-static/resources/view/homeproxy/node.js:809 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809 msgid "Could not start subscription update: %s" msgstr "无法启动订阅更新:%s" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:86 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:86 msgid "Custom routing" msgstr "自定义路由" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:92 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:92 msgid "DNS" msgstr "DNS" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25 msgid "DNS Rules" msgstr "DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:212 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:212 msgid "DNS Servers" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:56 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:122 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:56 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:122 msgid "DNS Settings" msgstr "DNS 设置" -#: htdocs/luci-static/resources/view/homeproxy/server.js:394 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:394 msgid "DNS provider" msgstr "DNS 提供商" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:39 msgid "DNS query timeout" msgstr "DNS 查询超时" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34 msgid "DNS rule" msgstr "DNS 规则" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:410 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:124 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:221 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:410 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:124 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:221 msgid "DNS server" msgstr "DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/server.js:390 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:390 msgid "DNS01 challenge" msgstr "DNS01 验证" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:93 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:93 msgid "DTLS" msgstr "DTLS" -#: htdocs/luci-static/resources/view/homeproxy/status.js:179 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:179 msgid "Debug" msgstr "调试" -#: htdocs/luci-static/resources/homeproxy.js:62 -#: htdocs/luci-static/resources/homeproxy.js:334 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:73 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:416 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:64 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:99 +#: htdocs/luci-static/resources/homeproxy-pro.js:62 +#: htdocs/luci-static/resources/homeproxy-pro.js:334 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:73 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:416 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:64 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:99 msgid "Default" msgstr "默认" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:185 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:417 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:71 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:65 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:287 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:228 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:185 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:417 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:71 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:65 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:287 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:228 msgid "Default DNS (issued by WAN)" msgstr "默认 DNS(由 WAN 下发)" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:66 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:66 msgid "Default DNS server" msgstr "默认 DNS 服务器" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:223 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:223 msgid "Default DNS server for resolving domain name in the server address." msgstr "用于解析服务器地址中的域名的默认 DNS 服务器。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:61 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:61 msgid "Default DNS strategy" msgstr "默认 DNS 解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:203 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:203 msgid "Default outbound" msgstr "默认出站" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:222 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:222 msgid "Default outbound DNS" msgstr "默认出站 DNS" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:204 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:204 msgid "Default outbound for connections not matched by any routing rules." msgstr "用于未被任何路由规则匹配的连接的默认出站。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:760 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:760 msgid "Default packet encoding" msgstr "默认包封装格式" -#: htdocs/luci-static/resources/view/homeproxy/server.js:338 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:338 msgid "Default server name" msgstr "默认服务器名称" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:40 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:40 msgid "Default timeout per DNS query in seconds (sing-box default: 10)." msgstr "每次 DNS 查询的默认超时时间(秒,sing-box 默认为 10)。" -#: htdocs/luci-static/resources/homeproxy.js:130 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:326 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:97 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:325 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:210 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:100 +#: htdocs/luci-static/resources/homeproxy-pro.js:130 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:326 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:97 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:325 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:210 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:100 msgid "Direct" msgstr "直连" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:165 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:165 msgid "Direct Domain List" msgstr "直连域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:54 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:99 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:54 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:99 msgid "Direct IPv4 IP-s" msgstr "直连 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:57 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:102 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:57 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:102 msgid "Direct IPv6 IP-s" msgstr "直连 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:60 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:60 msgid "Direct MAC-s" msgstr "直连 MAC 地址" -#: htdocs/luci-static/resources/homeproxy.js:257 -#: htdocs/luci-static/resources/homeproxy.js:270 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:48 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:26 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:54 -#: htdocs/luci-static/resources/view/homeproxy/node.js:93 -#: htdocs/luci-static/resources/view/homeproxy/node.js:468 -#: htdocs/luci-static/resources/view/homeproxy/node.js:739 +#: htdocs/luci-static/resources/homeproxy-pro.js:257 +#: htdocs/luci-static/resources/homeproxy-pro.js:270 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:48 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:26 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:54 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:93 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:468 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:739 msgid "Disable" msgstr "禁用" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:209 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:209 msgid "Disable (the service)" msgstr "禁用(服务)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:170 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:170 msgid "Disable Chrome QUIC fingerprint (1.14)" msgstr "禁用 Chrome QUIC 指纹(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:171 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:171 msgid "" "Disable Chrome QUIC handshake parroting, which is enabled by default since " "sing-box 1.14. Turn this on only when the server uses an Ed25519 certificate " @@ -622,116 +622,116 @@ msgstr "" "禁用自 sing-box 1.14 起默认开启的 Chrome QUIC 握手伪装。仅在服务器证书为 " "Ed25519 或握手失败时才需要开启。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:448 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:83 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:448 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:83 msgid "Disable DNS cache" msgstr "禁用 DNS 缓存" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:449 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:449 msgid "Disable DNS cache in this query." msgstr "在本次查询中禁用 DNS 缓存。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:425 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:425 msgid "Disable HTTP challenge" msgstr "禁用 HTTP 验证" -#: htdocs/luci-static/resources/view/homeproxy/server.js:429 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:429 msgid "Disable TLS ALPN challenge" msgstr "禁用 TLS ALPN 认证" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:352 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:352 msgid "Disable UDP domain unmapping" msgstr "禁用 UDP 域名映射" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:200 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:200 msgid "Disable cache and save cache in this query." msgstr "在本次查询中禁用缓存。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:85 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:85 msgid "Disable cache expire" msgstr "缓存永不过期" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:199 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:199 msgid "Disable dns cache" msgstr "禁用 DNS 缓存" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:242 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:242 msgid "Disable optimistic DNS caching for this query." msgstr "对此查询禁用乐观 DNS 缓存。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:467 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:467 msgid "Disable optimistic DNS caching in this lookup (1.14)." msgstr "关闭本次查询解析的乐观 DNS 缓存(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:241 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:466 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:241 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:466 msgid "Disable optimistic cache" msgstr "禁用乐观缓存" -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:31 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:31 msgid "Disabled" msgstr "禁用" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:487 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:487 msgid "Domain keyword" msgstr "域名关键词" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:478 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:478 msgid "Domain name" msgstr "域名" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:491 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:491 msgid "Domain regex" msgstr "域名正则表达式" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:58 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:58 msgid "Domain resolver" msgstr "域名解析器" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:77 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:198 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:77 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:198 msgid "Domain strategy" msgstr "域名解析策略" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:442 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:442 msgid "Domain strategy for resolving the domain names." msgstr "目标域名的解析策略。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:483 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:483 msgid "Domain suffix" msgstr "域名后缀" -#: htdocs/luci-static/resources/view/homeproxy/server.js:332 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:332 msgid "Domains" msgstr "域名" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:435 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:435 msgid "Don't drop packets" msgstr "不丢弃数据包" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:287 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:287 msgid "Don't drop requests" msgstr "不丢弃请求" -#: htdocs/luci-static/resources/homeproxy.js:178 +#: htdocs/luci-static/resources/homeproxy-pro.js:178 msgid "Download bandwidth" msgstr "下载带宽" -#: htdocs/luci-static/resources/homeproxy.js:179 +#: htdocs/luci-static/resources/homeproxy-pro.js:179 msgid "Download bandwidth in Mbps." msgstr "下载带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:431 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:431 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437 msgid "Drop packets" msgstr "丢弃数据包" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:282 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:282 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289 msgid "Drop requests" msgstr "丢弃请求" -#: htdocs/luci-static/resources/view/homeproxy/node.js:746 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:746 msgid "" "Drop/keep nodes that contain the specific keywords. 支" "持正则表达式。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:738 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:738 msgid "Drop/keep specific nodes from subscriptions." msgstr "从订阅中 丢弃/保留 指定节点" -#: htdocs/luci-static/resources/view/homeproxy/server.js:446 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:446 msgid "" "EAB (External Account Binding) contains information necessary to bind or map " "an ACME account to some other account known by the CA.
External account " @@ -758,7 +758,7 @@ msgstr "" "其他帐户所需的信息。
外部帐户绑定“用于将 ACME 帐户与非 ACME 系统中的现有" "帐户相关联,例如 CA 客户数据库。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:442 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:442 msgid "" "ECH (Encrypted Client Hello) is a TLS extension that allows a client to " "encrypt the first part of its ClientHello message." @@ -767,55 +767,55 @@ msgstr "" "分。ECH(Encrypted Client Hello)是一个 TLS 扩展,它允许客户端加密其 " "ClientHello 信息的第一部分。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:462 -#: htdocs/luci-static/resources/view/homeproxy/server.js:590 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:462 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:590 msgid "ECH config" msgstr "ECH 配置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:446 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:446 msgid "ECH config path" msgstr "ECH 配置路径" -#: htdocs/luci-static/resources/view/homeproxy/server.js:549 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:549 msgid "ECH key" msgstr "ECH 密钥" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:212 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:459 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:88 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:212 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:459 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:88 msgid "EDNS Client subnet" msgstr "EDNS 客户端子网" -#: htdocs/luci-static/resources/homeproxy.js:614 +#: htdocs/luci-static/resources/homeproxy-pro.js:614 msgid "Early data" msgstr "前置数据" -#: htdocs/luci-static/resources/homeproxy.js:621 +#: htdocs/luci-static/resources/homeproxy-pro.js:621 msgid "Early data header name" msgstr "前置数据标头" -#: htdocs/luci-static/resources/homeproxy.js:622 +#: htdocs/luci-static/resources/homeproxy-pro.js:622 msgid "Early data is sent in path instead of header by default." msgstr "前置数据默认发送在路径而不是标头中。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:568 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:568 msgid "Edit nodes" msgstr "修改节点" -#: htdocs/luci-static/resources/view/homeproxy/server.js:344 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:344 msgid "Email" msgstr "Email" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:53 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:45 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:234 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:44 -#: htdocs/luci-static/resources/view/homeproxy/server.js:168 -#: htdocs/luci-static/resources/view/homeproxy/server.js:190 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:53 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:45 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:234 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:44 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:168 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:190 msgid "Enable" msgstr "启用" -#: htdocs/luci-static/resources/homeproxy.js:355 +#: htdocs/luci-static/resources/homeproxy-pro.js:355 msgid "" "Enable 0-RTT QUIC connection handshake on the client side. This is not " "impacting much on the performance, as the protocol is fully multiplexed.
强烈建议禁用,因为它容易受到重放攻击。" -#: htdocs/luci-static/resources/homeproxy.js:354 +#: htdocs/luci-static/resources/homeproxy-pro.js:354 msgid "Enable 0-RTT handshake" msgstr "启用 0-RTT 握手" -#: htdocs/luci-static/resources/view/homeproxy/server.js:327 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:327 msgid "Enable ACME" msgstr "启用 ACME" -#: htdocs/luci-static/resources/view/homeproxy/node.js:441 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:441 msgid "Enable ECH" msgstr "启用 ECH" -#: htdocs/luci-static/resources/homeproxy.js:173 +#: htdocs/luci-static/resources/homeproxy-pro.js:173 msgid "Enable TCP Brutal" msgstr "启用 TCP Brutal" -#: htdocs/luci-static/resources/homeproxy.js:174 +#: htdocs/luci-static/resources/homeproxy-pro.js:174 msgid "Enable TCP Brutal congestion control algorithm" msgstr "启用 TCP Brutal 拥塞控制算法。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:521 -#: htdocs/luci-static/resources/view/homeproxy/server.js:610 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:521 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:610 msgid "Enable UDP fragmentation." msgstr "启用 UDP 分片。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:395 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:395 msgid "Enable connection reuse (the Snell v2 CONNECT command)." msgstr "启用连接复用(Snell v2 CONNECT 指令)。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:175 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:175 msgid "Enable endpoint-independent NAT" msgstr "启用端点独立 NAT" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:195 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:195 msgid "" "Enable neighbor resolution so rules can match LAN devices by hostname (1.14)." msgstr "启用邻居解析,使规则可按主机名匹配局域网设备(1.14)。" -#: htdocs/luci-static/resources/homeproxy.js:166 +#: htdocs/luci-static/resources/homeproxy-pro.js:166 msgid "Enable padding" msgstr "启用填充" -#: htdocs/luci-static/resources/view/homeproxy/server.js:601 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:601 msgid "Enable tcp fast open for listener." msgstr "为监听器启用 TCP 快速打开。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:525 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:525 msgid "" "Enable the SUoT protocol, requires server support. Conflict with multiplex." msgstr "启用 SUoT 协议,需要服务端支持。与多路复用冲突。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:177 -#: htdocs/luci-static/resources/view/homeproxy/node.js:263 -#: htdocs/luci-static/resources/view/homeproxy/server.js:284 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:177 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:263 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:284 msgid "Encrypt method" msgstr "加密方式" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:27 -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:38 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:27 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:38 msgid "Endpoint independent" msgstr "端点无关" -#: htdocs/luci-static/resources/view/homeproxy/status.js:182 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:182 msgid "Error" msgstr "错误" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:170 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:170 msgid "Evaluate (1.14)" msgstr "Evaluate(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:225 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:225 msgid "Evaluate tag" msgstr "Evaluate 标签" -#: htdocs/luci-static/resources/homeproxy.js:220 -#: htdocs/luci-static/resources/homeproxy.js:1035 -#: htdocs/luci-static/resources/homeproxy.js:1085 -#: htdocs/luci-static/resources/homeproxy.js:1098 -#: htdocs/luci-static/resources/homeproxy.js:1117 -#: htdocs/luci-static/resources/homeproxy.js:1126 -#: htdocs/luci-static/resources/homeproxy.js:1137 -#: htdocs/luci-static/resources/homeproxy.js:1146 -#: htdocs/luci-static/resources/homeproxy.js:1148 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126 -#: htdocs/luci-static/resources/view/homeproxy/node.js:484 -#: htdocs/luci-static/resources/view/homeproxy/node.js:727 -#: htdocs/luci-static/resources/view/homeproxy/node.js:730 -#: htdocs/luci-static/resources/view/homeproxy/server.js:350 -#: htdocs/luci-static/resources/view/homeproxy/server.js:352 +#: htdocs/luci-static/resources/homeproxy-pro.js:220 +#: htdocs/luci-static/resources/homeproxy-pro.js:1035 +#: htdocs/luci-static/resources/homeproxy-pro.js:1085 +#: htdocs/luci-static/resources/homeproxy-pro.js:1098 +#: htdocs/luci-static/resources/homeproxy-pro.js:1117 +#: htdocs/luci-static/resources/homeproxy-pro.js:1126 +#: htdocs/luci-static/resources/homeproxy-pro.js:1137 +#: htdocs/luci-static/resources/homeproxy-pro.js:1146 +#: htdocs/luci-static/resources/homeproxy-pro.js:1148 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:350 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:352 msgid "Expecting: %s" msgstr "请输入:%s" -#: htdocs/luci-static/resources/view/homeproxy/server.js:445 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:445 msgid "External Account Binding" msgstr "外部账户绑定" -#: htdocs/luci-static/resources/view/homeproxy/server.js:457 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:457 msgid "External account MAC key" msgstr "外部账户 MAC 密钥" -#: htdocs/luci-static/resources/view/homeproxy/server.js:451 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:451 msgid "External account key ID" msgstr "外部账户密钥标识符" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:315 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:315 msgid "Extra records" msgstr "附加记录" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:117 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:117 msgid "" "Extra rule-set tags sharing these options. Requires {tag} in path/url (1.14)." msgstr "" "共享这些选项的额外规则集标签。使用多标签时 path/url 需包含 {tag}(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:116 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:116 msgid "Extra tags" msgstr "额外标签" -#: htdocs/luci-static/resources/view/homeproxy/node.js:657 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:657 msgid "Failed to close the import dialog: %s" msgstr "关闭导入对话框失败:%s" -#: htdocs/luci-static/resources/view/homeproxy/server.js:93 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:93 msgid "Failed to generate %s, error: %s." msgstr "生成 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:124 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:177 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:124 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:177 msgid "Failed to read domain list: %s." msgstr "读取域名列表失败:%s。" -#: htdocs/luci-static/resources/homeproxy.js:1075 +#: htdocs/luci-static/resources/homeproxy-pro.js:1075 msgid "Failed to upload %s, error: %s." msgstr "上传 %s 失败,错误:%s。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:183 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:183 msgid "Fatal" msgstr "致命" -#: htdocs/luci-static/resources/view/homeproxy/node.js:745 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:745 msgid "Filter keywords" msgstr "过滤关键词" -#: htdocs/luci-static/resources/view/homeproxy/node.js:737 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:737 msgid "Filter nodes" msgstr "过滤节点" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:194 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:194 msgid "Find neighbor hosts" msgstr "发现邻居主机" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:126 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:126 msgid "Firefox / uquic firefox" msgstr "Firefox / uquic firefox" -#: htdocs/luci-static/resources/view/homeproxy/server.js:195 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:195 msgid "Firewall" msgstr "防火墙" -#: htdocs/luci-static/resources/view/homeproxy/node.js:251 -#: htdocs/luci-static/resources/view/homeproxy/server.js:298 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:251 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:298 msgid "Flow" msgstr "流控" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:59 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:59 msgid "For resolving domain name in the server address." msgstr "用于解析服务器地址中的域名。" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:55 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:55 msgid "Format" msgstr "格式" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:372 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:372 msgid "Fragment TLS handshake into multiple TLS records." msgstr "将 TLS 握手分片为多个 TLS 记录" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:378 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:378 msgid "" "Fragment TLS handshakes. Due to poor performance, try %s first." msgstr "分片 TLS 握手。由于性能较差,请先尝试 %s。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:384 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:384 msgid "Fragment fallback delay" msgstr "分片回退延迟" -#: htdocs/luci-static/resources/homeproxy.js:583 +#: htdocs/luci-static/resources/homeproxy-pro.js:583 msgid "GET" msgstr "GET" -#: htdocs/luci-static/resources/view/homeproxy/status.js:273 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:273 msgid "GFW list version" msgstr "GFW 域名列表版本" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:83 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:83 msgid "GFWList" msgstr "GFWList" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:72 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:72 msgid "Gaming mode IPv4 IP-s" msgstr "游戏模式 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:74 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:74 msgid "Gaming mode IPv6 IP-s" msgstr "游戏模式 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:77 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:77 msgid "Gaming mode MAC-s" msgstr "游戏模式 MAC 地址" -#: htdocs/luci-static/resources/homeproxy.js:272 +#: htdocs/luci-static/resources/homeproxy-pro.js:272 msgid "Gecko (1.14)" msgstr "Gecko(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/server.js:37 -#: htdocs/luci-static/resources/view/homeproxy/server.js:39 -#: htdocs/luci-static/resources/view/homeproxy/server.js:582 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:37 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:582 msgid "Generate" msgstr "生成" -#: htdocs/luci-static/resources/view/homeproxy/status.js:277 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:277 msgid "GitHub token" msgstr "GitHub 令牌" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:87 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:87 msgid "Global" msgstr "全局" -#: htdocs/luci-static/resources/view/homeproxy/node.js:274 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:274 msgid "Global padding" msgstr "全局填充" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:79 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:79 msgid "Global proxy IPv4 IP-s" msgstr "全局代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:82 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:82 msgid "Global proxy IPv6 IP-s" msgstr "全局代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:85 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:85 msgid "Global proxy MAC-s" msgstr "全局代理 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/server.js:166 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:166 msgid "Global settings" msgstr "全局设置" -#: htdocs/luci-static/resources/view/homeproxy/status.js:255 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:255 msgid "Google" msgstr "谷歌" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:129 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:129 msgid "Google Public DNS (8.8.8.8)" msgstr "谷歌公共 DNS(8.8.8.8)" -#: root/usr/share/rpcd/acl.d/luci-app-homeproxy.json:3 -msgid "Grant access to homeproxy configuration" -msgstr "授予 homeproxy 访问 UCI 配置的权限" +#: root/usr/share/rpcd/acl.d/luci-app-homeproxy-pro.json:3 +msgid "Grant access to homeproxy-pro configuration" +msgstr "授予 homeproxy-pro 访问 UCI 配置的权限" -#: htdocs/luci-static/resources/homeproxy.js:132 -#: htdocs/luci-static/resources/homeproxy.js:520 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:94 +#: htdocs/luci-static/resources/homeproxy-pro.js:132 +#: htdocs/luci-static/resources/homeproxy-pro.js:520 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:94 msgid "HTTP" msgstr "HTTP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:407 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:407 msgid "" "HTTP Host header sent when obfuscation mode is http. bing.com is used by " "default." msgstr "混淆模式为 http 时发送的 HTTP Host 头;默认 bing.com。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:400 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:400 msgid "HTTP obfuscation. v4 only." msgstr "HTTP 混淆。仅 v4。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:276 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:276 msgid "HTTP obfuscation. v5 only." msgstr "HTTP 混淆。仅 v5。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:244 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:244 msgid "HTTP/3" msgstr "HTTP/3" -#: htdocs/luci-static/resources/view/homeproxy/server.js:257 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:257 msgid "" "HTTP3 server behavior when authentication fails.
A 404 page will be " "returned if empty." msgstr "身份验证失败时的 HTTP3 服务器响应。默认返回 404 页面。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:243 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:243 msgid "HTTPS" msgstr "HTTPS" -#: htdocs/luci-static/resources/homeproxy.js:521 +#: htdocs/luci-static/resources/homeproxy-pro.js:521 msgid "HTTPUpgrade" msgstr "HTTPUpgrade" -#: htdocs/luci-static/resources/view/homeproxy/server.js:499 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:499 msgid "Handshake server address" msgstr "握手服务器地址" -#: htdocs/luci-static/resources/view/homeproxy/server.js:505 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:505 msgid "Handshake server port" msgstr "握手服务器端口" -#: htdocs/luci-static/resources/homeproxy.js:717 +#: htdocs/luci-static/resources/homeproxy-pro.js:717 msgid "Handshake timeout (1.14)" msgstr "握手超时(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:266 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:266 msgid "Headers" msgstr "标头" -#: htdocs/luci-static/resources/homeproxy.js:360 +#: htdocs/luci-static/resources/homeproxy-pro.js:360 msgid "Heartbeat interval" msgstr "心跳间隔" -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:33 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:33 msgid "Hijack" msgstr "劫持" -#: htdocs/luci-static/resources/view/homeproxy/client.js:70 -#: htdocs/luci-static/resources/view/homeproxy/client.js:119 -#: htdocs/luci-static/resources/view/homeproxy/status.js:299 -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:3 +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:70 +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:119 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:299 +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:3 msgid "HomeProxy" msgstr "HomeProxy" -#: htdocs/luci-static/resources/view/homeproxy/server.js:75 -#: htdocs/luci-static/resources/view/homeproxy/server.js:136 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:75 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:136 msgid "HomeProxy Server" msgstr "HomeProxy 服务端" -#: htdocs/luci-static/resources/view/homeproxy/node.js:129 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:129 msgid "Hop interval" msgstr "跳跃间隔" -#: htdocs/luci-static/resources/view/homeproxy/node.js:123 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:123 msgid "Hopping port" msgstr "跳跃端口" -#: htdocs/luci-static/resources/homeproxy.js:566 -#: htdocs/luci-static/resources/homeproxy.js:571 -#: htdocs/luci-static/resources/homeproxy.js:606 +#: htdocs/luci-static/resources/homeproxy-pro.js:566 +#: htdocs/luci-static/resources/homeproxy-pro.js:571 +#: htdocs/luci-static/resources/homeproxy-pro.js:606 msgid "Host" msgstr "主机名" -#: htdocs/luci-static/resources/view/homeproxy/node.js:226 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:226 msgid "Host key" msgstr "主机密钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:231 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:231 msgid "Host key algorithms" msgstr "主机密钥算法" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:44 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:44 msgid "Host/IP fields" msgstr "主机/IP 字段" -#: htdocs/luci-static/resources/homeproxy.js:347 +#: htdocs/luci-static/resources/homeproxy-pro.js:347 msgid "" "How long the server should wait for the client to send the authentication " "command (in seconds)." msgstr "服务器等待客户端发送认证命令的时间(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:399 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:399 msgid "How the forged segment is rejected by the real server." msgstr "伪造段被真实服务器拒绝的方式。" -#: htdocs/luci-static/resources/homeproxy.js:133 +#: htdocs/luci-static/resources/homeproxy-pro.js:133 msgid "Hysteria" msgstr "Hysteria" -#: htdocs/luci-static/resources/homeproxy.js:134 +#: htdocs/luci-static/resources/homeproxy-pro.js:134 msgid "Hysteria2" msgstr "Hysteria2" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:503 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:503 msgid "IP CIDR" msgstr "IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:80 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:80 msgid "IP version" msgstr "IP 版本" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:82 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:82 msgid "IPv4" msgstr "IPv4" -#: htdocs/luci-static/resources/homeproxy.js:65 +#: htdocs/luci-static/resources/homeproxy-pro.js:65 msgid "IPv4 only" msgstr "仅 IPv4" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:83 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:83 msgid "IPv6" msgstr "IPv6" -#: htdocs/luci-static/resources/homeproxy.js:66 +#: htdocs/luci-static/resources/homeproxy-pro.js:66 msgid "IPv6 only" msgstr "仅 IPv6" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:135 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:135 msgid "IPv6 support" msgstr "IPv6 支持" -#: htdocs/luci-static/resources/view/homeproxy/node.js:100 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:100 msgid "Idle session check interval" msgstr "空闲会话检查间隔" -#: htdocs/luci-static/resources/view/homeproxy/node.js:107 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:107 msgid "Idle session check timeout" msgstr "空闲会话检查超时" -#: htdocs/luci-static/resources/homeproxy.js:589 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:190 +#: htdocs/luci-static/resources/homeproxy-pro.js:589 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:190 msgid "Idle timeout" msgstr "空闲超时" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:359 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:359 msgid "" "If enabled, attempts to connect UDP connection to the destination instead of " "listen." msgstr "如果启用,尝试主动连接到目标的 UDP 而不是监听。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:353 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:353 msgid "" "If enabled, for UDP proxy requests addressed to a domain, the original " "packet address will be sent in the response instead of the mapped domain." @@ -1273,18 +1273,18 @@ msgstr "" "如启用,对于发往域名的 UDP 代理请求,响应中将发送原始数据包地址,而不是映射后" "的域名。" -#: htdocs/luci-static/resources/homeproxy.js:561 +#: htdocs/luci-static/resources/homeproxy-pro.js:561 msgid "" "If enabled, the client transport sends keepalive pings even with no active " "connections." msgstr "如果启用,客户端传输即使没有活动连接也会发送 keepalive ping。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:199 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:199 msgid "" "If set, the requested domain name will be resolved to IP before routing." msgstr "如果设置,请求的域名将在路由前被解析为 IP 地址。" -#: htdocs/luci-static/resources/homeproxy.js:24 +#: htdocs/luci-static/resources/homeproxy-pro.js:24 msgid "" "If the transport doesn't see any activity after a duration of this time (in " "seconds), it pings the client to check if the connection is still active." @@ -1293,61 +1293,61 @@ msgstr "" "是否仍处于活动状态。如果传输在此时间段(单位:秒)后没有看到任何活动,它会向" "客户端发送 ping 请求以检查连接是否仍然活动。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:421 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:421 msgid "" "If you have the root certificate, use this option instead of allowing " "insecure." msgstr "如果你拥有根证书,使用此选项而不是允许不安全连接。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:251 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:251 msgid "Ignore client bandwidth" msgstr "忽略客户端带宽" -#: htdocs/luci-static/resources/view/homeproxy/node.js:662 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:662 msgid "Import" msgstr "导入" -#: htdocs/luci-static/resources/view/homeproxy/node.js:589 -#: htdocs/luci-static/resources/view/homeproxy/node.js:682 -#: htdocs/luci-static/resources/view/homeproxy/node.js:684 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:589 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:682 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:684 msgid "Import share links" msgstr "导入分享链接" -#: htdocs/luci-static/resources/view/homeproxy/node.js:658 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:658 msgid "" "Imported the nodes, but the dialog did not close automatically. Close it " "manually." msgstr "节点已导入,但对话框未能自动关闭。请手动关闭。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:183 -#: htdocs/luci-static/resources/view/homeproxy/server.js:615 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:183 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:615 msgid "In seconds." msgstr "单位:秒。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:333 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:333 msgid "In seconds. Disabled by default." msgstr "单位:秒。默认禁用。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:115 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:115 msgid "" "In the check, at least the first n idle sessions are kept open." msgstr "在检查中,至少保持前 n 个空闲会话处于打开状态。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:108 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:108 msgid "" "In the check, close sessions that have been idle for longer than this, in " "seconds." msgstr "在检查中,关闭空闲时间超过此值的会话(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:180 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:180 msgid "Info" msgstr "信息" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:110 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:110 msgid "Initial path" msgstr "初始路径" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:392 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:392 msgid "" "Inject a forged TLS ClientHello carrying this SNI before the real one to " "fool SNI-filtering middleboxes. Requires elevated privileges." @@ -1355,60 +1355,60 @@ msgstr "" "在真实握手前注入携带该 SNI 的伪造 TLS ClientHello,以欺骗按 SNI 过滤的中间" "盒;需要特权。" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:31 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:31 msgid "Interface Control" msgstr "接口控制" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:197 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:197 msgid "Interrupt existing connections" msgstr "中断现有连接" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:198 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:198 msgid "Interrupt existing connections when the selected outbound has changed." msgstr "当选择的出站发生变化时中断现有连接。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:101 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:101 msgid "Interval checking for idle sessions, in seconds." msgstr "空闲会话检查间隔(单位:秒)。" -#: htdocs/luci-static/resources/homeproxy.js:361 +#: htdocs/luci-static/resources/homeproxy-pro.js:361 msgid "" "Interval for sending heartbeat packets for keeping the connection alive (in " "seconds)." msgstr "发送心跳包以保持连接存活的时间间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:160 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:160 msgid "Invert" msgstr "反转" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:161 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:161 msgid "Invert match result." msgstr "反转匹配结果" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:231 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:231 msgid "" "Judge this response-dependent rule in parallel; first match wins (1.14)." msgstr "并行判定此响应依赖规则,首个命中即生效(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:530 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:530 msgid "Key path" msgstr "证书路径" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:45 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:45 msgid "LAN IP Policy" msgstr "LAN IP 策略" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:48 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:40 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:229 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:39 -#: htdocs/luci-static/resources/view/homeproxy/node.js:51 -#: htdocs/luci-static/resources/view/homeproxy/server.js:184 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:48 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:40 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:229 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:51 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:184 msgid "Label" msgstr "标签" -#: htdocs/luci-static/resources/view/homeproxy/node.js:258 -#: htdocs/luci-static/resources/view/homeproxy/server.js:305 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:258 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:305 msgid "" "Legacy protocol support (VMess MD5 Authentication) is provided for " "compatibility purposes only, use of alterId > 1 is not recommended." @@ -1416,188 +1416,188 @@ msgstr "" "仅为兼容目的提供旧协议(VMess MD5 认证)支持,不建议使用大于 1 的 alterId。提" "供旧协议支持(VMess MD5 身份验证)仅出于兼容性目的,不建议使用 alterId > 1。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:172 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:172 msgid "Less compatibility and sometimes better performance." msgstr "有时性能更好。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:384 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:384 msgid "Let's Encrypt" msgstr "Let's Encrypt" -#: htdocs/luci-static/resources/view/homeproxy/node.js:293 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:293 msgid "" "List of IP (v4 or v6) addresses prefixes to be assigned to the interface." msgstr "分配给接口的 IP(v4 或 v6)地址前缀列表。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:128 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:35 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:64 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:128 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:35 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:64 msgid "List of nodes to test." msgstr "要测试的节点列表。" -#: htdocs/luci-static/resources/homeproxy.js:678 +#: htdocs/luci-static/resources/homeproxy-pro.js:678 msgid "List of supported application level protocols, in order of preference." msgstr "支持的应用层协议协商列表,按顺序排列。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:306 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:306 msgid "List of text DNS record to respond as answers." msgstr "要响应的 DNS 记录列表。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:316 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:316 msgid "List of text DNS record to respond as extra records." msgstr "要响应的附加 DNS 记录列表。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:311 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:311 msgid "List of text DNS record to respond as name servers." msgstr "要响应的域名服务器(NS) DNS 记录列表。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:201 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:201 msgid "Listen address" msgstr "监听地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:33 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:33 msgid "Listen interfaces" msgstr "监听接口" -#: htdocs/luci-static/resources/view/homeproxy/server.js:206 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:206 msgid "Listen port" msgstr "监听端口" -#: htdocs/luci-static/resources/view/homeproxy/status.js:210 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:210 msgid "Loading" msgstr "加载中" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:50 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:50 msgid "Local" msgstr "本地" -#: htdocs/luci-static/resources/view/homeproxy/node.js:292 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:292 msgid "Local address" msgstr "本地地址" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:111 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:111 msgid "" "Local file with initial rule-set content; avoids blocking startup on first " "download (1.14)." msgstr "远程规则集的本地初始内容文件,避免首次下载阻塞启动(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:59 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:59 msgid "Log file does not exist." msgstr "日志文件不存在。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:55 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:55 msgid "Log is empty." msgstr "日志为空。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:326 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:326 msgid "MTU" msgstr "MTU" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:53 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:53 msgid "Main UDP node" msgstr "主 UDP 节点" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:25 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:25 msgid "Main node" msgstr "主节点" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157 msgid "Make IP CIDR in rule set used to match the source IP." msgstr "使规则集中的 IP CIDR 用于匹配源 IP。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:157 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:157 msgid "Make IP CIDR in rule sets match the source IP." msgstr "使规则集中的 IP CIDR 匹配源 IP。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:256 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:256 msgid "Masquerade" msgstr "伪装" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:528 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:528 msgid "Match DNSSEC OK" msgstr "匹配 DNSSEC OK" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:504 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:504 msgid "" "Match IP CIDR with the evaluated response (needs match_response; old rules " "are auto-wrapped in 1.14)." msgstr "" "以已评估的响应匹配 IP CIDR(需要 match_response;旧规则在 1.14 自动包装)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:505 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:505 msgid "Match IP CIDR." msgstr "匹配 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:514 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:514 msgid "Match LAN device by MAC address." msgstr "按 MAC 地址匹配局域网设备。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:519 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:519 msgid "" "Match LAN device hostname via neighbor resolution; enable find_neighbor." msgstr "通过邻居解析按主机名匹配局域网设备;需启用 find_neighbor。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:484 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:484 msgid "Match domain suffix." msgstr "匹配域名后缀。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:488 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:488 msgid "Match domain using keyword." msgstr "使用关键词匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:492 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:492 msgid "Match domain using regular expression." msgstr "使用正则表达式匹配域名。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:479 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:479 msgid "Match full domain." msgstr "匹配完整域名。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:549 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:549 msgid "Match port range. Format as START:/:END/START:END." msgstr "匹配端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:544 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:544 msgid "Match port." msgstr "匹配端口。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:509 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:509 msgid "Match private IP" msgstr "匹配私有 IP" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:510 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:510 msgid "Match private IP with the evaluated response (needs match_response)." msgstr "以已评估的响应匹配私网 IP(需要 match_response)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:500 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:500 msgid "Match private source IP" msgstr "匹配私有源 IP" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:554 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:554 msgid "Match process name." msgstr "匹配进程名。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:562 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:562 msgid "Match process path using regular expression." msgstr "使用正则表达式匹配进程路径。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:558 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:558 msgid "Match process path." msgstr "匹配进程路径。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:529 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:529 msgid "Match queries with the DNSSEC OK bit set (1.14)." msgstr "匹配设置了 DNSSEC OK 位的查询(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:115 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:115 msgid "Match query type." msgstr "匹配请求类型。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:220 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:220 msgid "Match response" msgstr "匹配响应" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:141 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:141 msgid "" "Match rule set. DNS: rules referencing rule-sets that contain query_type are " "incompatible with legacy address filters (ip_cidr / ip_is_private) — use " @@ -1606,7 +1606,7 @@ msgstr "" "匹配规则集。DNS:引用含 query_type 规则集的规则与 legacy 地址过滤(ip_cidr / " "ip_is_private)不兼容——请改用 match_response(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:142 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:142 msgid "" "Match rule set. Since 1.14: a rule-set holding a single default rule is " "merged into this rule; any other rule-set matches as an OR collection." @@ -1614,72 +1614,72 @@ msgstr "" "匹配规则集。自 1.14:仅含单条 default 规则的规则集字段会合并进本条规则;其余" "规则集整体按 OR 集合匹配。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:496 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:496 msgid "Match source IP CIDR." msgstr "匹配源 IP CIDR。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:539 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:539 msgid "Match source port range. Format as START:/:END/START:END." msgstr "匹配源端口范围。格式为 START:/:END/START:END。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:534 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:534 msgid "Match source port." msgstr "匹配源端口。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:524 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:524 msgid "Match the EDNS Client Subnet in the query (1.14)." msgstr "匹配查询中的 EDNS Client Subnet(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:261 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:261 msgid "Match the evaluated response code (requires match_response)." msgstr "匹配已评估响应的响应码(需 match_response)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:137 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:137 msgid "Match user name." msgstr "匹配用户名。" -#: htdocs/luci-static/resources/homeproxy.js:234 +#: htdocs/luci-static/resources/homeproxy-pro.js:234 msgid "Max download speed" msgstr "最大下载速度" -#: htdocs/luci-static/resources/homeproxy.js:235 +#: htdocs/luci-static/resources/homeproxy-pro.js:235 msgid "Max download speed in Mbps." msgstr "最大下载速度(Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:137 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:137 msgid "Max hop interval (1.14)" msgstr "最大跳变间隔(1.14)" -#: htdocs/luci-static/resources/homeproxy.js:289 +#: htdocs/luci-static/resources/homeproxy-pro.js:289 msgid "Max obfs packet size (1.14)" msgstr "最大混淆包长(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:37 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:37 msgid "Max time an expired entry may be served. Examples: 3d, 1h." msgstr "过期缓存项可被乐观返回的最长时间。示例:3d、1h。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:494 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:494 msgid "Max time difference" msgstr "最大时间差" -#: htdocs/luci-static/resources/homeproxy.js:241 +#: htdocs/luci-static/resources/homeproxy-pro.js:241 msgid "Max upload speed" msgstr "最大上传速度" -#: htdocs/luci-static/resources/homeproxy.js:242 +#: htdocs/luci-static/resources/homeproxy-pro.js:242 msgid "Max upload speed in Mbps." msgstr "最大上传速度(Mbps)。" -#: htdocs/luci-static/resources/homeproxy.js:700 +#: htdocs/luci-static/resources/homeproxy-pro.js:700 msgid "Maximum TLS version" msgstr "最大 TLS 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:354 -#: htdocs/luci-static/resources/view/homeproxy/node.js:368 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:354 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368 msgid "Maximum connections" msgstr "最大连接数" -#: htdocs/luci-static/resources/view/homeproxy/node.js:366 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:366 msgid "" "Maximum multiplexed streams in a connection before opening a new connection." "
Conflict with %s and %s." @@ -1687,739 +1687,739 @@ msgstr "" "在打开新连接之前,一个连接内允许的最大多路复用流数量。
与 %s 和 %s 冲突。" -#: htdocs/luci-static/resources/homeproxy.js:290 +#: htdocs/luci-static/resources/homeproxy-pro.js:290 msgid "Maximum on-wire packet size in bytes. Gecko only." msgstr "线上的最大包长(字节)。仅 Gecko 生效。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:138 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:138 msgid "" "Maximum port hopping interval in seconds; the actual interval is randomized " "between the two values. Hysteria2 only." msgstr "最大端口跳变间隔(秒);实际间隔在两者之间随机。仅 Hysteria2。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:365 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:365 msgid "Maximum streams" msgstr "最大流数量" -#: htdocs/luci-static/resources/homeproxy.js:581 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:280 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:289 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:429 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:437 +#: htdocs/luci-static/resources/homeproxy-pro.js:581 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:280 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:289 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:429 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:437 msgid "Method" msgstr "方式" -#: htdocs/luci-static/resources/homeproxy.js:282 +#: htdocs/luci-static/resources/homeproxy-pro.js:282 msgid "Min obfs packet size (1.14)" msgstr "最小混淆包长(1.14)" -#: htdocs/luci-static/resources/homeproxy.js:692 +#: htdocs/luci-static/resources/homeproxy-pro.js:692 msgid "Minimum TLS version" msgstr "最低 TLS 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:114 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:114 msgid "Minimum idle sessions" msgstr "最小空闲会话数" -#: htdocs/luci-static/resources/view/homeproxy/node.js:360 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:360 msgid "" "Minimum multiplexed streams in a connection before opening a new connection." msgstr "在打开新连接之前,连接中的最小多路复用流数量。" -#: htdocs/luci-static/resources/homeproxy.js:283 +#: htdocs/luci-static/resources/homeproxy-pro.js:283 msgid "Minimum on-wire packet size in bytes. Gecko only." msgstr "线上的最小包长(字节)。仅 Gecko 生效。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:359 -#: htdocs/luci-static/resources/view/homeproxy/node.js:368 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:359 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:368 msgid "Minimum streams" msgstr "最小流数量" -#: htdocs/luci-static/resources/homeproxy.js:136 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:157 +#: htdocs/luci-static/resources/homeproxy-pro.js:136 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:157 msgid "Mixed" msgstr "混合" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:168 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:168 msgid "Mixed system TCP stack and gVisor UDP stack." msgstr "混合系统 TCP 栈和 gVisor UDP 栈。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:58 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:58 msgid "Mode" msgstr "模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:517 -#: htdocs/luci-static/resources/view/homeproxy/server.js:605 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:517 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:605 msgid "MultiPath TCP" msgstr "多路径 TCP(MPTCP)" -#: htdocs/luci-static/resources/homeproxy.js:159 +#: htdocs/luci-static/resources/homeproxy-pro.js:159 msgid "Multiplex" msgstr "多路复用" -#: htdocs/luci-static/resources/view/homeproxy/node.js:345 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:345 msgid "Multiplex protocol." msgstr "多路复用协议。" -#: htdocs/luci-static/resources/homeproxy.js:419 +#: htdocs/luci-static/resources/homeproxy-pro.js:419 msgid "NOT RUNNING" msgstr "未运行" -#: htdocs/luci-static/resources/view/homeproxy/node.js:766 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:766 msgid "NOTE: Save current settings before updating subscriptions." msgstr "注意:更新订阅前先保存当前配置。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:310 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:310 msgid "NS" msgstr "NS" -#: htdocs/luci-static/resources/homeproxy.js:335 -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:32 +#: htdocs/luci-static/resources/homeproxy-pro.js:335 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:32 msgid "Native" msgstr "原生" -#: htdocs/luci-static/resources/homeproxy.js:135 +#: htdocs/luci-static/resources/homeproxy-pro.js:135 msgid "NaïveProxy" msgstr "NaïveProxy" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:105 -#: htdocs/luci-static/resources/view/homeproxy/server.js:621 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:105 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:621 msgid "Network" msgstr "网络" -#: htdocs/luci-static/resources/homeproxy.js:324 +#: htdocs/luci-static/resources/homeproxy-pro.js:324 msgid "New Reno" msgstr "New Reno" -#: htdocs/luci-static/resources/homeproxy.js:17 +#: htdocs/luci-static/resources/homeproxy-pro.js:17 msgid "No TCP transport, plain HTTP is merged into the HTTP transport." msgstr "无 TCP 传输层, 纯 HTTP 已合并到 HTTP 传输层。" -#: htdocs/luci-static/resources/homeproxy.js:19 +#: htdocs/luci-static/resources/homeproxy-pro.js:19 msgid "No additional encryption support: It's basically duplicate encryption." msgstr "无额外加密支持:它基本上是重复加密。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:783 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:783 msgid "No subscription available" msgstr "无可用订阅" -#: htdocs/luci-static/resources/view/homeproxy/node.js:894 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:894 msgid "No subscription node" msgstr "无订阅节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:637 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:637 msgid "No valid share link found." msgstr "找不到有效分享链接。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:50 -#: htdocs/luci-static/resources/view/homeproxy/node.js:25 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:50 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:25 msgid "Node" msgstr "节点" -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:22 +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:22 msgid "Node Settings" msgstr "节点设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:574 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:574 msgid "Nodes" msgstr "节点" -#: htdocs/luci-static/resources/homeproxy.js:518 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:286 -#: htdocs/luci-static/resources/view/homeproxy/node.js:252 -#: htdocs/luci-static/resources/view/homeproxy/server.js:299 +#: htdocs/luci-static/resources/homeproxy-pro.js:518 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:286 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:252 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:299 msgid "None" msgstr "无" -#: htdocs/luci-static/resources/homeproxy.js:276 +#: htdocs/luci-static/resources/homeproxy-pro.js:276 msgid "Obfuscate password" msgstr "混淆密码" -#: htdocs/luci-static/resources/homeproxy.js:269 +#: htdocs/luci-static/resources/homeproxy-pro.js:269 msgid "Obfuscate type" msgstr "混淆类型" -#: htdocs/luci-static/resources/view/homeproxy/node.js:406 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:406 msgid "Obfuscation host" msgstr "混淆主机" -#: htdocs/luci-static/resources/view/homeproxy/node.js:399 -#: htdocs/luci-static/resources/view/homeproxy/server.js:275 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:399 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:275 msgid "Obfuscation mode" msgstr "混淆模式" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:114 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:171 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:114 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:171 msgid "" "One domain per line. No spaces, no comments, no wildcards; the backend " "rejects invalid characters and tells you which line." msgstr "每行一个域名。不含空格、注释和通配符;后端会拒绝非法字符并指出所在行。" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:34 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:34 msgid "Only process traffic from specific interfaces. Leave empty for all." msgstr "只处理来自指定接口的流量。留空表示全部。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:85 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:85 msgid "Only proxy mainland China" msgstr "仅代理中国大陆" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:30 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:30 msgid "Optimistic DNS cache" msgstr "乐观 DNS 缓存" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:36 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:36 msgid "Optimistic cache timeout" msgstr "乐观缓存超时" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:226 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:226 msgid "Optional tag for this evaluate result." msgstr "此 evaluate 结果的可选标签。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:390 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:390 msgid "Optional; only required when connecting to a multi-user Snell server." msgstr "可选;仅在连接多用户 Snell 服务器时需要。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:43 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:43 msgid "Other fields" msgstr "其他字段" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:320 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:91 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:319 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:93 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:320 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:91 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:319 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:93 msgid "Outbound" msgstr "出站" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:51 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:51 msgid "Outbound node" msgstr "出站节点" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:94 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:94 msgid "" "Outbound used to download this rule-set (via sing-box 1.14 http_clients)." msgstr "下载此规则集所使用的出站(经 sing-box 1.14 http_clients 生效)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:338 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:338 msgid "Override address" msgstr "覆盖地址" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:472 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:472 msgid "Override dns.timeout for this lookup, in seconds (1.14)." msgstr "覆盖本次查询解析的 dns.timeout(秒)(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:248 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:248 msgid "Override dns.timeout for this query, in seconds." msgstr "覆盖本次查询的 dns.timeout,单位秒。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:345 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:345 msgid "Override port" msgstr "覆盖端口" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:339 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:339 msgid "Override the connection destination address." msgstr "覆盖目标连接地址。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:346 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:346 msgid "Override the connection destination port." msgstr "覆盖目标连接端口。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:376 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:376 msgid "PEM-encoded private key of an existing ACME account (1.14)." msgstr "已有 ACME 账户的 PEM 编码私钥(1.14)。" -#: htdocs/luci-static/resources/homeproxy.js:584 +#: htdocs/luci-static/resources/homeproxy-pro.js:584 msgid "PUT" msgstr "PUT" -#: htdocs/luci-static/resources/homeproxy.js:630 +#: htdocs/luci-static/resources/homeproxy-pro.js:630 msgid "Packet encoding" msgstr "数据包编码" -#: htdocs/luci-static/resources/view/homeproxy/server.js:231 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:231 msgid "Padding scheme" msgstr "填充方案" -#: htdocs/luci-static/resources/view/homeproxy/status.js:184 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:184 msgid "Panic" msgstr "崩溃" -#: htdocs/luci-static/resources/view/homeproxy/node.js:74 -#: htdocs/luci-static/resources/view/homeproxy/server.js:218 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:74 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:218 msgid "Password" msgstr "密码" -#: htdocs/luci-static/resources/homeproxy.js:576 -#: htdocs/luci-static/resources/homeproxy.js:610 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:259 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:61 +#: htdocs/luci-static/resources/homeproxy-pro.js:576 +#: htdocs/luci-static/resources/homeproxy-pro.js:610 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:259 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:61 msgid "Path" msgstr "路径" -#: htdocs/luci-static/resources/view/homeproxy/node.js:307 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:307 msgid "Peer pubkic key" msgstr "对端公钥" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:176 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:176 msgid "" "Performance may degrade slightly, so it is not recommended to enable on when " "it is not needed." msgstr "性能可能会略有下降,建议仅在需要时开启。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:44 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:44 msgid "Persist DNS cache across restarts (sing-box 1.14, replaces Store RDRC)." msgstr "重启后持久化 DNS 缓存(sing-box 1.14,替代 Store RDRC)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:332 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:332 msgid "Persistent keepalive interval" msgstr "持久 keepalive 间隔" -#: htdocs/luci-static/resources/homeproxy.js:597 +#: htdocs/luci-static/resources/homeproxy-pro.js:597 msgid "Ping timeout" msgstr "Ping 超时" -#: htdocs/luci-static/resources/view/homeproxy/node.js:187 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:187 msgid "Plugin" msgstr "插件" -#: htdocs/luci-static/resources/view/homeproxy/node.js:194 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:194 msgid "Plugin opts" msgstr "插件参数" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:543 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:254 -#: htdocs/luci-static/resources/view/homeproxy/node.js:63 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:543 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:254 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:63 msgid "Port" msgstr "端口" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:114 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:114 msgid "Port %s alrealy exists!" msgstr "端口 %s 已存在!" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:45 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:45 msgid "Port fields" msgstr "端口字段" -#: htdocs/luci-static/resources/view/homeproxy/node.js:130 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:130 msgid "Port hopping interval in seconds." msgstr "端口跳跃间隔(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:548 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:548 msgid "Port range" msgstr "端口范围" -#: htdocs/luci-static/resources/view/homeproxy/node.js:314 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:314 msgid "Pre-shared key" msgstr "预共享密钥" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:169 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:169 msgid "Predefined" msgstr "预定义" -#: htdocs/luci-static/resources/homeproxy.js:63 +#: htdocs/luci-static/resources/homeproxy-pro.js:63 msgid "Prefer IPv4" msgstr "优先 IPv4" -#: htdocs/luci-static/resources/homeproxy.js:64 +#: htdocs/luci-static/resources/homeproxy-pro.js:64 msgid "Prefer IPv6" msgstr "优先 IPv6" -#: htdocs/luci-static/resources/view/homeproxy/node.js:235 -#: htdocs/luci-static/resources/view/homeproxy/node.js:299 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:235 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:299 msgid "Private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:240 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:240 msgid "Private key passphrase" msgstr "私钥指纹" -#: htdocs/luci-static/resources/view/homeproxy/server.js:360 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:360 msgid "Private key type for new certificates (1.14). Empty uses the default." msgstr "新证书的私钥类型(1.14)。留空使用默认值。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:46 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:46 msgid "Process fields" msgstr "进程字段" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:553 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:553 msgid "Process name" msgstr "进程名" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:557 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:557 msgid "Process path" msgstr "进程路径" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:561 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:561 msgid "Process path (regex)" msgstr "进程路径(正则表达式)" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:88 -#: htdocs/luci-static/resources/view/homeproxy/node.js:144 -#: htdocs/luci-static/resources/view/homeproxy/node.js:344 -#: htdocs/luci-static/resources/view/homeproxy/server.js:237 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:88 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:144 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:344 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:237 msgid "Protocol" msgstr "协议" -#: htdocs/luci-static/resources/view/homeproxy/node.js:282 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:282 msgid "Protocol parameter. Enable length block encryption." msgstr "协议参数。启用长度块加密。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:275 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:275 msgid "" "Protocol parameter. Will waste traffic randomly if enabled (enabled by " "default in v2ray and cannot be disabled)." msgstr "协议参数。 如启用会随机浪费流量(在 v2ray 中默认启用并且无法禁用)。" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:108 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:108 msgid "Proxy Domain List" msgstr "代理域名列表" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:63 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:92 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:63 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:92 msgid "Proxy IPv4 IP-s" msgstr "代理 IPv4 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:66 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:95 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:66 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:95 msgid "Proxy IPv6 IP-s" msgstr "代理 IPv6 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:69 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:69 msgid "Proxy MAC-s" msgstr "代理 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:50 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:50 msgid "Proxy all except listed" msgstr "仅允许列表外" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:47 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:47 msgid "Proxy filter mode" msgstr "代理过滤模式" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:49 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:49 msgid "Proxy listed only" msgstr "仅允许列表内" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:122 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:122 msgid "Proxy mode" msgstr "代理模式" -#: htdocs/luci-static/resources/view/homeproxy/node.js:91 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:91 msgid "Proxy protocol" msgstr "代理协议" -#: htdocs/luci-static/resources/homeproxy.js:336 -#: htdocs/luci-static/resources/homeproxy.js:522 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:95 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:245 +#: htdocs/luci-static/resources/homeproxy-pro.js:336 +#: htdocs/luci-static/resources/homeproxy-pro.js:522 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:95 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:245 msgid "QUIC" msgstr "QUIC" -#: htdocs/luci-static/resources/homeproxy.js:322 +#: htdocs/luci-static/resources/homeproxy-pro.js:322 msgid "QUIC congestion control algorithm." msgstr "QUIC 拥塞控制算法。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:523 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:523 msgid "Query EDNS client subnet" msgstr "查询 EDNS Client Subnet" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:247 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:471 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:247 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:471 msgid "Query timeout" msgstr "查询超时" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:114 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:114 msgid "Query type" msgstr "请求类型" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:293 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:293 msgid "RCode" msgstr "RCode" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:96 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:96 msgid "RDP" msgstr "RDP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:495 -#: htdocs/luci-static/resources/view/homeproxy/server.js:464 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:495 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:464 msgid "REALITY" msgstr "REALITY" -#: htdocs/luci-static/resources/view/homeproxy/server.js:469 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:469 msgid "REALITY private key" msgstr "REALITY 私钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:500 -#: htdocs/luci-static/resources/view/homeproxy/server.js:485 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:500 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:485 msgid "REALITY public key" msgstr "REALITY 公钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:506 -#: htdocs/luci-static/resources/view/homeproxy/server.js:489 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:506 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:489 msgid "REALITY short ID" msgstr "REALITY 标识符" -#: htdocs/luci-static/resources/homeproxy.js:417 +#: htdocs/luci-static/resources/homeproxy-pro.js:417 msgid "RUNNING" msgstr "运行中" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:230 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:230 msgid "Race" msgstr "并行竞争" -#: htdocs/luci-static/resources/view/homeproxy/node.js:222 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:222 msgid "Random version will be used if empty." msgstr "如留空,则使用随机版本。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:119 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:119 msgid "Recursive outbound detected!" msgstr "检测到递归出站!" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:305 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:305 msgid "Recursive resolver detected!" msgstr "检测到递归解析器!" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:123 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:123 msgid "Redirect TCP" msgstr "Redirect TCP" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:125 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:125 msgid "Redirect TCP + TProxy UDP" msgstr "Redirect TCP + TProxy UDP" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:127 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:127 msgid "Redirect TCP + Tun UDP" msgstr "Redirect TCP + Tun UDP" -#: htdocs/luci-static/resources/view/homeproxy/status.js:236 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:236 msgid "Refresh every %s seconds." msgstr "每 %s 秒刷新。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:414 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:414 msgid "Region ID" msgstr "区域 ID" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:167 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:167 msgid "Reject" msgstr "拒绝" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:51 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:51 msgid "Remote" msgstr "远程" -#: htdocs/luci-static/resources/view/homeproxy/node.js:891 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:891 msgid "Remove %s nodes" msgstr "移除 %s 个节点" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:254 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:254 msgid "Remove EDNS client subnet" msgstr "移除 EDNS Client Subnet" -#: htdocs/luci-static/resources/view/homeproxy/node.js:881 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:881 msgid "Remove all nodes from subscriptions" msgstr "移除所有订阅节点" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:255 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:255 msgid "Remove the edns0-subnet record from the query (1.14)." msgstr "从查询中移除 edns0-subnet 记录(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:281 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:281 msgid "Reply with REFUSED" msgstr "回复 REFUSED" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:430 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:430 msgid "Reply with TCP RST / ICMP port unreachable" msgstr "回复 TCP RST / ICMP 端口不可达" -#: htdocs/luci-static/resources/view/homeproxy/node.js:321 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:321 msgid "Reserved field bytes" msgstr "保留字段字节" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:172 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:172 msgid "Resolve" msgstr "解析" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:441 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:441 msgid "Resolve strategy" msgstr "解析策略" -#: htdocs/luci-static/resources/view/homeproxy/status.js:258 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:258 msgid "Resources management" msgstr "资源管理" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:272 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:272 msgid "Response NS" msgstr "响应 NS 记录" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:260 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:260 msgid "Response RCode" msgstr "响应 RCode" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:267 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:267 msgid "Response answer" msgstr "响应 Answer 记录" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:276 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:276 msgid "Response extra" msgstr "响应 Extra 记录" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:31 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:31 msgid "" "Return expired cache immediately and refresh in background (sing-box 1.14)." msgstr "立即返回已过期缓存并在后台刷新(sing-box 1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:635 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:635 msgid "Reuse address" msgstr "复用地址" -#: htdocs/luci-static/resources/view/homeproxy/server.js:636 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:636 msgid "Reuse listener address." msgstr "复用监听地址。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:205 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:453 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:205 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:453 msgid "Rewrite TTL" msgstr "重写 TTL" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:206 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:454 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:206 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:454 msgid "Rewrite TTL in DNS responses." msgstr "在 DNS 响应中重写 TTL。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:165 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:165 msgid "Route" msgstr "路由" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:166 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:166 msgid "Route options" msgstr "路由选项" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:23 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:23 msgid "Routing Nodes" msgstr "路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:25 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:25 msgid "Routing Rules" msgstr "路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:23 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:23 msgid "Routing Settings" msgstr "路由设置" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:82 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:82 msgid "Routing mode" msgstr "路由模式" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:32 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:32 msgid "Routing node" msgstr "路由节点" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:102 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:102 msgid "Routing ports" msgstr "路由端口" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:34 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:34 msgid "Routing rule" msgstr "路由规则" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:22 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:22 msgid "Rule Set" msgstr "规则集" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:140 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:31 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:140 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:31 msgid "Rule set" msgstr "规则集" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:156 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:156 msgid "Rule set IP CIDR as source IP" msgstr "规则集 IP CIDR 作为源 IP" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:68 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:68 msgid "Rule set URL" msgstr "规则集 URL" -#: htdocs/luci-static/resources/homeproxy.js:141 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:97 +#: htdocs/luci-static/resources/homeproxy-pro.js:141 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:97 msgid "SSH" msgstr "SSH" -#: htdocs/luci-static/resources/homeproxy.js:421 +#: htdocs/luci-static/resources/homeproxy-pro.js:421 msgid "STATUS UNKNOWN" msgstr "状态未知" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:98 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:98 msgid "STUN" msgstr "STUN" -#: htdocs/luci-static/resources/view/homeproxy/node.js:530 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:530 msgid "SUoT version" msgstr "SUoT 版本" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:128 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:128 msgid "Safari / Apple Network API" msgstr "Safari / Apple Network API" -#: htdocs/luci-static/resources/homeproxy.js:271 +#: htdocs/luci-static/resources/homeproxy-pro.js:271 msgid "Salamander" msgstr "Salamander" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:55 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:55 msgid "Same as main node" msgstr "保持与主节点一致" -#: htdocs/luci-static/resources/view/homeproxy/status.js:284 -#: htdocs/luci-static/resources/view/homeproxy/status.js:290 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:284 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:290 msgid "Save" msgstr "保存" -#: htdocs/luci-static/resources/view/homeproxy/node.js:768 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:768 msgid "Save current settings" msgstr "保存当前设置" -#: htdocs/luci-static/resources/view/homeproxy/node.js:765 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:765 msgid "Save subscriptions settings" msgstr "保存订阅设置" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:236 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:236 msgid "Send the query before pending race rules are judged (1.14)." msgstr "在待定 race 规则判定前即发送查询(1.14)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:179 -#: htdocs/luci-static/resources/view/homeproxy/server.js:176 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:179 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:176 msgid "Server" msgstr "服务器" -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:30 +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:30 msgid "Server Settings" msgstr "服务器设置" -#: htdocs/luci-static/resources/view/homeproxy/server.js:339 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:339 msgid "" "Server name to use when choosing a certificate if the ClientHello's " "ServerName field is empty." msgstr "当 ClientHello 的 ServerName 字段为空时,选择证书所使用的服务器名称。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:171 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:171 msgid "Server settings" msgstr "服务器设置" -#: root/usr/share/luci/menu.d/luci-app-homeproxy.json:38 +#: root/usr/share/luci/menu.d/luci-app-homeproxy-pro.json:38 msgid "Service Status" msgstr "服务状态" -#: htdocs/luci-static/resources/homeproxy.js:138 +#: htdocs/luci-static/resources/homeproxy-pro.js:138 msgid "ShadowTLS" msgstr "ShadowTLS" -#: htdocs/luci-static/resources/view/homeproxy/node.js:201 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:201 msgid "ShadowTLS version" msgstr "ShadowTLS 版本" -#: htdocs/luci-static/resources/homeproxy.js:137 +#: htdocs/luci-static/resources/homeproxy-pro.js:137 msgid "Shadowsocks" msgstr "Shadowsocks" -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:29 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:29 msgid "" "Since sing-box 1.14 the default (Unset) behaves as hijack: sing-box sets the " "platform interface DNS and hijacks port 53. On OpenWrt this overlaps with " @@ -2430,20 +2430,20 @@ msgstr "" "持 53 端口。OpenWrt 下这会与本插件自身的 dnsmasq/nftables DNS 劫持叠加,网关" "建议保持 Disabled,除非需要 sing-box 全权接管 TUN 内 DNS。" -#: htdocs/luci-static/resources/homeproxy.js:139 +#: htdocs/luci-static/resources/homeproxy-pro.js:139 msgid "Snell (1.14)" msgstr "Snell(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:376 -#: htdocs/luci-static/resources/view/homeproxy/server.js:263 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:376 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:263 msgid "Snell version" msgstr "Snell 版本" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:124 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:124 msgid "Sniffed client type (QUIC client type or SSH client name)." msgstr "嗅探到的客户端类型(QUIC 客户端类型或 SSH 客户端名称)。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:89 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:89 msgid "" "Sniffed protocol, see Sniff for details." @@ -2451,60 +2451,60 @@ msgstr "" "嗅探到的协议,详情请参阅 嗅探。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:143 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:143 msgid "Sniffer: advanced mode (100ms, universal list)" msgstr "嗅探:进阶模式(100ms,全协议列表)" -#: htdocs/luci-static/resources/homeproxy.js:140 +#: htdocs/luci-static/resources/homeproxy-pro.js:140 msgid "Socks" msgstr "Socks" -#: htdocs/luci-static/resources/view/homeproxy/node.js:211 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:211 msgid "Socks version" msgstr "Socks 版本" -#: htdocs/luci-static/resources/view/homeproxy/node.js:212 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:212 msgid "Socks4" msgstr "Socks4" -#: htdocs/luci-static/resources/view/homeproxy/node.js:213 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:213 msgid "Socks4A" msgstr "Socks4A" -#: htdocs/luci-static/resources/view/homeproxy/node.js:214 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:214 msgid "Socks5" msgstr "Socks5" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:495 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:495 msgid "Source IP CIDR" msgstr "源 IP CIDR" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:513 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:513 msgid "Source MAC address" msgstr "来源 MAC 地址" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:57 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:57 msgid "Source file" msgstr "源文件" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:518 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:518 msgid "Source hostname" msgstr "来源主机名" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:533 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:533 msgid "Source port" msgstr "源端口" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:538 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:538 msgid "Source port range" msgstr "源端口范围" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:411 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:411 msgid "" "Specifies DNS server tag to use instead of selecting through DNS routing." msgstr "指定使用的 DNS 服务器,而不是通过 DNS 规则选择。" -#: htdocs/luci-static/resources/homeproxy.js:21 +#: htdocs/luci-static/resources/homeproxy-pro.js:21 msgid "" "Specifies the period of time (in seconds) after which a health check will be " "performed using a ping frame if no frames have been received on the " @@ -2516,7 +2516,7 @@ msgstr "" "意,ping 响应被视为已接收的帧,因此如果连接上没有其他流量,则每隔该时间间隔执" "行一次健康检查。" -#: htdocs/luci-static/resources/homeproxy.js:23 +#: htdocs/luci-static/resources/homeproxy-pro.js:23 msgid "" "Specifies the time (in seconds) until idle clients should be closed with a " "GOAWAY frame. PING frames are not considered as activity." @@ -2524,7 +2524,7 @@ msgstr "" "指定空闲客户端应在多久(单位:秒)内以 GOAWAY 帧关闭。PING 帧不计为活动。指定" "闲置客户端应在多长时间(单位:秒)内使用 GOAWAY 帧关闭。PING 帧不被视为活动。" -#: htdocs/luci-static/resources/homeproxy.js:26 +#: htdocs/luci-static/resources/homeproxy-pro.js:26 msgid "" "Specifies the timeout duration (in seconds) after sending a PING frame, " "within which a response must be received.
If a response to the PING " @@ -2536,66 +2536,66 @@ msgstr "" "秒)内必须接收到响应。
如果在指定的超时时间内没有收到 PING 帧的响应,则连" "接将关闭。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:103 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:103 msgid "" "Specify target ports to be proxied. Multiple ports must be separated by " "commas." msgstr "指定需要被代理的目标端口。多个端口必须用逗号隔开。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:235 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:235 msgid "Speculative" msgstr "抢先查询" -#: htdocs/luci-static/resources/view/homeproxy/node.js:164 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:164 msgid "Standard (default)" msgstr "标准(默认)" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:43 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:43 msgid "Store DNS cache" msgstr "存储 DNS 缓存" -#: htdocs/luci-static/resources/homeproxy.js:259 +#: htdocs/luci-static/resources/homeproxy-pro.js:259 msgid "String" msgstr "字符串" -#: htdocs/luci-static/resources/view/homeproxy/node.js:693 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:693 msgid "Sub (%s)" msgstr "订阅(%s)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:720 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:720 msgid "Subscription URL-s" msgstr "订阅地址" -#: htdocs/luci-static/resources/view/homeproxy/node.js:857 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:857 msgid "Subscription update did not complete cleanly. Last log:" msgstr "订阅更新未正常完成。最新日志:" -#: htdocs/luci-static/resources/view/homeproxy/node.js:805 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:805 msgid "" "Subscription update is already running. This page will reload when the " "previous run finishes." msgstr "订阅更新已在运行中。本次页面会在上轮更新完成后自动刷新。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:867 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:867 msgid "" "Subscription update is taking longer than 90 seconds. Check the log and " "reload manually." msgstr "订阅更新耗时已超过 90 秒。请查看日志并手动刷新页面。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:704 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:704 msgid "Subscriptions" msgstr "订阅" -#: htdocs/luci-static/resources/view/homeproxy/node.js:639 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:639 msgid "Successfully imported %s nodes of total %s." msgstr "成功导入 %s 个节点,共 %s 个。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:120 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:120 msgid "Successfully updated." msgstr "更新成功。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:590 -#: htdocs/luci-static/resources/view/homeproxy/node.js:721 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:590 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:721 msgid "" "Support Hysteria, Shadowsocks, Trojan, v2rayN (VMess), and XTLS (VLESS) " "online configuration delivery standard." @@ -2603,96 +2603,96 @@ msgstr "" "支持 Hysteria、Shadowsocks、Trojan、v2rayN(VMess)和 XTLS(VLESS)在线配置交" "付标准。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:125 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:125 msgid "" "Support UDP, TCP, DoH, DoQ, DoT. TCP protocol will be used if not specified." msgstr "支持 UDP、TCP、DoH、DoQ、DoT。如未指定则使用 TCP 协议。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:160 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:160 msgid "System" msgstr "系统" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:418 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:72 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:66 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:288 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:229 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:186 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:418 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:72 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:66 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:288 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:229 msgid "System DNS" msgstr "系统 DNS" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:106 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:241 -#: htdocs/luci-static/resources/view/homeproxy/server.js:622 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:106 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:241 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:622 msgid "TCP" msgstr "TCP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:514 -#: htdocs/luci-static/resources/view/homeproxy/server.js:600 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:514 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:600 msgid "TCP fast open" msgstr "TCP 快速打开" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:154 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:154 msgid "TCP/IP stack" msgstr "TCP/IP 协议栈" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:155 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:155 msgid "TCP/IP stack." msgstr "TCP/IP 协议栈。" -#: htdocs/luci-static/resources/homeproxy.js:650 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:99 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:242 +#: htdocs/luci-static/resources/homeproxy-pro.js:650 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:99 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:242 msgid "TLS" msgstr "TLS" -#: htdocs/luci-static/resources/homeproxy.js:677 +#: htdocs/luci-static/resources/homeproxy-pro.js:677 msgid "TLS ALPN" msgstr "TLS ALPN" -#: htdocs/luci-static/resources/homeproxy.js:672 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:272 +#: htdocs/luci-static/resources/homeproxy-pro.js:672 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:272 msgid "TLS SNI" msgstr "TLS SNI" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:377 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:377 msgid "TLS fragment" msgstr "TLS 分片" -#: htdocs/luci-static/resources/homeproxy.js:718 +#: htdocs/luci-static/resources/homeproxy-pro.js:718 msgid "TLS handshake timeout in seconds. 15s is used by default." msgstr "TLS 握手超时(秒)。默认 15 秒。" -#: htdocs/luci-static/resources/homeproxy.js:18 +#: htdocs/luci-static/resources/homeproxy-pro.js:18 msgid "TLS is not enforced. If TLS is not configured, plain HTTP 1.1 is used." msgstr "不强制执行 TLS。如未配置 TLS,将使用纯 HTTP 1.1。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:371 -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:379 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:371 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:379 msgid "TLS record fragment" msgstr "TLS 记录分片" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:391 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:391 msgid "TLS spoof SNI (1.14)" msgstr "TLS spoof SNI(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:398 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:398 msgid "TLS spoof method (1.14)" msgstr "TLS spoof 方式(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:26 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:26 msgid "TUN DNS" msgstr "TUN DNS" -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:39 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:39 msgid "TUN DNS addresses (1.14)" msgstr "TUN DNS 地址(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:28 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:28 msgid "TUN DNS mode (1.14)" msgstr "TUN DNS 模式(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:281 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:281 msgid "" "Tag of a another server to resolve the domain name in the address. Required " "if address contains domain." @@ -2700,69 +2700,69 @@ msgstr "" "用于解析地址中域名的另一个服务器的标签。如果地址包含域名,则必填。用于解析本 " "DNS 服务器的域名的另一个 DNS 服务器的标签。如果服务器地址包括域名则必须。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:320 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:320 msgid "Tag of an outbound for connecting to the dns server." msgstr "用于连接到 DNS 服务器的出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:180 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:180 msgid "Tag of the target dns server." msgstr "目标 DNS 服务器标签。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:321 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:321 msgid "Tag of the target outbound." msgstr "目标出站标签。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:252 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:252 msgid "" "Tell the client to use the BBR flow control algorithm instead of Hysteria CC." msgstr "让客户端使用 BBR 流控算法。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:132 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:167 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:132 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:167 msgid "Tencent Public DNS (119.29.29.29)" msgstr "腾讯公共 DNS(119.29.29.29)" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:147 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:147 msgid "Test URL" msgstr "测试 URL" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:167 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:41 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:70 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:167 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:41 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:70 msgid "Test interval" msgstr "测试间隔" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:175 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:175 msgid "Test interval must be less or equal than idle timeout." msgstr "测试间隔时间必须小于或等于空闲超时时间。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:183 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:47 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:76 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:183 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:47 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:76 msgid "Test tolerance" msgstr "测试容差" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:268 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:268 msgid "Text DNS records to match in the evaluated answer." msgstr "用于匹配已评估 Answer 的文本 DNS 记录。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:383 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:383 msgid "The ACME CA provider to use." msgstr "使用的 ACME CA 颁发机构。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:62 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:62 msgid "The DNS strategy for resolving the domain name in the address." msgstr "解析域名的默认策略。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:148 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:148 msgid "The URL to test." msgstr "用于测试的 URL。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:250 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:250 msgid "The address of the dns server." msgstr "DNS 服务器的地址。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:434 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:434 msgid "" "The alternate port to use for the ACME HTTP challenge; if non-empty, this " "port will be used instead of 80 to spin up a listener for the HTTP challenge." @@ -2771,7 +2771,7 @@ msgstr "" "战监听。用于 ACME HTTP 质询的备用端口;如果非空,将使用此端口而不是 80 来启" "动 HTTP 质询的侦听器。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:440 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:440 msgid "" "The alternate port to use for the ACME TLS-ALPN challenge; the system must " "forward 443 to this port for challenge to succeed." @@ -2779,7 +2779,7 @@ msgstr "" "用于 ACME TLS-ALPN 挑战的备用端口;系统必须将 443 转发到此端口,挑战才能成" "功。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:66 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:66 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex || ip_cidr || " @@ -2796,7 +2796,7 @@ msgstr "" "source_port_range) &&
其他字段。
此外,包含的规则" "集可视为合并项,而非单一规则的子项。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:59 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:59 msgid "" "The default rule uses the following matching logic:
(domain || " "domain_suffix || domain_keyword || domain_regex) &&
(port " @@ -2811,121 +2811,121 @@ msgstr "" ">(source_port || source_port_range) &&
其他字段。
此外,包含的规则集可视为合并项,而非单一规则的子项。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:163 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:163 msgid "" "The dns server for resolving China domains. Support UDP, TCP, DoH, DoQ, DoT." msgstr "用于解析国内域名的 DNS 服务器。支持 UDP、TCP、DoH、DoQ、DoT。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:78 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:313 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:78 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:313 msgid "The domain strategy for resolving the domain name in the address." msgstr "用于解析本 DNS 服务器的域名的策略。" -#: htdocs/luci-static/resources/homeproxy.js:709 +#: htdocs/luci-static/resources/homeproxy-pro.js:709 msgid "" "The elliptic curves that will be used in an ECDHE handshake, in preference " "order. If empty, the default will be used." msgstr "将在 ECDHE 握手中使用的椭圆曲线,按优先顺序排列。留空使用默认值。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:345 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:345 msgid "" "The email address to use when creating or selecting an existing ACME server " "account." msgstr "创建或选择现有 ACME 服务器帐户时使用的电子邮件地址。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:385 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:385 msgid "" "The fallback value in milliseconds used when TLS segmentation cannot " "automatically determine the wait time." msgstr "当 TLS 分段无法自动确定等待时间时使用的回退值(单位:毫秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:191 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:191 msgid "The idle timeout in seconds." msgstr "空闲超时时间(单位:秒)。" -#: htdocs/luci-static/resources/homeproxy.js:701 +#: htdocs/luci-static/resources/homeproxy-pro.js:701 msgid "The maximum TLS version that is acceptable." msgstr "可接受的最高 TLS 版本。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:495 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:495 msgid "The maximum time difference between the server and the client." msgstr "服务器和客户端之间的最大时间差。" -#: htdocs/luci-static/resources/homeproxy.js:693 +#: htdocs/luci-static/resources/homeproxy-pro.js:693 msgid "The minimum TLS version that is acceptable." msgstr "可接受的最低 TLS 版本。" -#: htdocs/luci-static/resources/view/homeproxy/client.js:120 -#: htdocs/luci-static/resources/view/homeproxy/server.js:137 +#: htdocs/luci-static/resources/view/homeproxy-pro/client.js:120 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:137 msgid "The modern ImmortalWrt proxy platform for ARM64/AMD64." msgstr "为 ARM64/AMD64 设计的现代 ImmortalWrt 代理平台。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:85 -#: htdocs/luci-static/resources/view/homeproxy/server.js:630 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:85 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:630 msgid "The network interface to bind to." msgstr "绑定到的网络接口。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:260 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:260 msgid "The path of the DNS server." msgstr "DNS 服务器的路径。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:447 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:447 msgid "" "The path to the ECH config, in PEM format. If empty, load from DNS will be " "attempted." msgstr "PEM 格式的 ECH 配置路径。如果为空,将尝试从 DNS 加载。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:426 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:426 msgid "The path to the server certificate, in PEM format." msgstr "服务端证书路径,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:207 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:207 msgid "The port must be unique." msgstr "必须是唯一端口。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:255 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:255 msgid "The port of the DNS server." msgstr "DNS 服务器的端口。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:264 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:264 msgid "The pre-shared key (password) above must be 12-255 bytes for v6." msgstr "v6 下,上方的预共享密钥(密码)长度须为 12-255 字节。" -#: htdocs/luci-static/resources/homeproxy.js:850 +#: htdocs/luci-static/resources/homeproxy-pro.js:850 msgid "The request %s failed: %s." msgstr "请求 %s 失败:%s。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:294 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:294 msgid "The response code." msgstr "响应代码。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:531 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:531 msgid "The server private key, in PEM format." msgstr "服务端私钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:512 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:512 msgid "The server public key, in PEM format." msgstr "服务端公钥,需要 PEM 格式。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:92 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:92 msgid "" "The tag of the upstream outbound.
Other dial fields will be ignored when " "enabled." msgstr "上游出站的标签。
启用时,其他拨号字段将被忽略。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:168 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:42 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:71 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:168 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:42 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:71 msgid "The test interval in seconds." msgstr "测试间隔时间(单位:秒)。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:184 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:48 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:77 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:184 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:48 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:77 msgid "The test tolerance in milliseconds." msgstr "测试容差时间(单位:毫秒)。" -#: htdocs/luci-static/resources/homeproxy.js:28 +#: htdocs/luci-static/resources/homeproxy-pro.js:28 msgid "" "The timeout (in seconds) that after performing a keepalive check, the client " "will wait for activity. If no activity is detected, the connection will be " @@ -2935,8 +2935,8 @@ msgstr "" "关闭。经过一段时间(单位:秒)之后,客户端将执行 keepalive 检查并等待活动。如" "果没有检测到任何活动,则会关闭连接。" -#: htdocs/luci-static/resources/homeproxy.js:686 -#: htdocs/luci-static/resources/view/homeproxy/node.js:756 +#: htdocs/luci-static/resources/homeproxy-pro.js:686 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:756 msgid "" "This is DANGEROUS, your traffic is almost like " "PLAIN TEXT! Use at your own risk!" @@ -2944,7 +2944,7 @@ msgstr "" "这非常危险,你的流量几乎等同于明文!风险自" "负!" -#: htdocs/luci-static/resources/homeproxy.js:341 +#: htdocs/luci-static/resources/homeproxy-pro.js:341 msgid "" "This is the TUIC port of the UDP over TCP protocol, designed to provide a " "QUIC stream based UDP relay mode that TUIC does not provide." @@ -2952,211 +2952,211 @@ msgstr "" "这是 UDP over TCP 协议的 TUIC 版本,旨在提供 TUIC 本身不具备的基于 QUIC 流的 " "UDP 中继模式。" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:133 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:168 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:133 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:168 msgid "ThreatBook Public DNS (117.50.10.10)" msgstr "微步在线公共 DNS(117.50.10.10)" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:365 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:365 msgid "" "Timeout for UDP connections.
Setting a larger value than the UDP timeout " "in inbounds will have no effect." msgstr "UDP 连接的超时时间。
设置比入站的 UDP 超时更大的值将无效。" -#: htdocs/luci-static/resources/homeproxy.js:624 +#: htdocs/luci-static/resources/homeproxy-pro.js:624 msgid "" "To be compatible with Xray-core, set this to Sec-WebSocket-Protocol." msgstr "" "要与 Xray-core 兼容,请将其设置为 Sec-WebSocket-Protocol。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:130 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:130 msgid "" "To enable Tun support, you need to install ip-full and " "kmod-tun" msgstr "" "要启用 Tun 支持,你需要安装 ip-full 和 kmod-tun。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:178 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:178 msgid "Trace" msgstr "跟踪" -#: htdocs/luci-static/resources/homeproxy.js:517 +#: htdocs/luci-static/resources/homeproxy-pro.js:517 msgid "Transport" msgstr "传输层" -#: htdocs/luci-static/resources/homeproxy.js:142 +#: htdocs/luci-static/resources/homeproxy-pro.js:142 msgid "Trojan" msgstr "Trojan" -#: htdocs/luci-static/resources/homeproxy.js:143 +#: htdocs/luci-static/resources/homeproxy-pro.js:143 msgid "Tuic" msgstr "Tuic" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:128 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:128 msgid "Tun TCP/UDP" msgstr "Tun TCP/UDP" -#: htdocs/luci-static/resources/homeproxy.js:461 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:239 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:49 +#: htdocs/luci-static/resources/homeproxy-pro.js:461 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:239 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:49 msgid "Type" msgstr "类型" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:107 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:240 -#: htdocs/luci-static/resources/view/homeproxy/server.js:623 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:107 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:240 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:623 msgid "UDP" msgstr "UDP" -#: htdocs/luci-static/resources/view/homeproxy/node.js:520 -#: htdocs/luci-static/resources/view/homeproxy/server.js:609 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:520 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:609 msgid "UDP Fragment" msgstr "UDP 分片" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:24 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:24 msgid "UDP NAT Settings" msgstr "UDP NAT 设置" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:182 -#: htdocs/luci-static/resources/view/homeproxy/server.js:614 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:182 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:614 msgid "UDP NAT expiration time" msgstr "UDP NAT 过期时间" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:37 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:37 msgid "UDP NAT filtering (1.14)" msgstr "UDP NAT 过滤(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:26 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:26 msgid "UDP NAT mapping (1.14)" msgstr "UDP NAT 映射(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:48 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:48 msgid "UDP NAT sessions max (1.14)" msgstr "UDP NAT 会话数上限(1.14)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:524 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:524 msgid "UDP over TCP" msgstr "UDP over TCP" -#: htdocs/luci-static/resources/homeproxy.js:340 +#: htdocs/luci-static/resources/homeproxy-pro.js:340 msgid "UDP over stream" msgstr "UDP over stream" -#: htdocs/luci-static/resources/homeproxy.js:333 +#: htdocs/luci-static/resources/homeproxy-pro.js:333 msgid "UDP packet relay mode." msgstr "UDP 包中继模式。" -#: htdocs/luci-static/resources/homeproxy.js:332 +#: htdocs/luci-static/resources/homeproxy-pro.js:332 msgid "UDP relay mode" msgstr "UDP 中继模式" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:364 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:364 msgid "UDP timeout" msgstr "UDP 超时" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:52 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:27 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:56 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:52 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:27 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:56 msgid "URLTest" msgstr "URLTest" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:127 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:34 -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:63 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:127 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:34 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:63 msgid "URLTest nodes" msgstr "URLTest 节点" -#: htdocs/luci-static/resources/homeproxy.js:309 +#: htdocs/luci-static/resources/homeproxy-pro.js:309 msgid "UUID" msgstr "UUID" -#: htdocs/luci-static/resources/view/homeproxy/status.js:132 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:132 msgid "Unknown error." msgstr "未知错误。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:61 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:61 msgid "Unknown error: %s" msgstr "未知错误:%s" -#: htdocs/luci-static/resources/view/homeproxy/client/tun_dns.js:30 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/tun_dns.js:30 msgid "Unset (default)" msgstr "不设置(默认)" -#: htdocs/luci-static/resources/view/homeproxy/node.js:488 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:488 msgid "Unsupported fingerprint!" msgstr "不支持的指纹!" -#: htdocs/luci-static/resources/view/homeproxy/node.js:780 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:780 msgid "Update %s subscriptions" msgstr "更新 %s 个订阅" -#: htdocs/luci-static/resources/view/homeproxy/status.js:123 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:123 msgid "Update failed." msgstr "更新失败。" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:132 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:132 msgid "Update interval" msgstr "更新间隔" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:133 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:133 msgid "Update interval of rule set." msgstr "规则集更新间隔。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:775 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:775 msgid "Update nodes from subscriptions" msgstr "从订阅更新节点" -#: htdocs/luci-static/resources/view/homeproxy/node.js:717 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:717 msgid "Update subscriptions via proxy." msgstr "使用代理更新订阅。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:710 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:710 msgid "Update time" msgstr "更新时间" -#: htdocs/luci-static/resources/view/homeproxy/node.js:716 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:716 msgid "Update via proxy" msgstr "使用代理更新" -#: htdocs/luci-static/resources/view/homeproxy/node.js:813 -#: htdocs/luci-static/resources/view/homeproxy/node.js:825 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:813 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:825 msgid "Updating subscriptions…" msgstr "正在更新订阅…" -#: htdocs/luci-static/resources/view/homeproxy/node.js:457 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:457 msgid "Upload ECH config" msgstr "上传 ECH 配置" -#: htdocs/luci-static/resources/homeproxy.js:184 +#: htdocs/luci-static/resources/homeproxy-pro.js:184 msgid "Upload bandwidth" msgstr "上传带宽" -#: htdocs/luci-static/resources/homeproxy.js:185 +#: htdocs/luci-static/resources/homeproxy-pro.js:185 msgid "Upload bandwidth in Mbps." msgstr "上传带宽(单位:Mbps)。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:433 -#: htdocs/luci-static/resources/view/homeproxy/server.js:522 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:433 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:522 msgid "Upload certificate" msgstr "上传证书" -#: htdocs/luci-static/resources/view/homeproxy/server.js:541 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:541 msgid "Upload key" msgstr "上传密钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:436 -#: htdocs/luci-static/resources/view/homeproxy/node.js:460 -#: htdocs/luci-static/resources/view/homeproxy/server.js:525 -#: htdocs/luci-static/resources/view/homeproxy/server.js:544 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:436 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:460 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:525 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:544 msgid "Upload..." msgstr "上传..." -#: htdocs/luci-static/resources/view/homeproxy/server.js:328 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:328 msgid "Use ACME TLS certificate issuer." msgstr "使用 ACME TLS 证书颁发机构。" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:144 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:144 msgid "" "Use the tutorial-recommended sniffer profile (100ms timeout, http/tls/stun/" "quic/dns). Default keeps the 300ms / unconstrained-list behaviour." @@ -3164,182 +3164,182 @@ msgstr "" "使用教程推荐的嗅探配置(100ms 超时,http/tls/stun/quic/dns)。默认保留 300ms " "/ 不限定协议列表的行为。" -#: htdocs/luci-static/resources/homeproxy.js:673 +#: htdocs/luci-static/resources/homeproxy-pro.js:673 msgid "" "Used to verify the hostname on the returned certificates unless insecure is " "given." msgstr "用于验证返回证书上的主机名。如允许不安全连接,此配置无效。" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:273 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:273 msgid "Used to verify the hostname on the returned certificates." msgstr "用于验证返回证书上的主机名。" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:136 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:136 msgid "User" msgstr "用户" -#: htdocs/luci-static/resources/view/homeproxy/node.js:389 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:389 msgid "User key" msgstr "用户密钥" -#: htdocs/luci-static/resources/view/homeproxy/node.js:750 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:750 msgid "User-Agent" msgstr "用户代理" -#: htdocs/luci-static/resources/view/homeproxy/node.js:68 -#: htdocs/luci-static/resources/view/homeproxy/server.js:211 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:68 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:211 msgid "Username" msgstr "用户名" -#: htdocs/luci-static/resources/homeproxy.js:145 +#: htdocs/luci-static/resources/homeproxy-pro.js:145 msgid "VLESS" msgstr "VLESS" -#: htdocs/luci-static/resources/homeproxy.js:146 +#: htdocs/luci-static/resources/homeproxy-pro.js:146 msgid "VMess" msgstr "VMess" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:126 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:164 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:126 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:164 msgid "WAN DNS (read from interface)" msgstr "WAN DNS(从接口获取)" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:90 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:90 msgid "WAN IP Policy" msgstr "WAN IP 策略" -#: htdocs/luci-static/resources/view/homeproxy/status.js:181 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:181 msgid "Warn" msgstr "警告" -#: htdocs/luci-static/resources/homeproxy.js:523 +#: htdocs/luci-static/resources/homeproxy-pro.js:523 msgid "WebSocket" msgstr "WebSocket" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:197 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:197 msgid "" "When the main DNS returns a mainland China IP, re-resolve via China DNS " "using evaluate/match_response." msgstr "" "当主 DNS 返回大陆 IP 时,通过 evaluate/match_response 改用国内 DNS 复解析。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:741 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:741 msgid "Whitelist mode" msgstr "白名单模式" -#: htdocs/luci-static/resources/homeproxy.js:144 +#: htdocs/luci-static/resources/homeproxy-pro.js:144 msgid "WireGuard" msgstr "WireGuard" -#: htdocs/luci-static/resources/view/homeproxy/node.js:308 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:308 msgid "WireGuard peer public key." msgstr "WireGuard 对端公钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:315 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:315 msgid "WireGuard pre-shared key." msgstr "WireGuard 预共享密钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:300 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:300 msgid "WireGuard requires base64-encoded private keys." msgstr "WireGuard 要求 base64 编码的私钥。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:92 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:92 msgid "Write proxy protocol in the connection header." msgstr "在连接头中写入代理协议。" -#: htdocs/luci-static/resources/homeproxy.js:633 -#: htdocs/luci-static/resources/view/homeproxy/node.js:763 +#: htdocs/luci-static/resources/homeproxy-pro.js:633 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:763 msgid "Xudp (Xray-core)" msgstr "Xudp (Xray-core)" -#: htdocs/luci-static/resources/homeproxy.js:1073 +#: htdocs/luci-static/resources/homeproxy-pro.js:1073 msgid "Your %s was successfully uploaded. Size: %sB." msgstr "您的 %s 已成功上传。大小:%sB。" -#: htdocs/luci-static/resources/view/homeproxy/server.js:385 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:385 msgid "ZeroSSL" msgstr "ZeroSSL" -#: htdocs/luci-static/resources/view/homeproxy/node.js:438 -#: htdocs/luci-static/resources/view/homeproxy/server.js:527 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:438 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:527 msgid "certificate" msgstr "证书" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:358 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:358 msgid "connect UDP connections" msgstr "主动连接 UDP" -#: htdocs/luci-static/resources/homeproxy.js:694 -#: htdocs/luci-static/resources/homeproxy.js:702 +#: htdocs/luci-static/resources/homeproxy-pro.js:694 +#: htdocs/luci-static/resources/homeproxy-pro.js:702 msgid "default" msgstr "默认" -#: htdocs/luci-static/resources/view/homeproxy/status.js:91 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:91 msgid "failed" msgstr "失败" -#: htdocs/luci-static/resources/homeproxy.js:519 +#: htdocs/luci-static/resources/homeproxy-pro.js:519 msgid "gRPC" msgstr "gRPC" -#: htdocs/luci-static/resources/homeproxy.js:560 +#: htdocs/luci-static/resources/homeproxy-pro.js:560 msgid "gRPC permit without stream" msgstr "gRPC 允许无活动连接" -#: htdocs/luci-static/resources/homeproxy.js:555 +#: htdocs/luci-static/resources/homeproxy-pro.js:555 msgid "gRPC service name" msgstr "gRPC 服务名称" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:158 msgid "gVisor" msgstr "gVisor" -#: htdocs/luci-static/resources/view/homeproxy/node.js:402 -#: htdocs/luci-static/resources/view/homeproxy/server.js:278 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:402 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:278 msgid "http" msgstr "" -#: htdocs/luci-static/resources/homeproxy.js:220 -#: htdocs/luci-static/resources/homeproxy.js:1126 -#: htdocs/luci-static/resources/homeproxy.js:1146 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:140 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:175 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:141 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:72 -#: htdocs/luci-static/resources/view/homeproxy/node.js:484 +#: htdocs/luci-static/resources/homeproxy-pro.js:220 +#: htdocs/luci-static/resources/homeproxy-pro.js:1126 +#: htdocs/luci-static/resources/homeproxy-pro.js:1146 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:140 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:175 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:141 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:72 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:484 msgid "non-empty value" msgstr "非空值" -#: htdocs/luci-static/resources/homeproxy.js:631 -#: htdocs/luci-static/resources/view/homeproxy/node.js:188 -#: htdocs/luci-static/resources/view/homeproxy/node.js:401 -#: htdocs/luci-static/resources/view/homeproxy/node.js:761 -#: htdocs/luci-static/resources/view/homeproxy/server.js:277 +#: htdocs/luci-static/resources/homeproxy-pro.js:631 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:188 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:401 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:761 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:277 msgid "none" msgstr "无" -#: htdocs/luci-static/resources/homeproxy.js:632 -#: htdocs/luci-static/resources/view/homeproxy/node.js:762 +#: htdocs/luci-static/resources/homeproxy-pro.js:632 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:762 msgid "packet addr (v2ray-core v5+)" msgstr "packet addr (v2ray-core v5+)" -#: htdocs/luci-static/resources/view/homeproxy/status.js:88 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:88 msgid "passed" msgstr "通过" -#: htdocs/luci-static/resources/view/homeproxy/server.js:546 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:546 msgid "private key" msgstr "私钥" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:127 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:127 msgid "quic-go / uquic chrome" msgstr "quic-go / uquic chrome" -#: htdocs/luci-static/resources/view/homeproxy/status.js:302 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:302 msgid "sing-box client" msgstr "sing-box 客户端" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:41 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:41 msgid "" "sing-box default; recommended for home use (accepts replies from any remote " "after mapping). Choose stricter only for specific UDP issues." @@ -3347,7 +3347,7 @@ msgstr "" "sing-box 默认值,家用推荐(建映射后接受任意远端回包)。仅当遇到特定 UDP 问题" "时才用更严格选项。" -#: htdocs/luci-static/resources/view/homeproxy/client/udp_nat.js:30 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/udp_nat.js:30 msgid "" "sing-box default; recommended for home use (small NAT table, QUIC/game " "friendly). Choose stricter only for specific UDP issues." @@ -3355,7 +3355,7 @@ msgstr "" "sing-box 默认值,家用推荐(NAT 表占用小,对游戏/QUIC 友好)。仅当遇到特定 " "UDP 问题时才用更严格选项。" -#: htdocs/luci-static/resources/view/homeproxy/node.js:377 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:377 msgid "" "sing-box implements Snell v4/v5 wire as v4 and v6. The pre-shared key " "(Password above) must be 12-255 bytes for v6." @@ -3363,15 +3363,15 @@ msgstr "" "sing-box 将 Snell v4/v5 线协议统一为 v4,另提供 v6;v6 的预共享密钥(上方密" "码)长度须为 12-255 字节。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:305 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:305 msgid "sing-box server" msgstr "sing-box 服务端" -#: htdocs/luci-static/resources/view/homeproxy/node.js:466 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:466 msgid "uTLS fingerprint" msgstr "uTLS 指纹" -#: htdocs/luci-static/resources/view/homeproxy/node.js:467 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:467 msgid "" "uTLS is a fork of \"crypto/tls\", which provides ClientHello fingerprinting " "resistance." @@ -3379,114 +3379,114 @@ msgstr "" "uTLS 是 “crypto/tls” 的一个分支,可提供 ClientHello 指纹识别抵抗能力。uTLS " "是 \"crypto/tls\" 的一个分支,拥有抵抗 ClientHello 指纹识别的能力。" -#: htdocs/luci-static/resources/view/homeproxy/status.js:97 +#: htdocs/luci-static/resources/view/homeproxy-pro/status.js:97 msgid "unchecked" msgstr "未检查" -#: htdocs/luci-static/resources/homeproxy.js:1035 +#: htdocs/luci-static/resources/homeproxy-pro.js:1035 msgid "unique UCI identifier" msgstr "独立 UCI 标识" -#: htdocs/luci-static/resources/homeproxy.js:1137 +#: htdocs/luci-static/resources/homeproxy-pro.js:1137 msgid "unique value" msgstr "独立值" -#: htdocs/luci-static/resources/view/homeproxy/node.js:809 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:809 msgid "unknown error" msgstr "未知错误" -#: htdocs/luci-static/resources/view/homeproxy/node.js:94 -#: htdocs/luci-static/resources/view/homeproxy/node.js:202 -#: htdocs/luci-static/resources/view/homeproxy/node.js:531 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:94 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:202 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:531 msgid "v1" msgstr "v1" -#: htdocs/luci-static/resources/view/homeproxy/node.js:95 -#: htdocs/luci-static/resources/view/homeproxy/node.js:203 -#: htdocs/luci-static/resources/view/homeproxy/node.js:532 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:95 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:203 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:532 msgid "v2" msgstr "v2" -#: htdocs/luci-static/resources/view/homeproxy/node.js:204 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:204 msgid "v3" msgstr "v3" -#: htdocs/luci-static/resources/view/homeproxy/node.js:383 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:383 msgid "v4" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/server.js:269 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:269 msgid "v5" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/node.js:384 -#: htdocs/luci-static/resources/view/homeproxy/server.js:270 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:384 +#: htdocs/luci-static/resources/view/homeproxy-pro/server.js:270 msgid "v6" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:152 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:156 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:186 -#: htdocs/luci-static/resources/view/homeproxy/client/dns.js:190 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:152 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:156 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:186 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/dns.js:190 msgid "valid DNS server address" msgstr "有效 DNS 服务器地址" -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:155 -#: htdocs/luci-static/resources/view/homeproxy/client/nodes.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:80 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:83 -#: htdocs/luci-static/resources/view/homeproxy/node.js:727 -#: htdocs/luci-static/resources/view/homeproxy/node.js:730 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:155 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/nodes.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:80 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:83 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:727 +#: htdocs/luci-static/resources/view/homeproxy-pro/node.js:730 msgid "valid URL" msgstr "有效网址" -#: htdocs/luci-static/resources/homeproxy.js:1085 +#: htdocs/luci-static/resources/homeproxy-pro.js:1085 msgid "valid base64 key with %d characters" msgstr "包含 %d 个字符的有效 base64 密钥" -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:158 -#: htdocs/luci-static/resources/view/homeproxy/client/access.js:203 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:158 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/access.js:203 msgid "valid hostname" msgstr "有效主机名" -#: htdocs/luci-static/resources/homeproxy.js:1117 +#: htdocs/luci-static/resources/homeproxy-pro.js:1117 msgid "valid port range (port1:port2)" msgstr "有效端口范围(port1:port2)" -#: htdocs/luci-static/resources/view/homeproxy/client/routing.js:112 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/routing.js:112 msgid "valid port value" msgstr "有效端口值" -#: htdocs/luci-static/resources/homeproxy.js:1148 +#: htdocs/luci-static/resources/homeproxy-pro.js:1148 msgid "valid uuid" msgstr "有效 uuid" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:402 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:402 msgid "wrong-ack" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:401 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:401 msgid "wrong-checksum" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:403 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:403 msgid "wrong-md5" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:400 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:400 msgid "wrong-sequence (default)" msgstr "wrong-sequence(默认)" -#: htdocs/luci-static/resources/view/homeproxy/client/common.js:404 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/common.js:404 msgid "wrong-timestamp" msgstr "" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:75 -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:123 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:75 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:123 msgid "{tag} in URL when extra tags are used" msgstr "使用额外标签时 URL 需包含 {tag}" -#: htdocs/luci-static/resources/view/homeproxy/client/subscription.js:126 +#: htdocs/luci-static/resources/view/homeproxy-pro/client/subscription.js:126 msgid "{tag} in initial path when extra tags are used" msgstr "使用额外标签时初始路径需包含 {tag}" diff --git a/luci-app-homeproxy-pro-pro/root/etc/capabilities/homeproxy-pro.json b/luci-app-homeproxy-pro/root/etc/capabilities/homeproxy-pro.json similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/capabilities/homeproxy-pro.json rename to luci-app-homeproxy-pro/root/etc/capabilities/homeproxy-pro.json diff --git a/luci-app-homeproxy-pro-pro/root/etc/config/homeproxy-pro b/luci-app-homeproxy-pro/root/etc/config/homeproxy-pro similarity index 92% rename from luci-app-homeproxy-pro-pro/root/etc/config/homeproxy-pro rename to luci-app-homeproxy-pro/root/etc/config/homeproxy-pro index 86cf16cad..04222645b 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/config/homeproxy-pro +++ b/luci-app-homeproxy-pro/root/etc/config/homeproxy-pro @@ -1,5 +1,5 @@ -config homeproxy 'infra' +config homeproxy-pro 'infra' option __warning 'DO NOT EDIT THIS SECTION, OR YOU ARE ON YOUR OWN!' option common_port '22,53,80,143,443,465,587,853,873,993,995,5222,8080,8443,9418' option mixed_port '5330' @@ -18,10 +18,10 @@ config homeproxy 'infra' option tproxy_mark '101' option tun_mark '102' -config homeproxy 'migration' +config homeproxy-pro 'migration' option crontab '1' -config homeproxy 'config' +config homeproxy-pro 'config' option main_node 'nil' option main_udp_node 'same' option dns_server '8.8.8.8' @@ -47,7 +47,7 @@ config homeproxy 'config' option udp_filtering '' option udp_nat_max '' -config homeproxy 'control' +config homeproxy-pro 'control' option lan_proxy_mode 'disabled' list wan_proxy_ipv4_ips '91.105.192.0/23' list wan_proxy_ipv4_ips '91.108.4.0/22' @@ -65,12 +65,12 @@ config homeproxy 'control' list wan_proxy_ipv6_ips '2001:b28:f23f::/48' list wan_proxy_ipv6_ips '2a0a:f280::/32' -config homeproxy 'routing' +config homeproxy-pro 'routing' option default_outbound 'direct-out' option default_outbound_dns 'default-dns' option find_neighbor '0' -config homeproxy 'dns' +config homeproxy-pro 'dns' option default_strategy 'prefer_ipv4' option default_server 'default-dns' option disable_cache '0' @@ -80,7 +80,7 @@ config homeproxy 'dns' option dns_timeout '' option cache_file_store_dns '0' -config homeproxy 'subscription' +config homeproxy-pro 'subscription' option auto_update '0' option allow_insecure '0' option packet_encoding 'xudp' @@ -89,6 +89,6 @@ config homeproxy 'subscription' list filter_keywords '重置|到期|过期|剩余|套餐' list filter_keywords 'Expiration|Remaining' -config homeproxy 'server' +config homeproxy-pro 'server' option enabled '0' option log_level 'warn' diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.txt similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.txt rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.txt diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.ver similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip4.ver rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip4.ver diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.txt similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.txt rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.txt diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.ver similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_ip6.ver rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_ip6.ver diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.txt similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.txt rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.txt diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.ver similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/china_list.ver rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/china_list.ver diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.txt b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.txt similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.txt rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.txt diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.ver b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.ver similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/resources/gfw_list.ver rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/resources/gfw_list.ver diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/clean_log.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/clean_log.sh similarity index 95% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/clean_log.sh rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/clean_log.sh index d2878ed0f..075ee4a35 100755 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/clean_log.sh +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/clean_log.sh @@ -3,7 +3,7 @@ # # Copyright (C) 2022-2023 ImmortalWrt.org -NAME="homeproxy" +NAME="homeproxy-pro" log_max_size="50" #KB main_log_file="/var/run/$NAME/$NAME.log" diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc similarity index 99% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc index b616bca6d..12199f122 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/adapter.uc @@ -30,7 +30,7 @@ import { isEmpty, strToBool, strToInt, strToTime, removeBlankAttrs, buildTLSObject, buildTransportObject, parse_port -} from '../homeproxy.uc'; +} from '../homeproxy-pro.uc'; import { Node, Inbound, INBOUND_TLS_SERVER } from './model.uc'; diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/loader.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/loader.uc similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/loader.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/loader.uc index 4c26d766b..0e794fdec 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/loader.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/loader.uc @@ -26,7 +26,7 @@ import { import { PROTOCOL_TO_UCI as PROTOCOL_OPTIONS } from '../parser/mapping.uc'; -const UCICONFIG = 'homeproxy'; +const UCICONFIG = 'homeproxy-pro'; const SECTION = { main: 'config', @@ -63,7 +63,7 @@ function node_opt(uci, section_id, name) { /* --- sub-object extraction --------------------------------------------- */ /* These three functions are the whole reason a Node is hierarchical: the - * shared TLS/transport/multiplex builders (homeproxy.uc) take a flat, + * shared TLS/transport/multiplex builders (homeproxy-pro.uc) take a flat, * prefixed dict today, so every caller has to hand them the right subset. A * sub-object makes the boundary explicit and testable. * @@ -369,7 +369,7 @@ export const Loader = { uci.load(UCICONFIG); - const config = Config.create('homeproxy'); + const config = Config.create('homeproxy-pro'); config.general = { routing_mode: opt(uci, 'main', 'routing_mode') || 'bypass_mainland_china', diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/model.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/model.uc similarity index 99% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/model.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/model.uc index dbfc51d8c..2fcb06742 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/config/model.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/config/model.uc @@ -20,7 +20,7 @@ 'use strict'; -import { isEmpty } from '../homeproxy.uc'; +import { isEmpty } from '../homeproxy-pro.uc'; /* Canonical credential multiplexing for a Node. The current generator picks * these apart with ternaries per field (`username` vs `user` vs `password` vs diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut index 449c77546..7bd2c53ba 100755 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_post.ut @@ -7,7 +7,7 @@ * Copyright (C) 2025 ImmortalWrt.org * * Declares every homeproxy_* fw4 chain/set. The inventory of those objects is - * tracked in scripts/fw4_names.sh, which init.d/homeproxy uses to clean them up + * tracked in scripts/fw4_names.sh, which init.d/homeproxy-pro uses to clean them up * on stop; add/remove entries there together with any change below. * tests/ucode/test_fw4_names.sh compares both lists, and * tests/ucode/test_firewall_template.sh renders this template and checks the @@ -26,7 +26,7 @@ */ import { readfile } from 'fs'; import { cursor } from 'uci'; -import { isEmpty, isValidCIDR } from '/etc/homeproxy/scripts/homeproxy.uc'; +import { isEmpty, isValidCIDR } from '/etc/homeproxy-pro/scripts/homeproxy-pro.uc'; import { ipv4_to_nftarr, mac_to_nftarr, @@ -34,7 +34,7 @@ import { ports_to_nftarr, isValidPort, isValidIface -} from '/etc/homeproxy/scripts/firewall_utils.uc'; +} from '/etc/homeproxy-pro/scripts/firewall_utils.uc'; const fw4 = require('fw4'); @@ -139,10 +139,10 @@ function dnsmasq_nftset() { } /* Misc config */ -const resources_dir = '/etc/homeproxy/resources'; +const resources_dir = '/etc/homeproxy-pro/resources'; /* UCI config start */ -const cfgname = 'homeproxy'; +const cfgname = 'homeproxy-pro'; const uci = cursor(); uci.load(cfgname); diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc similarity index 97% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc index aed86e739..0d2c95c07 100755 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_pre.uc @@ -8,9 +8,9 @@ import { writefile } from 'fs'; import { cursor } from 'uci'; -import { isEmpty, RUN_DIR, validation } from './homeproxy.uc'; +import { isEmpty, RUN_DIR, validation } from './homeproxy-pro.uc'; -const cfgname = 'homeproxy'; +const cfgname = 'homeproxy-pro'; const uci = cursor(); uci.load(cfgname); diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc similarity index 95% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc index 6f1180f95..da4749055 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/firewall_utils.uc @@ -8,8 +8,8 @@ * expression with `}`, and the next thing nft sees is whatever the attacker * put after it - up to and including `accept` for a chain that should be a * drop, or a `reject` outside any chain that the fw4 reload fails to - * compile, taking the whole router firewall with it. The homeproxy section - * in /etc/config/homeproxy is UCI-writable from the subscription updater, + * compile, taking the whole router firewall with it. The homeproxy-pro section + * in /etc/config/homeproxy-pro is UCI-writable from the subscription updater, * from any shell on the LAN and from any cron job the user has not locked * down; `tests/ucode/test_firewall_validators.uc` covers that the helpers * drop these inputs rather than letting them through, and `tests/arch-guard.sh` @@ -30,11 +30,11 @@ 'use strict'; -/* isEmpty() lives in homeproxy.uc, not in the ucode globals. Without this +/* isEmpty() lives in homeproxy-pro.uc, not in the ucode globals. Without this * import every helper below threw "access to undeclared variable isEmpty" the * moment it was called, which no host-side test caught because the test * harness stages its own stand-in module. */ -import { isEmpty } from './homeproxy.uc'; +import { isEmpty } from './homeproxy-pro.uc'; /* IPv4 (with optional /CIDR) - the regex is the standard four-octet body * followed by an optional /0..32. Anything outside that - "1.2.3.4.5", diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh similarity index 89% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh index cdff5ee94..66fe94f73 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/fw4_names.sh @@ -2,11 +2,11 @@ # # Copyright (C) 2025 ImmortalWrt.org # -# Single source of truth for every fw4 chain and set owned by homeproxy. +# Single source of truth for every fw4 chain and set owned by homeproxy-pro. # -# * root/etc/homeproxy/scripts/firewall_post.ut declares these objects and +# * root/etc/homeproxy-pro/scripts/firewall_post.ut declares these objects and # decides which of them actually exist for the current proxy mode. -# * root/etc/init.d/homeproxy flushes and deletes them on stop. +# * root/etc/init.d/homeproxy-pro flushes and deletes them on stop. # # When you add or remove a chain/set in firewall_post.ut, update this list in # the same commit -- tests/ucode/test_fw4_names.sh compares both sides and diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_client.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_client.uc similarity index 97% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_client.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_client.uc index c20805fb7..d1bae8a85 100755 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_client.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_client.uc @@ -5,7 +5,7 @@ * scripts/generate_client.uc: process-level entry point. * * The actual client generator is generator/client.uc; this script is the - * thin entry point that init.d/homeproxy execve's. Responsibilities: + * thin entry point that init.d/homeproxy-pro execve's. Responsibilities: * * 1. Load UCI into the HomeProxyConfig domain model. * 2. Resolve the GenerationContext env: the WAN resolver (ubus) and the two @@ -29,7 +29,7 @@ import { mkdtemp, readfile, writefile } from 'fs'; import { Loader } from './config/loader.uc'; import { generate } from './generator/client.uc'; -import { removeBlankAttrs, HP_DIR, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy.uc'; +import { removeBlankAttrs, HP_DIR, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy-pro.uc'; /* Resolve the GenerationContext inputs. This is the only impure step on the * client generation path, and it is deliberately here rather than under diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_server.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_server.uc similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_server.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_server.uc index 12ef66be0..e6865d8a6 100755 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generate_server.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generate_server.uc @@ -15,7 +15,7 @@ import { mkdtemp, writefile } from 'fs'; import { Loader } from './config/loader.uc'; import { generate_server } from './generator/server.uc'; -import { removeBlankAttrs, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy.uc'; +import { removeBlankAttrs, RUN_DIR, shellQuote, UCICONFIG_DIR } from './homeproxy-pro.uc'; const dm = Loader.load(UCICONFIG_DIR); const config = generate_server(dm); diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/client.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/client.uc similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/client.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/client.uc index 2af07761f..ec790ad5c 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/client.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/client.uc @@ -39,7 +39,7 @@ 'use strict'; -import { isEmpty, strToInt, RUN_DIR } from '../homeproxy.uc'; +import { isEmpty, strToInt, RUN_DIR } from '../homeproxy-pro.uc'; import { build_context } from './context.uc'; import { build_dns } from './dns.uc'; diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/common.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/common.uc similarity index 96% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/common.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/common.uc index 3484e508f..82395bc07 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/common.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/common.uc @@ -18,14 +18,14 @@ 'use strict'; -import { isEmpty } from '../homeproxy.uc'; +import { isEmpty } from '../homeproxy-pro.uc'; import { ConfigQuery } from '../config/model.uc'; -/* parse_port() lives in homeproxy.uc. The Adapter layer needs it +/* parse_port() lives in homeproxy-pro.uc. The Adapter layer needs it * too (EndpointFactory builds the WireGuard endpoint) and an adapter must * not import from generator/, so the util moved to the module both layers - * already share. Callers import it from '../homeproxy.uc' now. */ + * already share. Callers import it from '../homeproxy-pro.uc' now. */ /* Resolve a UCI outbound-style reference (string or array of strings) * into the sing-box tag the generator should emit. The arrays carry @@ -181,7 +181,7 @@ export function attachSchema(config) { * other modes still resolve the proxy node hostname and resolve any * domain the user clicks through. cache_file is a no-op on a fresh * install (no cache to read) and the file is the only piece of state the - * generator writes outside /etc/config/homeproxy. Routing-mode gating + * generator writes outside /etc/config/homeproxy-pro. Routing-mode gating * used to limit it to bypass_mainland_china + custom, which left * gfwlist / proxy_mainland_china / global with cold-start DNS on every * reload and made the difference between modes hard to explain. @@ -199,7 +199,7 @@ export function attachExperimental(config, routing_mode, dns_store_dns) { config.experimental = { cache_file: { enabled: true, - path: '/etc/homeproxy/cache.db', + path: '/etc/homeproxy-pro/cache.db', store_dns: (dns_store_dns === '1') ? true : null } }; diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/context.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/context.uc similarity index 97% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/context.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/context.uc index 2a9318644..94389321d 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/context.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/context.uc @@ -9,8 +9,8 @@ * * env = { * wan_dns, the WAN resolver the CLI resolved via ubus - * direct_domain_list, /etc/homeproxy/resources/direct_list.txt - * proxy_domain_list, /etc/homeproxy/resources/proxy_list.txt + * direct_domain_list, /etc/homeproxy-pro/resources/direct_list.txt + * proxy_domain_list, /etc/homeproxy-pro/resources/proxy_list.txt * } * * Why the split exists: this module used to sit inside generator/client.uc @@ -37,7 +37,7 @@ 'use strict'; -import { isEmpty, strToInt } from '../homeproxy.uc'; +import { isEmpty, strToInt } from '../homeproxy-pro.uc'; /* Build the routing-mode-independent ctx the section builders consume. * Mode-dependent defaults are filled in here so each builder can stay a @@ -221,7 +221,7 @@ export function build_context(dm, env) { /* Inline static rule-sets (direct-domain, proxy-domain) only fire * when the routing mode has a non-empty domain list. Both lists are * inputs now: the CLI reads the two files under - * /etc/homeproxy/resources/ and passes them in. Custom mode ignores + * /etc/homeproxy-pro/resources/ and passes them in. Custom mode ignores * them entirely, exactly as the pre-split read did. */ ctx.direct_domain_list = []; ctx.proxy_domain_list = []; diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc similarity index 99% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc index 2fa3adb35..8a3b03cad 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/dns.uc @@ -25,7 +25,7 @@ 'use strict'; -import { isEmpty, strToBool, strToInt, strToTime, parseURL, validation, parse_port } from '../homeproxy.uc'; +import { isEmpty, strToBool, strToInt, strToTime, parseURL, validation, parse_port } from '../homeproxy-pro.uc'; import { get_outbound, get_resolver, get_ruleset } from './common.uc'; diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc similarity index 99% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc index f91840939..f1b708f7d 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/inbound.uc @@ -12,7 +12,7 @@ 'use strict'; -import { isEmpty, strToInt, strToTime, strToBool } from '../homeproxy.uc'; +import { isEmpty, strToInt, strToTime, strToBool } from '../homeproxy-pro.uc'; /* Append the always-on inbounds. dns-in is the local listener the DNS chain * hands queries to - runtime/dns.sh points dnsmasq at 127.0.0.1#, diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc index 576d7a8d5..ddd725794 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/outbound.uc @@ -31,7 +31,7 @@ 'use strict'; -import { isEmpty, strToInt, strToBool, strToTime } from '../homeproxy.uc'; +import { isEmpty, strToInt, strToBool, strToTime } from '../homeproxy-pro.uc'; import { ConfigQuery } from '../config/model.uc'; import { OutboundFactory, EndpointFactory } from '../config/adapter.uc'; @@ -103,13 +103,13 @@ function keep_candidate(dm, id) { const node = ConfigQuery.node_by_id(dm, id); if (!node) { - warn(sprintf("homeproxy: urltest candidate '%s' no longer exists, skipping.", id)); + warn(sprintf("homeproxy-pro: urltest candidate '%s' no longer exists, skipping.", id)); return false; } const problems = OutboundFactory.problems(node); if (length(problems)) { - warn(sprintf("homeproxy: skipping urltest candidate '%s': %s.", id, join(', ', problems))); + warn(sprintf("homeproxy-pro: skipping urltest candidate '%s': %s.", id, join(', ', problems))); return false; } diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/route.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/route.uc similarity index 99% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/route.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/route.uc index 1f271d453..bb6ff415a 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/route.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/route.uc @@ -26,7 +26,7 @@ 'use strict'; -import { isEmpty, strToInt, strToTime, strToBool, parse_port } from '../homeproxy.uc'; +import { isEmpty, strToInt, strToTime, strToBool, parse_port } from '../homeproxy-pro.uc'; import { get_outbound, get_resolver, get_ruleset, get_direct_override } from './common.uc'; diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc similarity index 91% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc index cff487c62..374ef3446 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/ruleset.uc @@ -26,7 +26,7 @@ 'use strict'; -import { isEmpty, validateHomeProxyPath } from '../homeproxy.uc'; +import { isEmpty, validateHomeProxyPath } from '../homeproxy-pro.uc'; import { get_outbound, isDirectOutboundTag } from './common.uc'; @@ -56,9 +56,9 @@ export function build_user_rulesets(rule_set_array, dm, ctx) { fail loud on a missing/disabled reference. */ const fetch_ref = (cfg.type === 'remote') ? (cfg.url || '') : (cfg.path || ''); if (!match(fetch_ref, /\{tag\}/)) - die(sprintf("homeproxy: rule-set '%s' uses extra tags but its %s source lacks a {tag} placeholder; add {tag} to the source or drop the extra tags.", cfg.name, cfg.type)); + die(sprintf("homeproxy-pro: rule-set '%s' uses extra tags but its %s source lacks a {tag} placeholder; add {tag} to the source or drop the extra tags.", cfg.name, cfg.type)); if (cfg.type === 'remote' && !isEmpty(cfg.initial_path) && !match(cfg.initial_path, /\{tag\}/)) - die(sprintf("homeproxy: rule-set '%s' uses extra tags but its initial_path lacks a {tag} placeholder.", cfg.name)); + die(sprintf("homeproxy-pro: rule-set '%s' uses extra tags but its initial_path lacks a {tag} placeholder.", cfg.name)); } /* Local rule-set path is read by sing-box as root. The whitelist @@ -70,7 +70,7 @@ export function build_user_rulesets(rule_set_array, dm, ctx) { * sing-box checking whatever the field evaluated to, and the * user only saw the reload keep the previous config. */ if (cfg.type === 'local' && cfg.path && !validateHomeProxyPath(cfg.path)) - die(sprintf("homeproxy: rule-set '%s' path '%s' is outside the homeproxy whitelist; choose a path under /etc/homeproxy/.", cfg.name, cfg.path)); + die(sprintf("homeproxy-pro: rule-set '%s' path '%s' is outside the homeproxy-pro whitelist; choose a path under /etc/homeproxy-pro/.", cfg.name, cfg.path)); const ruleset = { type: cfg.type, diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/server.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/server.uc similarity index 97% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/server.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/server.uc index e48dd851e..96fd1f5dd 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/generator/server.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/generator/server.uc @@ -40,7 +40,7 @@ export function generate_server(dm) { log: { disabled: false, level: log_level, - output: '/var/run/homeproxy/sing-box-s.log', + output: '/var/run/homeproxy-pro/sing-box-s.log', timestamp: true }, inbounds: [] diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc similarity index 96% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc index f2107aab4..c615079d3 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/homeproxy-pro.uc @@ -8,16 +8,16 @@ import { access, lstat, mkdtemp, open, rmdir, unlink } from 'fs'; import { urldecode_params } from 'luci.http'; /* Global variables start */ -export const HP_DIR = '/etc/homeproxy'; -export const RUN_DIR = '/var/run/homeproxy'; +export const HP_DIR = '/etc/homeproxy-pro'; +export const RUN_DIR = '/var/run/homeproxy-pro'; /* Where the UCI configuration lives. This is /etc/config - NOT HP_DIR/config. - * The package ships its config as the conffile /etc/config/homeproxy, and + * The package ships its config as the conffile /etc/config/homeproxy-pro, and * ucode's `cursor(dir)` treats `dir` as the *confdir*, so - * cursor(HP_DIR + '/config') would read /etc/homeproxy/config/homeproxy, a + * cursor(HP_DIR + '/config') would read /etc/homeproxy-pro/config/homeproxy-pro, a * path that exists nowhere. uci.load() then returns null, every uci.get() * returns null, and the Loader silently yields pure defaults: no main-out, * no route/direct final, none of the user's ports or nodes. - * Verified on a device: cursor('/etc/homeproxy/config').get(...) is empty + * Verified on a device: cursor('/etc/homeproxy-pro/config').get(...) is empty * while cursor().get(...) returns the configured value. * The test suite stages a rewritten copy of this constant instead of the * old `__LOADER_DIR__` source sed. */ @@ -44,11 +44,11 @@ export function isBinary(str) { * sing-box config. sing-box runs as root and reads the file itself; an * arbitrary UCI value of e.g. /etc/passwd would leak the file to anyone * who could write to the UCI tree. The LuCI UI already gates the input - * via validateCertificatePath() in homeproxy.js, but UCI can be set from + * via validateCertificatePath() in homeproxy-pro.js, but UCI can be set from * any node on the LAN (subscription updates, scripted edits) and the * UI check is only UX - we have to enforce on the backend. * - * /etc/homeproxy/... - project-managed certs / ruleset paths / etc. + * /etc/homeproxy-pro/... - project-managed certs / ruleset paths / etc. * /tmp/homeproxy_* - upload staging files (cert_upload_* writes) * * Anything else (relative paths, /etc/passwd, /var/run/...) returns false @@ -58,7 +58,7 @@ export function validateHomeProxyPath(p) { return false; /* Reject traversal *before* the prefix checks below: a plain prefix - * comparison accepts '/etc/homeproxy/../../etc/shadow', and sing-box reads + * comparison accepts '/etc/homeproxy-pro/../../etc/shadow', and sing-box reads * these paths as root. */ if (match(p, /(^|\/)\.\.(\/|$)/)) return false; @@ -69,7 +69,7 @@ export function validateHomeProxyPath(p) { if (substr(p, 0, 1) !== '/') return false; - if (substr(p, 0, length('/etc/homeproxy/')) === '/etc/homeproxy/') + if (substr(p, 0, length('/etc/homeproxy-pro/')) === '/etc/homeproxy-pro/') return true; if (substr(p, 0, length('/tmp/homeproxy_')) === '/tmp/homeproxy_') @@ -84,16 +84,16 @@ export function validateHomeProxyPath(p) { * certificate normally lives under /etc/ssl/ or under the ACME state in * /etc/acme/, and the two sing-box jails mount exactly those directories * (see runtime/service.sh's procd_add_jail_mount calls). validateHomeProxyPath() - * only knows /etc/homeproxy/ and /tmp/homeproxy_, so a certificate the user + * only knows /etc/homeproxy-pro/ and /tmp/homeproxy_, so a certificate the user * legitimately picked from /etc/ssl/ was accepted by the LuCI validator and * then silently dropped here - certificate_path became null and the TLS * listener failed with no error pointing at the path. * * The list is mirrored by HP_CERT_PATH_ROOTS in - * htdocs/luci-static/resources/homeproxy.js; guard 29 in tests/arch-guard.sh + * htdocs/luci-static/resources/homeproxy-pro.js; guard 29 in tests/arch-guard.sh * keeps the two in step. */ -export const CERT_PATH_ROOTS = ['/etc/homeproxy/certs/', '/etc/acme/', '/etc/ssl/']; +export const CERT_PATH_ROOTS = ['/etc/homeproxy-pro/certs/', '/etc/acme/', '/etc/ssl/']; /* validateCertificatePath(p) - the TLS certificate/key path gate. * @@ -222,8 +222,8 @@ export function getTime(epoch) { }; /* Redact the credential-bearing parts of a URL before logging it. Any - * subscription URL we ship into /var/run/homeproxy/homeproxy.log is - * readable by anyone who can read /var/run/homeproxy - including UCI + * subscription URL we ship into /var/run/homeproxy-pro/homeproxy-pro.log is + * readable by anyone who can read /var/run/homeproxy-pro - including UCI * defaults that ship on the device and anyone with shell on the LAN. * (Confirmed on the device: the log is 0644.) * diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc index 505726f4e..5b3fc6418 100755 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/migrate_config.uc @@ -8,11 +8,11 @@ 'use strict'; import { cursor } from 'uci'; -import { isEmpty, parseURL, shellQuote, validation } from './homeproxy.uc'; +import { isEmpty, parseURL, shellQuote, validation } from './homeproxy-pro.uc'; const uci = cursor(); -const uciconfig = 'homeproxy'; +const uciconfig = 'homeproxy-pro'; uci.load(uciconfig); const uciinfra = 'infra', @@ -93,7 +93,7 @@ if (isEmpty(uci.get(uciconfig, ucimain, 'log_level'))) /* v28.9.1.16: cn_ip_fallback default flipped to '1' (tutorial §2.1 / docs/linux.json 与 pro 的差距分析.md). * Existing users get the behaviour change only when they ask for it, so write * '0' explicitly into their config on upgrade; new installs read '1' straight - * from /etc/config/homeproxy (the package ships with that as the default). + * from /etc/config/homeproxy-pro (the package ships with that as the default). * isEmpty() is the same gate log_level uses, so an upgrade that already has * the option set (the fresh-install path of a prior release) keeps its value. */ if (isEmpty(uci.get(uciconfig, ucimain, 'cn_ip_fallback'))) diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/flatten.uc diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/mapping.uc diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/normalize.uc diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc similarity index 99% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc index dc607f5b9..200578df3 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/protocols.uc @@ -24,7 +24,7 @@ import { urldecode, urlencode } from 'luci.http'; -import { decodeBase64Str, isEmpty, parseURL } from '../homeproxy.uc'; +import { decodeBase64Str, isEmpty, parseURL } from '../homeproxy-pro.uc'; /* https://shadowsocks.org/guide/sip008.html */ export function parse_sip008_uri(uri) { diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc index ccd41b1d3..6ba9cb848 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/uri.uc @@ -16,7 +16,7 @@ 'use strict'; -import { isEmpty, validation } from '../homeproxy.uc'; +import { isEmpty, validation } from '../homeproxy-pro.uc'; import { parse_sip008_uri, parse_anytls_uri, parse_http_uri, diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc similarity index 98% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc index f98836664..058b62de5 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/parser/validator.uc @@ -22,7 +22,7 @@ 'use strict'; -import { validation } from '../homeproxy.uc'; +import { validation } from '../homeproxy-pro.uc'; /* Each entry carries a stable `kind` (so callers / tests can branch on * it) and a `message` for the log line. Adding a new rule is: diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc similarity index 100% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/resource_blob_sha.uc diff --git a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh similarity index 93% rename from luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh rename to luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh index a22078c80..2f5ec7ce9 100644 --- a/luci-app-homeproxy-pro-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh +++ b/luci-app-homeproxy-pro/root/etc/homeproxy-pro/scripts/runtime/config.sh @@ -2,7 +2,7 @@ # # Copyright (C) 2025 ImmortalWrt.org # -# Configuration transaction helpers for homeproxy. +# Configuration transaction helpers for homeproxy-pro. # # The generated sing-box configuration is the only thing standing between the # router and a working service, so it is handled as a transaction: @@ -15,9 +15,9 @@ # -> ensure-live if generation produced nothing, restore the # known-good copy instead of failing the start # -> rollback a reload that comes up unhealthy puts the known-good -# copy back (see reload_service in init.d/homeproxy) +# copy back (see reload_service in init.d/homeproxy-pro) # -# Sourced by /etc/init.d/homeproxy. The functions only take explicit paths +# Sourced by /etc/init.d/homeproxy-pro. The functions only take explicit paths # and never call procd or ubus, so tests/runtime/test_config_transaction.sh # can exercise them without a router. @@ -88,8 +88,8 @@ hp_same_file() { # # Two passes over the file, because the snapshot carries two shapes: # -# homeproxy.
.