Compare commits

...

141 Commits

Author SHA1 Message Date
Artem Baskal
503974c210 client: 1383 Support device identifier - DOT and DOH 2020-12-11 17:49:50 +03:00
Ainar Garipov
e2738fdf3f Pull request: all: fix snapshot release version length
Merge in DNS/adguard-home from 2410-fix-snapshot to master

Updates #2410.
Updates #2412.

Squashed commit of the following:

commit 6718e018533abbd02ccefdb5a0030655d5e8012a
Merge: ba5fc4c58 e02308dd4
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Dec 10 14:36:19 2020 +0300

    Merge branch 'master' into 2410-fix-snapshot

commit ba5fc4c58b1f2be0b3e6fbbeea04f70b506633f2
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Dec 10 13:12:12 2020 +0300

    all: fix snapshot release version length
2020-12-10 14:49:11 +03:00
Ainar Garipov
e02308dd42 Pull request: scripts: improve go-lint
Merge in DNS/adguard-home from imp-lint-script to master

Squashed commit of the following:

commit 89a6e8343f9f0c7ea257899b5daac014bfb6b6df
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Dec 10 13:36:38 2020 +0300

    script: make go-lint more in line with HACKING.md

commit dc4e1519d25877a074f667fec696578c80d7baf3
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Dec 10 13:35:03 2020 +0300

    scripts: improve go-lint
2020-12-10 14:35:07 +03:00
Ainar Garipov
ef178610d6 Pull request: all: cleanup
Merge in DNS/adguard-home from cleanup to master

Squashed commit of the following:

commit a62e28cd35fefe45e228d1762aa2c148204c3065
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Dec 9 12:24:34 2020 +0300

    all: more cleanup

commit 04dc2220483fa3216b138b7b848b818dcc2a393a
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Dec 8 20:52:28 2020 +0300

    all: cleanup
2020-12-09 12:39:20 +03:00
Artem Baskal
5c7b6bbf5c Use external links
Squashed commit of the following:

commit 5617cde490beea6f09e1beef1ff8b8e151e26244
Merge: 0a6500e75 7f9a3a73b
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Dec 8 18:34:19 2020 +0300

    Merge branch 'master' into use-external-links

commit 0a6500e75fbaa354a938c818f02f0b2419bd0d8e
Merge: 9d2ff3bb5 73c30590e
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Dec 8 18:15:57 2020 +0300

    Merge branch 'master' into use-external-links

commit 9d2ff3bb5b3f5d5f08f26f54552ac07dd1724de5
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Dec 8 18:04:09 2020 +0300

    client: open external links in new tab

commit 57d0ed09a8
Author: Zhijie He <hezhijie0327@hotmail.com>
Date:   Tue Nov 24 09:53:37 2020 +0800

    Encryption: use rel="noopener noreferrer"

commit 0554590059
Author: Zhijie He <hezhijie0327@hotmail.com>
Date:   Tue Nov 24 09:51:19 2020 +0800

    Clients: use rel="noopener noreferrer"
2020-12-08 18:47:47 +03:00
Ainar Garipov
7f9a3a73b4 Pull request: 2276 no golangci
Merge in DNS/adguard-home from 2276-no-golangci to master

Updates #2276.

Squashed commit of the following:

commit 81a5a62716b8c57e8575cf149938cd941660b6f5
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Dec 8 16:59:19 2020 +0300

    all: fix Makefile

commit a8f2546803a3986f1292b45921c27409366bc04a
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Dec 8 16:11:09 2020 +0300

    all: remove golangci-yaml, add new linters
2020-12-08 18:23:35 +03:00
Ainar Garipov
73c30590e0 Pull request: all: fix lint and naming issues vol. 4
Merge in DNS/adguard-home from 2276-fix-lint-4 to master

Updates #2276.

Squashed commit of the following:

commit 15d49184cd8ce1f8701bf3221e69418ca1778b36
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Dec 8 15:51:34 2020 +0300

    util: fix naming

commit 3b9a86a0feb8c6e0b167e6e23105e8137b0dda76
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Dec 8 15:41:10 2020 +0300

    all: fix lint and naming issues vol. 4
2020-12-08 16:01:13 +03:00
Artem Baskal
b7bf7f78df client: 2353 sort ip in dns rewrites
Close #2353

Squashed commit of the following:

commit 1072b124c68ff09c6d718acb3aea625fd7b38c4f
Merge: 77e9a6f10 6aacb2105
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Dec 8 14:27:06 2020 +0300

    Merge branch 'master' into 2353-fix-sort-ip

commit 77e9a6f1013e200346b0dc332fd6b7e9e88c8ade
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Mon Dec 7 17:38:24 2020 +0300

    client: 2353 sort ip in dns rewrites
2020-12-08 15:31:20 +03:00
Artem Baskal
6aacb2105c client: 2368 Allow to enable DHCP even if there's another DHCP found on the network
Squashed commit of the following:

commit 2411b36b07b263c9a752f17f676bae93c15e430d
Merge: 8b8740fd3 88d44b437
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Dec 8 14:11:15 2020 +0300

    Merge branch 'master' into fix/2368

commit 8b8740fd3f379ed1b17c3da27c748df9238efc77
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Mon Dec 7 16:51:45 2020 +0300

    + client: 2368 Allow to enable DHCP even if there's another DHCP found on the network
2020-12-08 14:26:44 +03:00
Artem Baskal
88d44b4370 client: 2367 Show SSL Certificate Expire Banner in 5 Days
Squashed commit of the following:

commit 290b3fbc5e18a2cc8694fb2d5f777952d971dfd6
Merge: fe5c67e62 2313eda12
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Dec 8 13:57:38 2020 +0300

    Merge branch 'master' into fix/2367

commit fe5c67e624280d7fc08192ed3e953a09ca10a9ee
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Mon Dec 7 16:44:41 2020 +0300

    - client: 2367 Show SSL Certificate Expire Banner in 5 Days
2020-12-08 14:08:39 +03:00
Eugene Burkov
2313eda123 Pull request: 2302 static ip
Merge in DNS/adguard-home from 2302-static-ip to master

Closes #2302.

Squashed commit of the following:

commit e62b7b033861f1c55f0d06811ca005b3934ddc5b
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 19:38:15 2020 +0300

    all: format changelog

commit 4127aa7630674ddcfe84f712e6c7c8d06b1cab9a
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 19:24:53 2020 +0300

    all: fix changelog typo

commit f8a432056d3682facae0cdec99d7d80a5c2bd9b5
Merge: b809a866e e4383189a
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 19:22:27 2020 +0300

    Merge branch 'master' into 2302-static-ip

commit b809a866e49147354f9c6952b2f958b6b56ad873
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 19:20:05 2020 +0300

    all: log changes

commit 248c35ba411af731d6eae755a901cdbc77980628
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 18:57:15 2020 +0300

    sysutil: use bufio.Scanner

commit 0dc19dd5c232fbe9552a2b0d846e048274d73a74
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 17:26:18 2020 +0300

    sysutil: fix linux tests

commit 91202d6763595cff187040516dd1db10a20762b7
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 17:15:29 2020 +0300

    sysutil: fix linux files

commit 40fbdbb95876322ebaeef1cbdaa8e3299b83ca7e
Merge: d9a43ffb6 9b963fc77
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 16:52:35 2020 +0300

    Merge branch 'master' into 2302-static-ip

commit d9a43ffb68a2ddbbcf185b69fc75aed139cd6919
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 16:49:22 2020 +0300

    sysutil: add main test

commit bfef89186035ab0423d23246d46511584c26534c
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Dec 7 16:21:59 2020 +0300

    sysutil: improve code quality

commit a5f57a373f736971fdeb0c03371da7c8138b3a82
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Dec 4 14:14:08 2020 +0300

    all: move system functionality from dhcpd package to sysutil.

commit 020b51864f85a39ca80e2b4e06faeb47cf318e11
Merge: 967e111a6 ab8defdb0
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Dec 2 14:53:43 2020 +0300

    Merge branch 'master' into 2302-static-ip

commit 967e111a663c18b5f4a87f3ae38d076f3ab6c200
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Dec 2 13:52:17 2020 +0300

    all: improve code quality
2020-12-07 19:48:24 +03:00
Ainar Garipov
e4383189a5 Pull request: all: fix github action result reporting
Merge in DNS/adguard-home from fix-gh-action-on-fail to master

Squashed commit of the following:

commit e8d48ee022772e0741de56dd955103efa27db0f6
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Dec 7 18:54:14 2020 +0300

    all: remove tests

commit ecdcea9c3a2ee3adda3aca57c761963678547cb2
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Dec 7 18:44:47 2020 +0300

    all: fix github action result reporting
2020-12-07 19:00:52 +03:00
Ainar Garipov
09b6eba7d9 Pull request: all: add dnscrypt support
Merge in DNS/adguard-home from 1361-dnscrypt to master

Closes #1361.

Squashed commit of the following:

commit 31b780c16cc6b68336b95275f62381cee2e822a2
Merge: c2ce98aaf 9b963fc77
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Dec 7 17:48:41 2020 +0300

    Merge branch 'master' into 1361-dnscrypt

commit c2ce98aaf24bd5ed5b5cd7da86aae093866ab34e
Merge: 3bf3d7b96 63e513e33
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Dec 4 19:32:40 2020 +0300

    Merge branch 'master' into 1361-dnscrypt

commit 3bf3d7b96530c86b54545462390562ebedc616b2
Merge: 5de451996 4134220c5
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Dec 3 17:31:59 2020 +0300

    Merge branch 'master' into 1361-dnscrypt

commit 5de451996d48ab3792ce78291068f72785303494
Merge: 60d7976f7 ab8defdb0
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Dec 2 19:07:56 2020 +0300

    Merge branch 'master' into 1361-dnscrypt

commit 60d7976f7c7ad0316751b92477a31f882c1e3134
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 30 19:11:14 2020 +0300

    all: add dnscrypt support
2020-12-07 17:58:33 +03:00
Ainar Garipov
9b963fc777 Pull request: all: fix lint and naming issues vol. 3
Merge in DNS/adguard-home from 2276-fix-lint-3 to master

Updates #2276.

Squashed commit of the following:

commit 6ee94cc6ed2a9762b70ef395b58b496434244b80
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Dec 7 15:55:45 2020 +0300

    all: fix lint and naming issues vol. 3
2020-12-07 16:04:53 +03:00
Ainar Garipov
7f29d4e546 Pull request: all: fix lint and naming issues vol. 2
Merge in DNS/adguard-home from 2276-fix-lint-2 to master

Updates #2276.

Squashed commit of the following:

commit 24760b9586bb31be134ef9518dbece485560b1a0
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Dec 7 14:39:50 2020 +0300

    all: fix lint and naming issues vol. 2
2020-12-07 15:38:05 +03:00
Ainar Garipov
a572876775 Pull request: all: fix lint and naming issues
Merge in DNS/adguard-home from 2276-fix-lint to master

Updates #2276.

Squashed commit of the following:

commit 433f44cc7b674a20ed60a9d29466ba888b3ef66e
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Dec 7 14:14:28 2020 +0300

    querylog: improve code and documentation

commit 851df97d2a87de5e7180a502055ee6f1a6defdca
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Dec 4 20:36:32 2020 +0300

    all: fix lint and naming issues
2020-12-07 14:32:06 +03:00
Ainar Garipov
63e513e33e Pull request: Add security to openapi spec
Merge in DNS/adguard-home from 2392-docs to master

Closes #2392.

* commit 'a86172fda426ab24dc5e82c84b380fe110f169fc':
  Add security to openapi spec
2020-12-04 19:30:11 +03:00
Ainar Garipov
dfd28b45ab Pull request: all: improve changelog
Merge in DNS/adguard-home from doc-fix to master

Squashed commit of the following:

commit 266940fce08a3694d771ab0a4643757ee1fa9c5f
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Dec 1 16:29:15 2020 +0300

    all: improve changelog
2020-12-04 19:16:01 +03:00
shopeonarope
a86172fda4 Add security to openapi spec 2020-12-04 09:15:48 -07:00
Eugene Burkov
8501a85292 Pull request: fix binding capability defining
Merge in DNS/adguard-home from 2391-updating-bug to master

Updates #2391.
Updates #2231.

Squashed commit of the following:

commit b321884e6ade04375dad3b981c2920500ff6f645
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Dec 4 16:54:20 2020 +0300

    all: log changes

commit 5aa0202a6f6d2abdfc37daee4b0d64f8cee8a62c
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Dec 4 14:42:10 2020 +0300

    sysutil: fix binding capability defining
2020-12-04 17:06:19 +03:00
Ainar Garipov
4134220c54 Pull request: all: try using a different plug for snap
Merge in DNS/adguard-home from 2228-different-plug to master

Squashed commit of the following:

commit 4b4da208e90fb00088a51c9abf599e6634c1ca1f
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Dec 2 20:24:03 2020 +0300

    all: try using a different plug for snap
2020-12-02 20:34:03 +03:00
Eugene Burkov
ab8defdb08 Pull request: fix zero-length ip addresses list bug
Merge in DNS/adguard-home from 2304-fix-panic to master

Updates #2304.

Squashed commit of the following:

commit bd7742eb144b46e16c751f98f6a4a6f15fbfa60e
Merge: 26313926e 7d1d87d6e
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Dec 2 14:29:37 2020 +0300

    Merge branch 'master' into 2304-fix-panic

commit 26313926e827d1f5ceb4eec744b814ce7c32663d
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Dec 2 14:09:16 2020 +0300

    all: add gitignore rule

commit 5a8521bd9b4014972107e8de352e20144f8187fb
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Dec 2 14:03:26 2020 +0300

    dhcpd: fix zero-length ip addresses list bug
2020-12-02 14:42:59 +03:00
Ainar Garipov
7d1d87d6ec Pull request: + client: 2358 Make the mobileconfig API parameterized and more robust
Merge in DNS/adguard-home from feature/2358 to master

Updates #2358.

Squashed commit of the following:

commit b2b91ee3b7303d20b94265d43d785e77260b2210
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Dec 1 14:54:35 2020 +0300

    + client: 2358 Make the mobileconfig API parameterized and more robust
2020-12-01 15:51:35 +03:00
Eugene Burkov
641db73a86 Pull request: 2231 autoupdate
Merge in DNS/adguard-home from 2231-autoupdate to master

Updates #2231.

Squashed commit of the following:

commit 4ee9148ee7a38f2759898302a2109aa982fb4ee9
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 30 19:08:14 2020 +0300

    sysutil: provide os-independent interface

commit 778097c5fdeb1dec94f4cfc6443d08f92d9db0ba
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 30 16:40:33 2020 +0300

    all: add sysutil package
2020-11-30 19:23:14 +03:00
Ainar Garipov
6e615c6eaa Pull request: querylog: resort buffers
Merge in DNS/adguard-home from 2293-log-sort to master

Updates #2293.

Squashed commit of the following:

commit f8961e5c52f82befe23ab1f7603a867243186498
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Sat Nov 28 17:19:15 2020 +0300

    all: document changes

commit c92c53307f1ed4a1c3196bdc19d23a775876b106
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Sat Nov 28 16:44:01 2020 +0300

    querylog: resort buffers
2020-11-30 13:32:58 +03:00
Ainar Garipov
60d72fb9c3 Pull request: all: update changelog
Merge in DNS/adguard-home from update-docs to master

Squashed commit of the following:

commit 177ce523ecc31405837eaad46d894bdce4cbee00
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 27 16:45:44 2020 +0300

    all: update changelog
2020-11-27 17:03:00 +03:00
Ainar Garipov
a6e18c4700 Pull request: dhcpd: wait for interfaces' ip addresses to appear
Merge in DNS/adguard-home from 2304-dncp-backoff to master

Updates #2304.

Squashed commit of the following:

commit c9bff8b27c6b031d43a7dd98152adcde7f49fff1
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 27 14:08:03 2020 +0300

    dhcpd: try for 5s instead of 10s

commit 983cf471832de0e7762b8b6e0a4ba9bb76ecadfc
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Nov 25 19:58:41 2020 +0300

    dhcpd: wait for interfaces' ip addresses to appear
2020-11-27 14:39:43 +03:00
Eugene Burkov
f9e4e7b024 Pull request: fix querylog bug
Merge in DNS/adguard-home from 2345-querylog-bug-fix to master

Closes #2345.

Squashed commit of the following:

commit 3ebd13e059242b041f3c4d77583a077f9e619b48
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 27 12:14:49 2020 +0300

    all: make changelog more humanly readable.

commit 3c9bb1be6aec113ebebdb40c976dbdb821f75638
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 26 14:43:14 2020 +0300

    all: log changes

commit 08c67da926aa085fabdec31c092285a351eb0e08
Merge: 650d2241e 96e83a133
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 26 14:42:18 2020 +0300

    Merge branch 'master' into 2345-querylog-bug-fix

commit 650d2241e02cf54a7e1f7a611199e770fd119953
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 26 14:02:57 2020 +0300

    querylog: fix json parsing bug
2020-11-27 12:33:25 +03:00
Ainar Garipov
96e83a133f Pull request: home: improve mobileconfig http api
Merge in DNS/adguard-home from 2358-mobileconfig to master

Updates #2358.

Squashed commit of the following:

commit ab3c7a75ae21f6978904f2dc237cb84cbedff7ab
Merge: fa002e400 b4a35fa88
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Nov 25 16:11:06 2020 +0300

    Merge branch 'master' into 2358-mobileconfig

commit fa002e40004656db08d32c926892c6c820fb1338
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Nov 25 15:19:00 2020 +0300

    home: improve mobileconfig http api
2020-11-25 18:09:41 +03:00
Eugene Burkov
b4a35fa887 Pull request: 2343 http server
Merge in DNS/adguard-home from 2343-http-server to master

Closes #2343.

Squashed commit of the following:

commit f4ebfc129484fc3489409069b3580eb70d71cc74
Merge: b13ec7002 36c7735b8
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 25 15:37:27 2020 +0300

    Merge branch 'master' into 2343-http-server

commit b13ec70024f24f6b68b13a1ec6f27c89535feaf8
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 25 15:31:36 2020 +0300

    all: record changes

commit ce44aac9d43e32db3f68746dec7a4f21b0a9dea4
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 25 14:00:45 2020 +0300

    home: set http servers timeouts

commit 7f3e7385d1df39b39713b8ec443da5d9374d0bc8
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 24 19:58:56 2020 +0300

    home: replace default ServeMux with custom one.
2020-11-25 15:50:59 +03:00
Ainar Garipov
36c7735b85 Pull request: dhcpd: fix interface ipv6 check
Merge in DNS/adguard-home from 2355-dhcpcheck-ipv6 to master

Updates #2335.

Squashed commit of the following:

commit 5ce1cc7bc244ba5dd4a065d47dec8884fa3d45e7
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Nov 25 14:03:24 2020 +0300

    dhcpd: fix loop exit condition

commit 32b4b946bfa30159326dc295fa1a2607b78172af
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Nov 25 13:26:50 2020 +0300

    dhcpd: fix interface ipv6 check
2020-11-25 14:26:26 +03:00
Ainar Garipov
284da7c91b Pull request: improve docs
Merge in DNS/adguard-home from update-docs to master

Squashed commit of the following:

commit 228c432adecf9f7927a692780a4762f1135b8cd6
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 20 18:18:10 2020 +0300

    improve docs
2020-11-25 12:02:21 +03:00
Ainar Garipov
e685d81c92 Pull request #847: dnsfilter: add $dnstype handling
Merge in DNS/adguard-home from 2337-dnstype to master

Updates #2102.
Updates #2337.

Squashed commit of the following:

commit ac4b7522c732c0bf8ee06539fd4c95b5dc1c87b8
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 24 17:50:33 2020 +0300

    dnsfilter: add $dnstype handling
2020-11-24 19:55:05 +03:00
Eugene Burkov
1cf9848044 Pull request: update snap core version
Merge in DNS/adguard-home from 2306-update-snap-core to master

Closes #2306.

Squashed commit of the following:

commit e02c083ede35e27e1273d3fa2c1d033ccd749718
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 23 16:15:59 2020 +0300

    all: update snap core version
2020-11-23 18:05:45 +03:00
Ainar Garipov
c129361e55 Pull request: 2305 limit message size
Merge in DNS/adguard-home from 2305-limit-message-size to master

Closes #2305.

Squashed commit of the following:

commit 6edd1e0521277a680f0053308efcf3d9cacc8e62
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 23 14:03:36 2020 +0300

    aghio: fix final inaccuracies

commit 4dd382aaf25132b31eb269749a2cd36daf0cb792
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 23 13:59:10 2020 +0300

    all: improve code quality

commit 060f923f6023d0e6f26441559b7023d5e5f96843
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 23 13:10:57 2020 +0300

    aghio: add validation to constructor

commit f57a2f596f5dc578548241c315c68dce7fc93905
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 19:19:26 2020 +0300

    all: fix minor inaccuracies

commit 93462c71725d3d00655a4bd565b77e64451fff60
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 19:13:23 2020 +0300

    home: make test name follow convention

commit 4922986ad84481b054479c43b4133a1b97bee86b
Merge: 1f5472abc 046ec13fd
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 19:09:01 2020 +0300

    Merge branch 'master' into 2305-limit-message-size

commit 1f5472abcfa7427f389825fc59eb4253e1e2bfb7
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 19:08:21 2020 +0300

    aghio: improve readability

commit 60dc706b093fa22bbf62f13b2341934364ddc4df
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 18:44:08 2020 +0300

    home: cover middleware with test

commit bedf436b947ca1fa4493af2fc94f1f40beec7c35
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 17:10:23 2020 +0300

    aghio: improved error informativeness

commit 682c5da9f21fa330fb3536bb1c112129c91b9990
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 13:37:51 2020 +0300

    all: limit readers for ReadAll dealing with miscellanious data.

commit 78c6dd8d90a0a43fe6ee3f9ed4d5fc637b15ba74
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 19 20:07:43 2020 +0300

    all: handle ReadAll calls dealing with request's bodies.

commit bfe1a6faf6468eb44515e2b0ecffa8c51f90b7e8
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 19 17:25:34 2020 +0300

    home: add middlewares

commit bbd1d491b318e6ba07f8af23ad546183383783a8
Merge: 7b77c2cad 62a8fe0b7
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 19 16:44:04 2020 +0300

    Merge branch 'master' into 2305-limit-message-size

commit 7b77c2cad03154177392460982e1d73ee2a30177
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 17 15:33:33 2020 +0300

    aghio: create package
2020-11-23 14:14:08 +03:00
Ainar Garipov
046ec13fdc Pull request: all: reformat yaml, add yaml formatting standard
Merge in DNS/adguard-home from 2297-yaml to master

Closes #2297.

Squashed commit of the following:

commit 85df3a38a14adb1965944ddf14b197c12a213057
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 20 17:52:22 2020 +0300

    all: improve HACKING.md

commit 079acdfe41cc12ab6aa13d7c28dcbf7b7b3c8380
Merge: 202ea078e 3045da174
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 20 17:50:34 2020 +0300

    Merge branch 'master' into 2297-yaml

commit 202ea078e29d88871a32ac6e668dfae6db802bab
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 12 20:25:42 2020 +0300

    all: reformat yaml, add yaml formatting standard
2020-11-20 18:06:07 +03:00
Eugene Burkov
3045da1742 Pull request: 2271 handle nolint
Merge in DNS/adguard-home from 2271-handle-nolint to master

Closes #2271.

Squashed commit of the following:

commit fde5c8795ac79e1f7d02ba8c8e369b5a724a000e
Merge: fc2acd898 642dcd647
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 20 17:12:28 2020 +0300

    Merge branch 'master' into 2271-handle-nolint

commit fc2acd89871de08c39e80ace9e5bb8a7acb7afba
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 17 11:55:29 2020 +0300

    dnsforward: fix test output strings

commit c4ebae6ea9c293bad239519c44ca5a6c576bb921
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 22:43:20 2020 +0300

    dnsfilter: make package pass tests

commit f2d98c6acabd8977f3b1b361987eaa31eb6eb9ad
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 20:05:00 2020 +0300

    querylog: make decoding pass tests

commit ab5850d24c50d53b8393f2de448cc340241351d7
Merge: 6ed2066bf 8a9c6e8a0
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 19:48:31 2020 +0300

    Merge branch 'master' into 2271-handle-nolint

commit 6ed2066bf567e13dd14cfa16fc7b109b59fa39ef
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 18:13:45 2020 +0300

    home: fix tests naming

commit af691081fb02b7500a746b16492f01f7f9befe9a
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 12:15:49 2020 +0300

    home: impove code quality

commit 2914cd3cd23ef2a1964116baab9187d89b377f86
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 11 15:46:39 2020 +0300

    * querylog: remove useless check

commit 9996840650e784ccc76d1f29964560435ba27dc7
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 11 13:18:34 2020 +0300

    * all: fix noticed defects

commit 2b15293e59337f70302fbc0db81ebb26bee0bed2
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 20:15:53 2020 +0300

    * stats: remove last nolint directive

commit b2e1ddf7b58196a2fdbf879f084edb41ca1aa1eb
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 18:35:41 2020 +0300

    * all: remove another nolint directive

commit c6fc5cfcc9c95ab9e570a95ab41c3e5c0125e62e
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 18:11:28 2020 +0300

    * querylog: remove nolint directive

commit 226ddbf2c92f737f085b44a4ddf6daec7b602153
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 16:35:26 2020 +0300

    * home: remove nolint directive

commit 2ea3086ad41e9003282add7e996ae722d72d878b
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 16:13:57 2020 +0300

    * home: reduce cyclomatic complexity of run function

commit f479b480c48e0bb832ddef8f57586f56b8a55bab
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 15:35:46 2020 +0300

    * home: use crypto/rand instead of math/rand

commit a28d4a53e3b930136b036606fc7e78404f1d208b
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 14:11:07 2020 +0300

    * dnsforward: remove gocyclo nolint directive

commit 64a0a324cc2b20614ceec3ccc6505e960fe526e9
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 10 11:45:49 2020 +0300

    all *: remove some nolint directives

    Updates #2271.
2020-11-20 17:32:41 +03:00
Ainar Garipov
642dcd647c Pull request: all: update backend tools and dependencies
Merge in DNS/adguard-home from 2275-update-tools to master

Squashed commit of the following:

commit 4de1cf91dc7accabeb2103d3c8ec424bee2a89ce
Merge: 06b302c62 62a8fe0b7
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 19 16:22:30 2020 +0300

    Merge branch 'master' into 2275-update-tools

commit 06b302c62958aa8ab4a9da423a32cd71037d58d7
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 13 11:29:19 2020 +0300

    all: update backend tools and dependencies
2020-11-20 13:44:21 +03:00
Ainar Garipov
62a8fe0b73 Pull request: home: add a patch against the global pprof handlers
Merge in DNS/adguard-home from 2336-pprof to master

Closes #2336.

Squashed commit of the following:

commit 855e133b17da4274bef7dec5c3b7db73486d97db
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 19 14:49:22 2020 +0300

    home: add a patch against the global pprof handlers
2020-11-19 14:59:30 +03:00
Ainar Garipov
b1c71a1284 Pull request: all: prepare for v0.104.2
Merge in DNS/adguard-home from prepare-release to master

Squashed commit of the following:

commit cf4cad216fa259b260bc9cfbd99938979b10623c
Merge: 5434ab5c1 4690229d8
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 19 13:08:50 2020 +0300

    Merge branch 'master' into prepare-release

commit 5434ab5c178942e8db9e99758c86d22e977d092f
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 19 13:01:43 2020 +0300

    all: prepare for v0.104.2
2020-11-19 13:14:52 +03:00
Ainar Garipov
4690229d81 Pull request: querylog: use better error signaling
Merge in DNS/adguard-home from 2325-querylog-suffering to master

Closes #2325.

Squashed commit of the following:

commit 90388050ed495286cdfed6574dd438abd4a33baa
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 19 12:37:00 2020 +0300

    all: changelog

commit bbdeabbb550c7e98f579e2a68c71de7a66624203
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 19 12:33:21 2020 +0300

    querylog: improve error reporting

commit 807b23aa74d0e39f5ef51910e5b91c9b95a8c341
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Nov 18 19:39:22 2020 +0300

    querylog: improve docs

commit 65a8f4f3323192c872b3389d2b3420e072a01297
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Wed Nov 18 19:36:28 2020 +0300

    querylog: use better error signaling
2020-11-19 12:53:31 +03:00
Eugene Burkov
de257b73aa Pull request: update golangci-lint and golangci-lint-actions versions
Merge in DNS/adguard-home from linter-version-update to master

Squashed commit of the following:

commit 3ab2cb198dd924d86f5e6b92d101846acc747e9b
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 18 16:42:13 2020 +0300

    all: update golangci-lint and golangci-lint-actions versions
2020-11-18 18:42:26 +03:00
Eugene Burkov
40614d9a7b Pull request: querylog bug fix
Merge in DNS/adguard-home from 2324-querylog-bug-fix to master

Closes #2324.

Squashed commit of the following:

commit fdd584a218e1edc3e45ab5b00ceed0a3be681e32
Merge: 8103f9e42 f2eda6d19
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 18 15:35:42 2020 +0300

    Merge branch 'master' into 2324-querylog-bug-fix

commit 8103f9e42a398f43682ee30d09b3afdab0e9e177
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Wed Nov 18 14:28:29 2020 +0300

    querylog: fix the file ordering bug

commit 2c4e8fcc5b8593be1614480508dfd600fc676e64
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 17 20:57:45 2020 +0300

    querylog: wrap errors to clarify error trace

commit 3733062b494817696e4443f153774bb01cea1b06
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 17 18:55:17 2020 +0300

    querylog: fix logger output bug
2020-11-18 15:43:28 +03:00
Ainar Garipov
f2eda6d192 Pull request: - client: 2326 Fix dhcp bug interfaces bug
Merge in DNS/adguard-home from fix/2326 to master

Closes #2326.

Squashed commit of the following:

commit 31f24d733eda747e161ddd44055591dbbc0752d7
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Tue Nov 17 18:16:19 2020 +0300

    - client: 2326 Fix dhcp bug interfaces bug
2020-11-17 19:56:58 +03:00
Eugene Burkov
8a9c6e8a02 Pull request: cover with tests
Merge in DNS/adguard-home from 2271-cover-with-tests to master

Updates #2271.

Squashed commit of the following:

commit db6440efe05171bc15367a2996521848ca348053
Merge: db7fa726b bf4c256c7
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 19:23:09 2020 +0300

    Merge branch 'master' into 2271-cover-with-tests

commit db7fa726bb91b08ec7aaa6c0c818c88b5feb87cd
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 18:26:51 2020 +0300

    all: clean dependencies sum

commit b8dc6078c4bcc0de1b7e9073832de122f6fe38a4
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 16:46:00 2020 +0300

    testutil: improve code quality

commit 001b7194682b1f00aa54dc5a28236faed5a5b02d
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 16:29:49 2020 +0300

    testutil: enhance functionality

commit f6ccd91a4df6c56778eab8ae50e88e3818b20dd3
Merge: 43fa2eefb 6358240e9
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 15:57:37 2020 +0300

    Merge branch 'master' into 2271-cover-with-tests

commit 43fa2eefbc10ef361603cacc1ca12092b12a057a
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 14:55:15 2020 +0300

    querylog: replace fake log with real in tests

commit b95bee7565a14a02c80c78131b3ced224663dd8a
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 12:38:59 2020 +0300

    dnsfilter: replace thoughtless declaration with idiomatic one

commit a210b1586092e7ae91a9e67c972fa2d2f6baded6
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 13 19:00:25 2020 +0300

    all: refresh golibs dependencies

commit 4ff97bd1ade6c80e274ff5716e44df4eba55bdd9
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 13 18:38:47 2020 +0300

    all: remove std log

commit 542dbda10fefce9f46d15489712b163d919b1291
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 13 13:46:39 2020 +0300

    querylog: improve test logic and readability

commit 796d402385925e8e62a1b4c7bf56e4ceec22418c
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 12 19:06:42 2020 +0300

    all: improve code quality

commit e81894c11ef15b0453e8e5297f1349936a32f9dd
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 12 18:32:30 2020 +0300

    all: cover with tests

commit 252d81fc8a50a91b02cf0f6f35cc22178a2a4d90
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 12 17:32:01 2020 +0300

    all: cover with tests
2020-11-16 19:45:31 +03:00
Ainar Garipov
bf4c256c72 Pull request: return 501 when we don't support features
Merge in DNS/adguard-home from 2295-dhcp-windows to master

Updates #2295.

Squashed commit of the following:

commit 3b00a90c3d9bc33e9af478e4062c0f938d4f327d
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 16 16:45:43 2020 +0300

    all: use the 501 handlers instead of the real ones, revert other changes

commit 0a3b37736a21abd6181e0d28c32069e8d7a576d0
Merge: 45feba755 6358240e9
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 16 15:59:15 2020 +0300

    Merge branch 'master' into 2295-dhcp-windows and update

commit 45feba755dde37e43cc8075b896e1576157341e6
Merge: cd987d8bc a19523b25
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 16 15:51:16 2020 +0300

    Merge branch 'master' into 2295-dhcp-windows

commit cd987d8bc2cd524b7454d9037b595069714645f9
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 13 15:55:23 2020 +0300

    all: improve tests and refactor dhcp checking code even more

commit 3aad675443f325b5909523bcc1c987aa04ac61d9
Merge: 70c477e61 09196118e
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 13 14:44:43 2020 +0300

    Merge branch 'master' into 2295-dhcp-windows

commit 70c477e61cdc1237603918f1c44470c1549f1136
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 13 14:34:06 2020 +0300

    home: fix dhcpd test on windows

commit e59597d783fb9304e63f94eee2b5a5d67a5b2169
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 13 13:38:25 2020 +0300

    all: mention the feature in the changelog

commit 5555c8d881b1c20b5b0a0cb096a17cf56e209c06
Merge: c3b6a5a93 e802e6645
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 13 13:35:35 2020 +0300

    Merge branch 'master' into 2295-dhcp-windows

commit c3b6a5a930693090838eb1ef9f75a09b5b223ba6
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 12 20:37:09 2020 +0300

    util: fix comment

commit ed92dfdb5d3a6c4ba5d032cbe781e7fd87882813
Author: ArtemBaskal <asbaskal@miem.hse.ru>
Date:   Thu Nov 12 20:24:14 2020 +0300

    Adapt client

commit e6f0494c20a4ad5388492af9091568eea5c6e2d6
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 12 13:35:25 2020 +0300

    return 501 when we don't support features
2020-11-16 19:01:12 +03:00
Eugene Burkov
6358240e9b Pull request: 2273 clean tests output
Merge in DNS/adguard-home from 2273-clean-tests-output to master

Closes #2273.

Squashed commit of the following:

commit 7571a33fc1f76300bd256578b3afa95338e399c4
Merge: f17df0f9c a19523b25
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 15:45:30 2020 +0300

    Merge branch 'master' into 2273-clean-tests-output

commit f17df0f9ce2a3ed25db33fbc6a2e7cabd33f657b
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 15:35:42 2020 +0300

    home: move build constraint on top line

commit 3717c8ef5a51f9dcaa7e524bfa7b0f1d90bec93d
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 15:24:50 2020 +0300

    all: add improvements to changelog

commit de6d5afe39d74a3c3d3e0bbe6d0e09aea0214d56
Merge: 43d4f7acf 394fc5a9d
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 15:04:38 2020 +0300

    Merge branch 'master' into 2273-clean-tests-output

commit 43d4f7acf188e810aa7277cb6479110c9842e8be
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 13:38:13 2020 +0300

    dnsfilter: remove redundant test logging

commit 7194c1413006b8f52fc454e89ab052bf52e4e517
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Mon Nov 16 12:19:14 2020 +0300

    testutil: improve comments

commit 9f17ab08e287fa69ce30d9e7eec8ea8880f87716
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Sat Nov 14 01:22:08 2020 +0300

    nclient4: fix wrong function name

commit f355749149b2a4485792ba2bdcbc0bb4b629d726
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Sat Nov 14 01:07:22 2020 +0300

    testutil: fix comments and naming

commit f8c50a260bfae08d594a7f37d603941d3680a45e
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 13 14:09:50 2020 +0300

    testutil: create a package and include it

commit f169cdc4084b719de65aa0cdc65200b48785322e
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 12 20:15:58 2020 +0300

    agherr: discard loggers output

commit 360e736b5a2a30f2c5350448234f14b841e3ea27
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 12 20:09:55 2020 +0300

    all: replace default log writer with ioutil.Discard

    Closes #2273.
2020-11-16 15:52:05 +03:00
Artem Baskal
a19523b258 - client: 2237 Update graph drawing library
Squashed commit of the following:

commit 980e9c2f37640ee204ce0365f6c3bcc74741cc7c
Merge: cb4cae82b 394fc5a9d
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Mon Nov 16 14:52:26 2020 +0300

    Merge branch 'master' into fix/2237

commit cb4cae82b5b605894d123d6442ea23b24cc90c12
Author: ArtemBaskal <asbaskal@miem.hse.ru>
Date:   Thu Nov 12 12:07:49 2020 +0300

    minor

commit 5c07dac48067b4ed201aeb59a44e8592ed2b0b67
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Nov 11 19:47:38 2020 +0300

    minor

commit 53f60762e520427a080bdfcd94b08b9ed3a63ca4
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Nov 11 19:06:06 2020 +0300

    Adapt mobile version

commit 7659ac733ce4606f6fadf30e0eaddbeefd6095d6
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Nov 11 18:31:53 2020 +0300

    Fix empty graph offset, return background area below graph

commit 45499adb20a90024dba4b0b4e44ad4f01a1782d5
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Nov 10 17:46:47 2020 +0300

    - client: 2237 Update graph drawing library
2020-11-16 15:22:30 +03:00
Artem Baskal
394fc5a9d8 - client: 2300 Fix block client bug when clients values are empty in config
Close #2300

Squashed commit of the following:

commit 7222a03ebf3bf8aa93fbd819227e1d5caacce92b
Merge: 91b06b10e 09196118e
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Mon Nov 16 12:46:26 2020 +0300

    Merge branch 'master' into fix/2300

commit 91b06b10e5d46472c9474032d0ae11dc8d0e4609
Author: Artem Baskal <a.baskal@adguard.com>
Date:   Fri Nov 13 15:12:31 2020 +0300

    - client: 2300 Fix block client bug when clients values are empty in config
2020-11-16 12:56:55 +03:00
Ainar Garipov
09196118e9 Pull request: dhcpd: fix possible infinite loop, set timeouts better
Merge in DNS/adguard-home from 2301-dhcp-check to master

Closes #2301.

Squashed commit of the following:

commit bf5c31b8592f909a372fcdaebacc491d310cc3e6
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 13 14:28:54 2020 +0300

    dhcpd: fix possible infinite loop, set timeouts better
2020-11-13 14:40:22 +03:00
Ainar Garipov
e802e6645e Pull request: all: add a changelog and a developer guide
Merge in DNS/adguard-home from 2294-changelog to master

Closes #2294.

Squashed commit of the following:

commit 25ffc9786d23d83448b916a81f0b20135b051169
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 12 19:40:48 2020 +0300

    all: add a changelog and a developer guide
2020-11-13 13:01:07 +03:00
Ainar Garipov
13f708b483 Pull request: * querylog: fix end of log handling
Merge in DNS/adguard-home from 2229-query-log to master

Closes #2229.

Squashed commit of the following:

commit 32508a3f3b1e098869e1649a2774f1f17d14d41f
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 10 16:51:25 2020 +0300

    * querylog: add test

commit 774159cc313a0284a8bb8327489671e5d7a3e4eb
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 10 15:26:26 2020 +0300

    * querylog: better errors

commit 27b13a4dcaff9e8f9b08aec81c0c03f62ebd3fa5
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 10 15:18:51 2020 +0300

    * querylog: fix end of log handling
2020-11-10 19:00:55 +03:00
Ainar Garipov
979874c92b Pull request: * all: update dnsproxy
Merge in DNS/adguard-home from update-dnsproxy to master

Closes #2252.

Squashed commit of the following:

commit e66b2a0a2555d8ae75b42fd64b83b654810a65c2
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 10 11:56:22 2020 +0300

    * all: update dnsproxy
2020-11-10 15:19:25 +03:00
Ainar Garipov
3cc5bf210d Pull request: * dhcpd: send secondary dns as well
Merge in DNS/adguard-home from 1708-secondary-dns to master

Updates #1708.

Squashed commit of the following:

commit 4529452e31131763f00c9c834cc95638f1a3d142
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 9 18:12:57 2020 +0300

    * dhcpd: send secondary dns as well
2020-11-09 19:27:04 +03:00
Ainar Garipov
1e583315a8 Pull request: * all: update dnsproxy
Merge in DNS/adguard-home from update-dnsproxy to master

Squashed commit of the following:

commit 6ed03c2131b93e3882e8f820e110696a41223267
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Mon Nov 9 13:13:36 2020 +0300

    * all: update dnsproxy
2020-11-09 14:44:21 +03:00
Andrey Meshkov
ee8a033472 Merge branch 'master' of git://github.com/gontazaka/AdGuardHome into gontazaka-master 2020-11-09 11:55:45 +03:00
Andrey Meshkov
b85c0b3bf7 Merge branch 'docker-workflow' of git://github.com/crazy-max/AdGuardHome into crazy-max-docker-workflow 2020-11-09 11:28:27 +03:00
CrazyMax
859ed209a0 Update docker workflow 2020-11-08 23:06:52 +01:00
CrazyMax
c6a6f05b1b Use zoneinfo from Go 2020-11-08 22:57:47 +01:00
gontazaka
5bf330bf14 Fix link address 2020-11-07 13:28:19 +09:00
Ainar Garipov
eefa553100 Pull request: - isdelve: remove unused package
Merge in DNS/adguard-home from remove-isdelve to master

Squashed commit of the following:

commit aa305fa46713b39a8299754e8fd557cbadcb7cc3
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 6 18:06:07 2020 +0300

    - isdelve: remove unused package
2020-11-06 20:20:15 +03:00
Ainar Garipov
298f74ba81 Pull request: * all: allow multiple hosts in reverse lookups
Merge in DNS/adguard-home from 2269-multiple-hosts to master

For #2269.

Squashed commit of the following:

commit f8ae452540b106f2d5b130b8edb08c4e76b003f4
Merge: 8dd06f7cc 3e1f92225
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Fri Nov 6 17:28:12 2020 +0300

    Merge branch 'master' into 2269-multiple-hosts

commit 8dd06f7cca27ec32a4690e2673603b166f82af0a
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 5 20:28:33 2020 +0300

    * all: allow multiple hosts in reverse lookups
2020-11-06 17:34:40 +03:00
Eugene Burkov
3e1f922252 Pull request:* all: fix all staticcheck simplification and unused warnings
Merge in DNS/adguard-home from 2270-fix-s-u-warnings to master

Squashed commit of the following:

commit 03e0f78bd471057007c2d4042ee26eda2bbc9b29
Merge: 50dc3ef5c 7e16fda57
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Nov 6 11:54:09 2020 +0300

    Merge branch 'master' into 2270-fix-s-u-warnings

commit 50dc3ef5c44a5fdc941794c26784b0c44d7b5aa0
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 5 19:48:54 2020 +0300

    * all: improve code quality

commit d6d804f759ce3e47154a389b427550e72c4b9090
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 5 18:03:35 2020 +0300

    * all: fix all staticcheck simplification and unused warnings

    Closes #2270.
2020-11-06 12:15:08 +03:00
Andrey Meshkov
7e16fda57b Change the default for max_goroutines #2257
Closes #2257

* commit '84ca2f58a8b4379a3ee6d0bd9f754be20a3ecaea':
  Added a more detailed comment
  Change the default for max_goroutines #2257
2020-11-05 21:14:05 +03:00
Ainar Garipov
11e794f554 Pull request: * .goreleaser: use a different snap plug for cap_net_raw
Merge in DNS/adguard-home from 2228-new-plug to master

For #2228.

Squashed commit of the following:

commit a073c8e033b1dfbdbd3fff8d773c6a2406b6211b
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 5 17:02:56 2020 +0300

    * .goreleaser: use a different snap plug for cap_net_raw
2020-11-05 17:52:03 +03:00
Eugene Burkov
2baa33fb1f Pull request:* all: remove github.com/joomcode/errorx dependency
Merge in DNS/adguard-home from 2240-removing-errorx-dependency to master

Squashed commit of the following:

commit 5bbe0567356f06e3b9ee5b3dc38d357b472cacb1
Merge: a6040850d 02d16a0b4
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 5 14:32:22 2020 +0300

    Merge branch 'master' into 2240-removing-errorx-dependency

commit a6040850da3cefb131208097477b0956e80063fb
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 5 14:23:36 2020 +0300

    * dhcpd: convert some abbreviations to lowercase.

commit d05bd51b994906b0ff52c5a8e779bd1f512f4bb7
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Thu Nov 5 12:47:20 2020 +0300

    * agherr: last final fixes

commit 164bca55035ff44e50b0abb33e129a0d24ffe87c
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 3 19:11:10 2020 +0300

    * all: final fixes again

commit a0ac26f409c0b28a176cf2861d52c2f471b59484
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 3 18:51:39 2020 +0300

    * all: final fixes

commit 6147b02d402b513323b07e85856b348884f3a088
Merge: 9fd3af1a3 62cc334f4
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 18:26:03 2020 +0300

    Merge branch 'master' into 2240-removing-errorx-dependency

commit 9fd3af1a39a3189b5c41315a8ad1568ae5cb4fc9
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 18:23:08 2020 +0300

    * all: remove useless helper

commit 7cd9aeae639762b28b25f354d69c5cf74f670211
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 17:19:26 2020 +0300

    * agherr: improved code tidiness

commit a74a49236e9aaace070646dac710de9201105262
Merge: dc9dedbf2 df34ee5c0
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 16:54:29 2020 +0300

    Merge branch 'master' into 2240-removing-errorx-dependency

commit dc9dedbf205756e3adaa3bc776d349bf3d8c69a5
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 16:40:08 2020 +0300

    * agherr: improve and cover by tests

commit fd6bfe9e282156cc60e006cb7cd46cce4d3a07a8
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 14:06:27 2020 +0300

    * all: improve code quality

commit ea00c2f8c5060e9611f9a80cfd0e4a039526d0c4
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 13:03:57 2020 +0300

    * all: fix linter style warnings

commit 8e75e1a681a7218c2b4c69adfa2b7e1e2966f9ac
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Tue Nov 3 12:29:26 2020 +0300

    * all: remove github.com/joomcode/errorx dependency

    Closes #2240.
2020-11-05 15:20:57 +03:00
Ainar Garipov
02d16a0b40 Pull request: * home, openapi: improve docs and responses
Merge in DNS/adguard-home from 2243-better-docs to master

Closes #2243.

Squashed commit of the following:

commit 26c655a0e4339528870633c2cdf39c3b5c486b1d
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Thu Nov 5 12:51:43 2020 +0300

    * openapi: improve more

commit dc0ab9857787d14eb0686814a4f3c8f917698bee
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 3 20:40:32 2020 +0300

    * home, openapi: improve docs and responses
2020-11-05 13:59:57 +03:00
Andrey Meshkov
84ca2f58a8 Added a more detailed comment 2020-11-05 13:26:13 +03:00
Andrey Meshkov
bc20917840 Change the default for max_goroutines #2257 2020-11-04 13:41:40 +03:00
Artem Baskal
62cc334f46 + client: 2241 Add DNS-over-QUIC string
Close #2241

* commit '3d19f91bede4aee8ee44a4b0a31c4c7b91405785':
  + client: 2241 Add DNS-over-QUIC string
2020-11-03 18:05:14 +03:00
Ainar Garipov
d398e4b01c Pull request: 2250 config reload fix
Merge in DNS/adguard-home from 2250-config-reload-fix to master

Closes #2250.

Squashed commit of the following:

commit 928f28a0732c14f24576de02d0a9fcd34f484c63
Author: Vladislav Alekseev <vldrus@gmail.com>
Date:   Mon Nov 2 02:53:51 2020 +0300

    TLS: use correct config on reload after receiving SIGHUP

commit 9e10d84cf9fbf3298d7f426903dfa4f20f39024b
Author: Vladislav Alekseev <vldrus@gmail.com>
Date:   Mon Nov 2 02:52:32 2020 +0300

    Service: reload config (-s reload): fix for parsing application pid if 'ps' return space padded value
2020-11-03 17:44:03 +03:00
ArtemBaskal
3d19f91bed + client: 2241 Add DNS-over-QUIC string 2020-11-03 17:32:56 +03:00
Ainar Garipov
df34ee5c09 Pull request: * dnsforward, querylog: set client_proto for logs correctly
Merge in DNS/adguard-home from 2241-doq-logs to master

Squashed commit of the following:

commit a15cab05358e3c0b97f8257f8b9628fa590e7e7d
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 3 14:22:25 2020 +0300

    * all: update dnsproxy

commit 5fb0919a7528dc6ee7a433a8096b550f3691771c
Merge: b22b1dff4 64c1a68fb
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 3 14:22:15 2020 +0300

    Merge branch 'master' into 2241-doq-logs

commit b22b1dff43e541d77160fd5c234483bbf0f6d8de
Author: Ainar Garipov <A.Garipov@AdGuard.COM>
Date:   Tue Nov 3 12:37:23 2020 +0300

    * dnsforward, querylog: set client_proto for logs correctly
2020-11-03 15:39:55 +03:00
Artem Baskal
64c1a68fb9 - client: 2254 Fix textarea with comments fonts
Close #2254

* commit 'd747185b45e9300b771c69dd27a2757fc40b52f6':
  - client: 2254 Fix textarea with comments fonts
2020-11-03 12:36:57 +03:00
ArtemBaskal
d747185b45 - client: 2254 Fix textarea with comments fonts 2020-11-03 12:07:01 +03:00
Eugene Burkov
8afdc049ef Pull request:* all: replace our pprof fork with net/http/pprof
Merge in DNS/adguard-home from 2239-remove-pprof-fork to master

Squashed commit of the following:

commit eefcaae015292768b26a70a27d352d3e2aa3f9ef
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Oct 30 20:00:05 2020 +0300

    * all: replace our pprof fork with net/http/pprof

    Closes #2239.
2020-11-02 16:32:33 +03:00
Eugene Burkov
812b43a4b3 Pull request:* all: fix all staticcheck SA warnings
Merge in DNS/adguard-home from 2238-fix-static-analisys-warnings to master

Squashed commit of the following:

commit 721ca6fa1cbfdfe9d414e6ed52fec4a64653fb52
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Oct 30 15:48:10 2020 +0300

    * all: fix all staticcheck SA warnings

    Closes #2238.
2020-10-30 19:18:51 +03:00
Ainar Garipov
ae8de95d89 Pull request: * all: move internal Go packages to internal/
Merge in DNS/adguard-home from 2234-move-to-internal to master

Squashed commit of the following:

commit d26a288cabeac86f9483fab307677b1027c78524
Author: Eugene Burkov <e.burkov@adguard.com>
Date:   Fri Oct 30 12:44:18 2020 +0300

    * all: move internal Go packages to internal/

    Closes #2234.
2020-10-30 13:32:02 +03:00
Ainar Garipov
df3fa595a2 Pull request: * home: improve naming in mobileconfig handlers
Merge in DNS/adguard-home from 2235-mobileconfig-server-name to master

* commit '98f6843aab8ff69606f44f6a5721d5f2a5707a0f':
  * home: improve naming in mobileconfig handlers
2020-10-30 12:41:34 +03:00
Ainar Garipov
98f6843aab * home: improve naming in mobileconfig handlers
Updates #2235.
2020-10-29 19:42:25 +03:00
Ainar Garipov
9761f13399 Pull request: .goreleaser: add a new snap plug to bind to devices
Merge in DNS/adguard-home from 2228-linux-caps to master

* commit 'a376bf915a397e71763bed9e86ab2767d5467e85':
  .goreleaser: add a new snap plug to bind to devices
2020-10-29 18:57:38 +03:00
Ainar Garipov
a376bf915a .goreleaser: add a new snap plug to bind to devices
Closes #2228.
2020-10-29 17:27:14 +03:00
Ainar Garipov
da5c1ebbbf Pull request: * querylog: use the vanilla errors package
Merge in DNS/adguard-home from remove-pkg-errors to master

* commit '40ebccaab415f957c8234ad2c3a9615225ddae68':
  * querylog: use the vanilla errors package
2020-10-29 12:22:33 +03:00
Ainar Garipov
40ebccaab4 * querylog: use the vanilla errors package 2020-10-28 19:34:29 +03:00
Andrey Meshkov
d1e55c31af Update locales 2020-10-28 14:19:29 +03:00
Andrey Meshkov
6b64bfac00 * (ui): update translations 2020-10-22 23:36:18 +03:00
Andrey Meshkov
e37ccdbb70 - (dnsforward): fix ipset race
https://github.com/AdguardTeam/AdGuardHome/pull/2182#issuecomment-707807737
2020-10-22 23:31:51 +03:00
Andrey Meshkov
0b43bf4cd9 * (dnsfilter): urlfilter v0.12.3 - $client modifier and CIDR 2020-10-22 23:26:35 +03:00
Andrey Meshkov
fe87bdc9cd * (documentation): added privacy to readme
Closes: #1960
2020-10-22 23:21:10 +03:00
Andrey Meshkov
f75a0f8719 - (ui): wrong link
Closes: #2209
2020-10-22 18:33:51 +03:00
Andrey Meshkov
2ba85ba8e1 - (ui): API requests don't work when reverse proxy is in use
Closes: #2197
2020-10-22 18:29:52 +03:00
Andrey Meshkov
052a9ae196 - (home): test upstream shouldn't fail with upstreams file
Closes: #2212
2020-10-22 18:20:16 +03:00
Artem Baskal
32b24ce093 + dnsfilter, client: Add qq to blocked services
Squashed commit of the following:

commit ffb2a1065fc9edd2b840cccbb96a0a2c1334bf00
Merge: 0f966d5b 3acfaa16
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Oct 20 11:19:39 2020 +0300

    Merge branch 'master' into dnsfilter/update_blocked_services

commit 0f966d5b00f96c93bf778e944d68f62ebcdeaa50
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Oct 19 20:47:22 2020 +0300

    Add qq icon to blocked services

commit f9c42551bbb442f83c6354314fc42ea174aacf4b
Author: ifurther <55025025+ifurther@users.noreply.github.com>
Date:   Sun Jun 7 12:19:05 2020 +0000

    Add qq to blocked services
2020-10-20 11:26:39 +03:00
Andrey Meshkov
3acfaa162f Pull reques: dnsfilter/blocked_services: update netflix with nflxso.net SLD
Merge in DNS/adguard-home from blocked-service-netflix-nflxso to master

* commit 'e0ddb1c0eacb6b60e61a6bac9e028ffc64debf04':
  dnsfilter/blocked_services: update netflix with nflxso.net SLD
2020-10-15 11:23:08 +03:00
Andrey Meshkov
345a97c4af Pull request: + client: Update dns examples
Merge in DNS/adguard-home from client/update-dns-examples to master

* commit 'a7cf717116a78dbbad086ec149584c7f3c45d33f':
  Update DNS
  Update DNS examples
2020-10-15 11:22:49 +03:00
KizunaH
a7cf717116 Update DNS 2020-10-14 18:59:42 +03:00
KizunaH
8315b46f30 Update DNS examples 2020-10-14 18:59:42 +03:00
David Sheets
e0ddb1c0ea dnsfilter/blocked_services: update netflix with nflxso.net SLD 2020-10-13 16:42:43 +01:00
Andrey Meshkov
3a96fdd01b Merge: * (home): update locales
Merge in DNS/adguard-home from update_locales to master

Squashed commit of the following:

commit 2650ebe94614e986a02ca66aab0cca9f6b618eda
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Oct 12 19:14:05 2020 +0300

    Rename MacOs to macOs in setup_dns_privacy_4 string

commit c6d8b49be0bfd13f48b4a5a40323bcaed33a9cab
Author: Andrey Meshkov <am@adguard.com>
Date:   Mon Oct 12 18:41:23 2020 +0300

    Update locales

commit 850e87fcc9a40c6560a744363394fe8db351549b
Merge: 5dd23ebe 56e7b2f6
Author: Andrey Meshkov <am@adguard.com>
Date:   Mon Oct 12 18:27:38 2020 +0300

    fix filters string

commit 5dd23ebe06809f73760b0b54bae78659e6581837
Author: Andrey Meshkov <am@adguard.com>
Date:   Mon Oct 12 17:46:26 2020 +0300

    Update translations

commit 03bf548da40fa7881c26a16f8e7f5793a0d970af
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Oct 12 11:48:42 2020 +0300

    Update link in filters_block_toggle_hint locale

commit 4372229c8c6f61c6efa1322866c4bbce73e29acd
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 9 13:25:15 2020 +0300

    Update locales

commit 7c9361fe294f4cb691798b39583e25b8f4e3879e
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 8 17:59:04 2020 +0300

    Update locales

commit 4b36ba65815b311b81c94cb9b6c4890cc8517780
Merge: 0b9adc88 b97f6b3f
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 8 17:37:45 2020 +0300

    Merge branch 'fix/2159' into update_locales

commit 0b9adc88ac7cc0612712d2095a116e0bec48f5bb
Merge: 1a3d98d3 51819408
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 8 17:37:26 2020 +0300

    Merge branch 'update_locales' of ssh://bit.adguard.com:7999/dns/adguard-home into update_locales

commit b97f6b3f265c4ec8d55e60ef52c316b510e19aa0
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 8 16:35:16 2020 +0300

    Update CheckboxField props

commit 8c4545fc554749d7aaa836cc496b2026073dfc39
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 8 16:27:17 2020 +0300

    - client: 2159 Fix general settings link to filters

commit 518194088aaa9be40b2b43a2fa3097273d3ecfd8
Author: Andrey Meshkov <am@adguard.com>
Date:   Thu Oct 8 12:10:58 2020 +0300

    * (home): update locales
2020-10-12 19:28:12 +03:00
Artem Baskal
56e7b2f6b3 - client: 2159 Fix general settings link to filters
Close #2159

Squashed commit of the following:

commit 5b6b15b43cafd0cbae908b7bf6f0a571add85f51
Merge: b97f6b3f 20226edb
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Oct 12 17:52:56 2020 +0300

    Merge branch 'master' into fix/2159

commit b97f6b3f265c4ec8d55e60ef52c316b510e19aa0
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 8 16:35:16 2020 +0300

    Update CheckboxField props

commit 8c4545fc554749d7aaa836cc496b2026073dfc39
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 8 16:27:17 2020 +0300

    - client: 2159 Fix general settings link to filters
2020-10-12 18:08:22 +03:00
Artem Baskal
20226edbe3 - client: 2152 Do not show dashboard buttons on mobile screen, fix buttons on DNS block/allow lists pages
#2152

* commit '72ab51bce0dd0b892acc797689f0cd32d779fd9f':
  - client: 2152 Do not show dashboard buttons on mobile screen, fix buttons on DNS block/allow lists pages
2020-10-09 19:19:14 +03:00
ArtemBaskal
72ab51bce0 - client: 2152 Do not show dashboard buttons on mobile screen, fix buttons on DNS block/allow lists pages 2020-10-09 13:23:14 +03:00
Artem Baskal
1a3d98d3bf Pull request #796: + client: 2152 Smartphone compatible design for user interface
#2152

* commit 'be82502ba78d52068184b03db5fd4bb044a26583':
  Fix margins
  Fix markup
  Fix dhcp interfaces markup
  + client: 2152 Smartphone compatible design for user interface
2020-10-08 12:10:40 +03:00
ArtemBaskal
be82502ba7 Merge branch 'master' into fix/2152 2020-10-08 11:35:06 +03:00
Artem Baskal
398da7e2d3 + client, home: 2110 Generate .mobileconfig
Close #2110

Squashed commit of the following:

commit 3a652a23b21b4eb16dd7b09f149099c93bf7a977
Merge: 5d0d6c5e 65acfb75
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 21:01:54 2020 +0300

    Merge branch 'master' into feature/2110

commit 5d0d6c5e8704c80ae526d92966dfee0c469019bb
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 00:28:25 2020 +0300

    * (home): minor refactoring

commit e1d10252f5b00c94edb9faa85eaefa3d33ac9cbf
Merge: f859ef14 fb7ca942
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 00:18:46 2020 +0300

    Merge branch 'master' into feature/2110

commit f859ef144c54123d8ff262177148959f7b41a5a4
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Oct 6 19:30:18 2020 +0300

    Update ServerURL, generate all uniqie uuid

commit 3ce7c573229f87579ff150f6519077ced9c5ba23
Merge: e80cf6de a7d2dd7b
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 18:46:03 2020 +0300

    Merge branch 'master' into feature/2110

commit e80cf6ded1c20a4384cb94200134d67b29c0c948
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 18:33:12 2020 +0300

    Describe .mobileconfig in openapi, allow unauthorized access for .mobileconfig

commit 9887d1839f8f7e4888fc23bb64cfc43a42b6f58b
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 16:14:45 2020 +0300

    Change .mobileconfig generation

commit 5298dd706c107f5b02f4278a8773f6af387c36b1
Merge: cd4d1a74 128229ad
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 12:01:16 2020 +0300

    Merge branch 'master' into feature/2110

commit cd4d1a748e2471890b31533e4c24272a3d01cbee
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 1 23:10:14 2020 +0300

    Change dot and doh highlight in setup_dns_privacy_4 locale

commit 50e310ef3b988f2aad5accea92c6b34ecef28585
Merge: 92e0e28b 2f6f65a8
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 1 23:05:45 2020 +0300

    Merge branch 'master' into feature/2110

commit 92e0e28b757953efbbc211ae43b710b070308573
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 28 16:44:25 2020 +0300

    Add ServerAddresses property

commit c8c4cf88abcb0a76c6024d41d3eafab691ff1e38
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 28 13:51:53 2020 +0300

    Fix .mobileconfig display on SetupGuide

commit 9e4fad3c0ed0bfb980ad1cb030272781c13ebaad
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 25 19:08:50 2020 +0300

    2110 + client, home: Generate .mobileconfig
2020-10-08 11:34:36 +03:00
Andrey Meshkov
65acfb75dd Merge: + install.sh
Merge in DNS/adguard-home from install.sh to master
Fix #995

Squashed commit of the following:

commit 81a5b6385574fa5bc14f7e9cc8cd707fcdc491c3
Merge: 825062a9 fb7ca942
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 20:40:30 2020 +0300

    Merge branch 'master' into install.sh

commit 825062a9cb77447bec0967635bde334218437e1f
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 20:04:04 2020 +0300

    minor fixes

commit 22205d80479a1f894fe6c72afe22ba555a9e611e
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 20:01:56 2020 +0300

    * (home): fix install script

commit 073b5fb8e27351094b95d85335dd3d08f65f9ee8
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 19:59:07 2020 +0300

    * (home): update readme and install script

commit d4d2e4c35ca1ea1f365e40081098ee9398196ef3
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 14:43:49 2020 +0300

    disable parallel build

commit a639b9ae44c534c7fdecd34894f5ad4ae6217472
Author: Andrey Meshkov <am@adguard.com>
Date:   Wed Oct 7 02:48:52 2020 +0300

    * (home): improve install.sh

commit 4c564da714850002d1810d4d10dce859f340e3ab
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Oct 1 15:32:53 2020 +0300

    minor

commit 0ecc1a03a41201a632f650ba995f3b07a6539889
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Oct 1 15:08:07 2020 +0300

    * install.sh: use /opt/AdGuardHome output directory

commit fd3ad73606c69e8ede086e67bc557772f9e34406
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 30 12:13:56 2020 +0300

    * install.sh: prompt for an output directory

commit 8917e8cb3d794cfa1fd7b358c89695ff719e7e4d
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 29 18:56:54 2020 +0300

    + install.sh
2020-10-07 21:01:30 +03:00
ArtemBaskal
eb91c6cfe4 Fix margins 2020-10-07 12:48:03 +03:00
ArtemBaskal
8fc1862863 Fix markup 2020-10-07 11:49:30 +03:00
ArtemBaskal
fc4a557610 Fix dhcp interfaces markup 2020-10-06 20:52:44 +03:00
ArtemBaskal
f3118c5e2a Merge branch 'master' into fix/2152 2020-10-06 20:22:51 +03:00
Artem Baskal
fb7ca94243 - client: 1750 Display 0% at the bottom in the statistical chart
Close #1750

* commit 'd21535683c1dbd981933e9bb6fcb9a1097841092':
  - client: 1750 Display 0% at the bottom in the statistical chart
2020-10-06 19:32:37 +03:00
ArtemBaskal
d21535683c - client: 1750 Display 0% at the bottom in the statistical chart 2020-10-06 12:39:21 +03:00
Artem Baskal
78814064bd + client: 2154 Make renderCheckboxField a controlled input
Close #2154

* commit '0ae00932e94429d25995114e2ba9a82f71377d79':
  + client: 2154 Make renderCheckboxField a controlled input
2020-10-06 11:58:41 +03:00
ArtemBaskal
c98f18747c + client: 2152 Smartphone compatible design for user interface 2020-10-06 11:54:06 +03:00
ArtemBaskal
0ae00932e9 + client: 2154 Make renderCheckboxField a controlled input 2020-10-05 14:53:20 +03:00
Andrey Meshkov
8856dd6e4c * (ui): fix date format 2020-10-05 11:21:43 +03:00
Artem Baskal
a7d2dd7bdb - client: 2144 Fix DNS allowlists tab crash after opening "Choose blocklists" modal
Close #2144

Squashed commit of the following:

commit 435f17df9ce41e0f56b78cf8b7a390b73f16243b
Merge: 8899d65e 69a74071
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Oct 2 13:02:36 2020 +0300

    Merge branch 'master' into fix/2144

commit 8899d65e9cf320fa07561f1f5a35cd3424a49a32
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 1 23:00:06 2020 +0300

    - client: 2144 Fix DNS allowlists tab crash after opening "Choose blocklists" modal
2020-10-02 13:30:19 +03:00
Simon Zolin
69a740714f * DNS: set default blocking mode to Null IP for A/AAAA, empty response for others
Close #1914

Squashed commit of the following:

commit cb127a9a409b2f228848fb838535f3db6e9d32a9
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Oct 2 12:37:11 2020 +0300

    return empty response if not A/AAAA qtype

commit 175a736d7d69619022db92a9250c382ad7fc9996
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Oct 2 12:21:51 2020 +0300

    fix

commit 03aab89d2da00ede3aad6eb5a5bb2d545444a186
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Oct 2 12:18:11 2020 +0300

    fix tests

commit 4225d511df910aae2df4651231c01a8a13bb937f
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Oct 2 12:02:11 2020 +0300

    * DNS: set default blocking mode to Null IP for A/AAAA, NXDOMAIN for others
2020-10-02 12:51:55 +03:00
Artem Baskal
128229ad73 + client: Add block and unblock buttons to 'check the filtering' result
Close #1734

Squashed commit of the following:

commit b7e274318aea773b6b7effba0fcf13859a23d45c
Merge: 77c823a4 2f6f65a8
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Oct 1 23:36:49 2020 +0300

    Merge branch 'master' into feature/1734

commit 77c823a46ad6e094d332b40375a32511c8f6ff11
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 24 22:36:56 2020 +0300

    Add blocking button

commit bb77029d46ce18e582db04ccf31f7ed7c57de572
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 22:02:45 2020 +0300

    Refactor check info

commit bd8cf052a0458c767aa65d0d8749648f8e10fdba
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 21:15:24 2020 +0300

    Fix prop processingCheck

commit 5a1d696f7e15f2e1367ff3f9a1767ee3c2344b1b
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 20:35:21 2020 +0300

    Refactor Check component
2020-10-02 11:33:12 +03:00
Artem Baskal
2f6f65a81f + dnsfilter: AG-4274 Update ip addresses
Squashed commit of the following:

commit b63952a7fbd9d33a953ebbfa97a70826a92d4120
Merge: b69646ac 8c411c46
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 28 10:59:48 2020 +0300

    Merge branch 'master' into feature/update_ip

commit b69646ac2647bc7930dba1d77130b9d4f11750ba
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 18:54:54 2020 +0300

    + dnsfilter: AG-4274 Update ip
2020-09-28 11:39:41 +03:00
Artem Baskal
8c411c4630 2128 + service: Detect config file on service run correctly
Cose #2128

Squashed commit of the following:

commit cb7a58276fa97ac2e22bdbcb6d56c61415482e40
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 24 21:03:43 2020 +0300

    2128 + service: Detect config file on service run correctly
2020-09-28 10:57:56 +03:00
Simon Zolin
990f531f54 + DHCP: add ra_slaac_only, ra_allow_slaac config settings
Close # 2076

Squashed commit of the following:

commit 7a938fc6ffa0adc1e705f59778d7e7442b83d4b9
Merge: 3db2605e 6222d17d
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Sep 24 16:34:23 2020 +0300

    Merge remote-tracking branch 'origin/master' into 2076-dhcp-ra-slaac

commit 3db2605efda79e8d361fb46c32bb9ec753de0e02
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Sep 24 16:21:36 2020 +0300

    minor

commit de31c6aeebd78dce54ca54fbff010f3dd50ce974
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Sep 24 12:23:09 2020 +0300

    don't initialize DHCPv6 server if we must force the clients to use SLAAC

commit 7c4239899c85880641dc5b4826ae34386bc5ee94
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 22 19:34:27 2020 +0300

    minor

commit 2b57688ce4c31d45d2236bd397e0b3041dac68c1
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Sep 21 19:50:11 2020 +0300

    + DHCP: add ra_slaac_only, ra_allow_slaac config settings
2020-09-24 18:33:11 +03:00
Simon Zolin
6222d17d86 + clients: improve logic when processing "disallowed IP" property for a client
#1925

* commit 'c72cd58f69b71e4981d8b182b2f7d53ea5e30868':
  + client: Move the client access check to the server-side
  Improve the clients/find API response
  + GET /control/clients/find: add "disallowed" property
2020-09-24 16:30:10 +03:00
Artem Baskal
c72cd58f69 + client: Move the client access check to the server-side
Squashed commit of the following:

commit 1aab0f62e94ce665a1b996552fac41dc4e769b4d
Merge: cdf5eb6e c1f5fdae
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 24 15:36:05 2020 +0300

    Merge branch '1920-client-find' into feature/1925

commit cdf5eb6ea67a665d21a3155d8cf89bba9a5a9948
Merge: b6c20b1c 10f67bd3
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 20:28:51 2020 +0300

    Merge branch 'master' into feature/1925

commit b6c20b1c7359a0e5902405b0551712f936848a80
Merge: 97d388ef 96512433
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 15 10:44:25 2020 +0300

    Merge branch 'master' into feature/1925

commit 97d388ef6571d590f21da00f86d889e881ca0c3d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 15 10:30:50 2020 +0300

    Extract buttons

commit ca45fde11fc2b2812ff2b84dbd67aff0b5341be1
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 10 12:46:09 2020 +0300

    Handle errors in updateLogs

commit f15e03c2e5a7115db984f70f72b0ddd870ece73d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 10 12:39:34 2020 +0300

    Update mobile block status on click

commit 033b28db3b324f6d529ac1a0ef657886cdbe02bd
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 9 20:53:42 2020 +0300

    Fix mobile block buttons, auto open page on web serve start

commit 2730937b23309167a066b9154728ac53ffe81a49
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 9 13:58:37 2020 +0300

    Disable allow this client button when isNotInAllowedList is true

commit 818cf869d63654c184762ad2701c4429a3e3011e
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 9 13:06:01 2020 +0300

    Update client block state on option click

commit a072b8983757f419645c0207ea78e6e867c440cb
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 8 20:17:16 2020 +0300

    Adapt to api changes

commit 28ab2bd8b3f14f60bc822b5a69fa1801db67d816
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 8 14:12:20 2020 +0300

    Change query log block confirm messages

commit 9b0b6f6f9b1ec168fa71dbedd036152da59006e3
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 8 12:00:46 2020 +0300

    Refactor inner work with disallowed

commit 05f76154b8f489738d032fdaa835edb371ce70c7
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 7 16:11:37 2020 +0300

    + client: Move the client access check to the server-side
2020-09-24 15:48:37 +03:00
ArtemBaskal
c1f5fdaee4 Merge branch 'master' into 1920-client-find 2020-09-23 20:29:48 +03:00
Artem Baskal
10f67bd383 + client, querylog: Add blocked service filter support
Close #2124

Squashed commit of the following:

commit 574726e88e4fe7df745dfc964706e1e26f8da59f
Merge: 3bc770fb dc61744d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 19:32:38 2020 +0300

    Merge branch 'master' into feature/2124

commit 3bc770fba6d06bbd965ee181aed7b0a050175f58
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 11:22:07 2020 +0300

    minor

commit 90c0d739d1bd09dbcf5f27ff9e6c3f761bf81686
Merge: 5d1f2642 1d36abd1
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 23 11:17:24 2020 +0300

    Merge branch 'master' into feature/2124

commit 5d1f264212686ac7ecab30401b4f0e3c020dbee9
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 17:23:08 2020 +0300

    Display elapsed if there is no service_name in blocked service

commit af86cedc31d566238764e02c5c8e465fa41292c6
Merge: b61976a7 756f97ed
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 16:55:40 2020 +0300

    Merge branch 'master' into feature/2124

commit b61976a7f811e1d01327cad8b0925bd110c6e135
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 16:52:48 2020 +0300

    Rename params to blocked_services, update service name display on client

commit d5b8e5f7b2c4a3d6701cf8845d31b28f55c6a808
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 15:59:46 2020 +0300

    Update docs, return global blocked status

commit adc9a294f76070dea2d845155814c21c52fc6c7f
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 15:24:34 2020 +0300

    + querylog: Extract filteringStatusBlockedService

commit ee8c1dce0d7520be0d0fcfe6f798dd11f13c9262
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 13:54:16 2020 +0300

    + client: Add blocked service filter support
2020-09-23 19:47:02 +03:00
Simon Zolin
dc61744d47 Merge: * doc: "<key>" was treated as "" in a processed .md document
* commit '805bd41c4d62cf5ecb00dc65ef0d7a72b4380154':
  * doc: "<key>" was treated as "" in a processed .md document
2020-09-23 13:48:39 +03:00
Simon Zolin
805bd41c4d * doc: "<key>" was treated as "" in a processed .md document 2020-09-23 13:09:14 +03:00
Simon Zolin
1d36abd11a - querylogs: GET /control/querylog: "service_name" field wasn't set
Squashed commit of the following:

commit a6571d483c8b5af6c051fb2fc08661d609a4e3d0
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 22 17:27:54 2020 +0300

    - querylogs: GET /control/querylog: "service_name" field wasn't set
2020-09-22 17:43:19 +03:00
Artem Baskal
756f97ede1 + upstream: Allow entering comments to the Upstreams box
Close #2083

Squashed commit of the following:

commit 113ad3c4ae2ca184b3945dcaa357b57303ee5fd6
Merge: 4ca1f005 bf23aa4d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 14:41:30 2020 +0300

    Merge branch 'master' into feature/2083

commit 4ca1f0056708eb23bb751587a0ec284508f35edf
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 13:14:31 2020 +0300

    Simplify filterOutComments, use assert in tests

commit bba03568aa979300e0534a2bd2f03086e25b3f87
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 12:05:00 2020 +0300

    Add ValidateUpstreams test cases

commit 181de508cf266e3a47058f2b7e1b4b4accbab827
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 11:47:03 2020 +0300

    Refactor testUpstream

commit 19c189cf7b64f4d252428dec5a608595c8e4cbc7
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 22 10:38:37 2020 +0300

    Move functions to utils

commit 003937e90e0ff02e696d45c21045a27a49cd0202
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 21 19:00:49 2020 +0300

    Review changes

commit b26bf64d8cef0266f33bce51c5bad324c74bb6da
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 21 17:58:01 2020 +0300

    + upstream: Filter out the upstream comments

commit 920975d2ba14fade07282cdb5c72a699c8083463
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 21 17:51:00 2020 +0300

    Trim upstreams, extract comment token

commit a9958eb305ed9af10de68ef3bffe63f216805efe
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 21 10:34:11 2020 +0300

    Fix markup styles

commit 6efa41d944c7b09454a4011d2c9ea52b5ce91bbf
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 18 17:59:57 2020 +0300

    Fix upstream form positioning

commit 6eb12158d0bca49d4b41eb65a3ebed44eafbe486
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 18 17:16:49 2020 +0300

    Update example_upstream_comment locale

commit aa9317b0243f5d30f0fcb9cbfcdf502547a8e954
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 18 13:28:30 2020 +0300

    Highlight comments in custom rules form, extract highlight logic

commit dc55245d3db9edbde60fda0a0e50e1e045e71403
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 17 22:48:29 2020 +0300

    + client: Allow entering comments to the Upstreams box
2020-09-22 15:04:17 +03:00
Artem Baskal
bf23aa4d9b + client: Replace TTL override zeroes with empty strings, update dnsproxy
Close #2091

Squashed commit of the following:

commit 9acaa0331f3094a2b48c1f0cf846a30e5c9dfc43
Merge: c207ccc9 3a71374f
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 18 17:45:20 2020 +0300

    Merge branch 'master' into fix/2091

commit c207ccc9a12f225a6f0343f5273a3469b2709679
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 18 17:14:24 2020 +0300

    Remove unused imports

commit 750f60ffc40fd48d4bd09a4e2ac4a3143e0cf126
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 18 16:47:24 2020 +0300

    Update dnsproxy to v0.32.6

commit 1723267e0e7f512db532cd180a3e9d44182d96b3
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 18 16:32:12 2020 +0300

    Replace zeroes with empty string
2020-09-21 10:19:56 +03:00
Artem Baskal
3a71374f9f - client: Return red background of Disallowed clients on the Dashboard
Close #2108

* commit '9fd74748bb7ce84bea512c5a52bd927e88a00ed8':
  - client: Return red background of Disallowed clients on the Dashboard
2020-09-18 17:44:55 +03:00
ArtemBaskal
9fd74748bb - client: Return red background of Disallowed clients on the Dashboard 2020-09-18 17:11:46 +03:00
Andrey Meshkov
f694a40c57 * : query log anonymization tool 2020-09-18 14:42:04 +03:00
Andrey Meshkov
38066151a6 * (ui): translations update 2020-09-17 23:50:31 +03:00
Andrey Meshkov
deeaca5de1 fix typo 2020-09-16 19:47:26 +03:00
ArtemBaskal
da1e235052 Merge branch 'master' into 1920-client-find 2020-09-15 10:45:32 +03:00
Andrey Meshkov
2c12d5f860 Improve the clients/find API response 2020-09-08 13:56:45 +03:00
Andrey Meshkov
49a5bab267 Merge branch 'master' into 1920-client-find 2020-09-08 13:36:10 +03:00
ArtemBaskal
458d9f49cb Merge branch 'master' into 1920-client-find 2020-09-07 16:13:42 +03:00
Simon Zolin
dd3027afe7 + GET /control/clients/find: add "disallowed" property 2020-09-04 10:58:33 +03:00
278 changed files with 12579 additions and 7589 deletions

View File

@@ -1,8 +1,8 @@
coverage:
status:
project:
default:
target: 40%
threshold: null
patch: false
changes: false
'coverage':
'status':
'project':
'default':
'target': '40%'
'threshold': null
'patch': false
'changes': false

View File

@@ -11,7 +11,7 @@ fi
found=0
git diff --cached --name-only | grep -q '.go$' && found=1
if [ $found == 1 ]; then
make lint-go || exit 1
make go-lint || exit 1
go test ./... || exit 1
fi

32
.github/stale.yml vendored
View File

@@ -1,19 +1,19 @@
# Number of days of inactivity before an issue becomes stale
daysUntilStale: 60
# Number of days of inactivity before a stale issue is closed
daysUntilClose: 7
# Issues with these labels will never be considered stale
exemptLabels:
- 'bug'
- 'enhancement'
- 'feature request'
- 'localization'
# Label to use when marking an issue as stale
staleLabel: 'wontfix'
# Comment to post when marking an issue as stale. Set to `false` to disable
markComment: >
# Number of days of inactivity before an issue becomes stale.
'daysUntilStale': 60
# Number of days of inactivity before a stale issue is closed.
'daysUntilClose': 7
# Issues with these labels will never be considered stale.
'exemptLabels':
- 'bug'
- 'enhancement'
- 'feature request'
- 'localization'
# Label to use when marking an issue as stale.
'staleLabel': 'wontfix'
# Comment to post when marking an issue as stale. Set to `false` to disable.
'markComment': >
This issue has been automatically marked as stale because it has not had
recent activity. It will be closed if no further activity occurs. Thank you
for your contributions.
# Comment to post when closing a stale issue. Set to `false` to disable
closeComment: false
# Comment to post when closing a stale issue. Set to `false` to disable.
'closeComment': false

View File

@@ -1,172 +1,145 @@
name: build
'name': 'build'
env:
GO_VERSION: 1.14
NODE_VERSION: 13
'env':
'GO_VERSION': '1.14'
'NODE_VERSION': '13'
on:
push:
branches:
- '*'
tags:
- v*
pull_request:
'on':
'push':
'branches':
- '*'
'tags':
- 'v*'
'pull_request':
jobs:
'jobs':
'test':
'runs-on': '${{ matrix.os }}'
'env':
'GO111MODULE': 'on'
'GOPROXY': 'https://goproxy.io'
'strategy':
'fail-fast': false
'matrix':
'os':
- 'ubuntu-latest'
- 'macOS-latest'
- 'windows-latest'
'steps':
- 'name': 'Checkout'
'uses': 'actions/checkout@v2'
'with':
'fetch-depth': 0
- 'name': 'Set up Go'
'uses': 'actions/setup-go@v2'
'with':
'go-version': '${{ env.GO_VERSION }}'
- 'name': 'Set up Node'
'uses': 'actions/setup-node@v1'
'with':
'node-version': '${{ env.NODE_VERSION }}'
- 'name': 'Set up Go modules cache'
'uses': 'actions/cache@v2'
'with':
'path': '~/go/pkg/mod'
'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
'restore-keys': '${{ runner.os }}-go-'
- 'name': 'Get npm cache directory'
'id': 'npm-cache'
'run': 'echo "::set-output name=dir::$(npm config get cache)"'
- 'name': 'Set up npm cache'
'uses': 'actions/cache@v2'
'with':
'path': '${{ steps.npm-cache.outputs.dir }}'
'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
'restore-keys': '${{ runner.os }}-node-'
- 'name': 'Run make ci'
'shell': 'bash'
'run': 'make ci'
- 'name': 'Upload coverage'
'uses': 'codecov/codecov-action@v1'
'if': "success() && matrix.os == 'ubuntu-latest'"
'with':
'token': '${{ secrets.CODECOV_TOKEN }}'
'file': './coverage.txt'
'app':
'runs-on': 'ubuntu-latest'
'needs': 'test'
'steps':
- 'name': 'Checkout'
'uses': 'actions/checkout@v2'
'with':
'fetch-depth': 0
- 'name': 'Set up Go'
'uses': 'actions/setup-go@v2'
'with':
'go-version': '${{ env.GO_VERSION }}'
- 'name': 'Set up Node'
'uses': 'actions/setup-node@v1'
'with':
'node-version': '${{ env.NODE_VERSION }}'
- 'name': 'Set up Go modules cache'
'uses': 'actions/cache@v2'
'with':
'path': '~/go/pkg/mod'
'key': "${{ runner.os }}-go-${{ hashFiles('go.sum') }}"
'restore-keys': '${{ runner.os }}-go-'
- 'name': 'Get npm cache directory'
'id': 'npm-cache'
'run': 'echo "::set-output name=dir::$(npm config get cache)"'
- 'name': 'Set up node_modules cache'
'uses': 'actions/cache@v2'
'with':
'path': '${{ steps.npm-cache.outputs.dir }}'
'key': "${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}"
'restore-keys': '${{ runner.os }}-node-'
- 'name': 'Set up Snapcraft'
'run': 'sudo apt-get -yq --no-install-suggests --no-install-recommends install snapcraft'
- 'name': 'Set up GoReleaser'
'run': 'curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | BINDIR="$(go env GOPATH)/bin" sh'
- 'name': 'Run snapshot build'
'run': 'make release'
test:
runs-on: ${{ matrix.os }}
env:
GO111MODULE: on
GOPROXY: https://goproxy.io
strategy:
fail-fast: false
matrix:
os:
- ubuntu-latest
- macOS-latest
- windows-latest
steps:
-
name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
-
name: Set up Go
uses: actions/setup-go@v2
with:
go-version: ${{ env.GO_VERSION }}
'docker':
'runs-on': 'ubuntu-latest'
'needs': 'test'
'steps':
- 'name': 'Checkout'
'uses': 'actions/checkout@v2'
'with':
'fetch-depth': 0
- 'name': 'Set up QEMU'
'uses': 'docker/setup-qemu-action@v1'
- 'name': 'Set up Docker Buildx'
'uses': 'docker/setup-buildx-action@v1'
- 'name': 'Docker Buildx (build)'
'run': 'make docker-multi-arch'
-
name: Set up Node
uses: actions/setup-node@v1
with:
node-version: ${{ env.NODE_VERSION }}
-
name: Set up Go modules cache
uses: actions/cache@v2
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }}
restore-keys: |
${{ runner.os }}-go-
-
name: Get npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
-
name: Set up npm cache
uses: actions/cache@v2
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
-
name: Run make ci
shell: bash
run: |
make ci
-
name: Upload coverage
uses: codecov/codecov-action@v1
if: success() && matrix.os == 'ubuntu-latest'
with:
token: ${{ secrets.CODECOV_TOKEN }}
file: ./coverage.txt
app:
runs-on: ubuntu-latest
needs: test
steps:
-
name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
-
name: Set up Go
uses: actions/setup-go@v2
with:
go-version: ${{ env.GO_VERSION }}
-
name: Set up Node
uses: actions/setup-node@v1
with:
node-version: ${{ env.NODE_VERSION }}
-
name: Set up Go modules cache
uses: actions/cache@v2
with:
path: ~/go/pkg/mod
key: ${{ runner.os }}-go-${{ hashFiles('go.sum') }}
restore-keys: |
${{ runner.os }}-go-
-
name: Get npm cache directory
id: npm-cache
run: |
echo "::set-output name=dir::$(npm config get cache)"
-
name: Set up node_modules cache
uses: actions/cache@v2
with:
path: ${{ steps.npm-cache.outputs.dir }}
key: ${{ runner.os }}-node-${{ hashFiles('client/package-lock.json') }}
restore-keys: |
${{ runner.os }}-node-
-
name: Set up Snapcraft
run: |
sudo apt-get -yq --no-install-suggests --no-install-recommends install snapcraft
-
name: Set up GoReleaser
run: |
curl -sfL https://install.goreleaser.com/github.com/goreleaser/goreleaser.sh | BINDIR="$(go env GOPATH)/bin" sh
-
name: Run snapshot build
run: |
make release
docker:
runs-on: ubuntu-latest
needs: test
steps:
-
name: Set up Docker Buildx
uses: crazy-max/ghaction-docker-buildx@v1
-
name: Checkout
uses: actions/checkout@v2
with:
fetch-depth: 0
-
name: Docker Buildx (build)
run: |
make docker-multi-arch
-
name: Clear
if: always() && startsWith(github.ref, 'refs/tags/v')
run: |
rm -f ${HOME}/.docker/config.json
notify:
needs: [app, docker]
# Secrets are not passed to workflows that are triggered by a pull request from a fork
if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: ubuntu-latest
steps:
-
name: Conclusion
uses: technote-space/workflow-conclusion-action@v1
-
name: Send Slack notif
uses: 8398a7/action-slack@v3
with:
status: ${{ env.WORKFLOW_CONCLUSION }}
fields: repo,message,commit,author
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
'notify':
'needs':
- 'app'
- 'docker'
# Secrets are not passed to workflows that are triggered by a pull request
# from a fork.
#
# Use always() to signal to the runner that this job must run even if the
# previous ones failed.
'if':
${{ always() &&
(
github.event_name == 'push' ||
github.event.pull_request.head.repo.full_name == github.repository
)
}}
'runs-on': 'ubuntu-latest'
'steps':
- 'name': 'Conclusion'
'uses': 'technote-space/workflow-conclusion-action@v1'
- 'name': 'Send Slack notif'
'uses': '8398a7/action-slack@v3'
'with':
'status': '${{ env.WORKFLOW_CONCLUSION }}'
'fields': 'repo, message, commit, author, job'
'env':
'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
'SLACK_WEBHOOK_URL': '${{ secrets.SLACK_WEBHOOK_URL }}'

View File

@@ -1,47 +1,52 @@
name: golangci-lint
on:
push:
tags:
- v*
branches:
- '*'
pull_request:
jobs:
golangci:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: golangci-lint
uses: golangci/golangci-lint-action@v1
with:
# Required: the version of golangci-lint is required and must be specified without patch version: we always use the latest patch version.
version: v1.27
eslint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Install modules
run: npm --prefix client ci
- name: Run ESLint
run: npm --prefix client run lint
notify:
needs: [golangci,eslint]
# Secrets are not passed to workflows that are triggered by a pull request from a fork
if: ${{ github.event_name == 'push' || github.event.pull_request.head.repo.full_name == github.repository }}
runs-on: ubuntu-latest
steps:
-
name: Conclusion
uses: technote-space/workflow-conclusion-action@v1
-
name: Send Slack notif
uses: 8398a7/action-slack@v3
with:
status: ${{ env.WORKFLOW_CONCLUSION }}
fields: repo,message,commit,author
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL }}
'name': 'lint'
'on':
'push':
'tags':
- 'v*'
'branches':
- '*'
'pull_request':
'jobs':
'go-lint':
'runs-on': 'ubuntu-latest'
'steps':
- 'uses': 'actions/checkout@v2'
- 'name': 'run-lint'
'run': >
make go-install-tools go-lint
'eslint':
'runs-on': 'ubuntu-latest'
'steps':
- 'uses': 'actions/checkout@v2'
- 'name': 'Install modules'
'run': 'npm --prefix client ci'
- 'name': 'Run ESLint'
'run': 'npm --prefix client run lint'
'notify':
'needs':
- 'go-lint'
- 'eslint'
# Secrets are not passed to workflows that are triggered by a pull request
# from a fork.
#
# Use always() to signal to the runner that this job must run even if the
# previous ones failed.
'if':
${{ always() &&
(
github.event_name == 'push' ||
github.event.pull_request.head.repo.full_name == github.repository
)
}}
'runs-on': 'ubuntu-latest'
'steps':
- 'name': 'Conclusion'
'uses': 'technote-space/workflow-conclusion-action@v1'
- 'name': 'Send Slack notif'
'uses': '8398a7/action-slack@v3'
'with':
'status': '${{ env.WORKFLOW_CONCLUSION }}'
'fields': 'repo, message, commit, author, job'
'env':
'GITHUB_TOKEN': '${{ secrets.GITHUB_TOKEN }}'
'SLACK_WEBHOOK_URL': '${{ secrets.SLACK_WEBHOOK_URL }}'

50
.gitignore vendored
View File

@@ -1,30 +1,22 @@
.DS_Store
/.vscode
.idea
/AdGuardHome
/AdGuardHome.exe
/AdGuardHome.yaml
/AdGuardHome.log
/data/
/build/
/dist/
/client/node_modules/
/querylog.json
/querylog.json.1
coverage.txt
# Test output
dnsfilter/tests/top-1m.csv
dnsfilter/tests/dnsfilter.TestLotsOfRules*.pprof
# Snapcraft build temporary files
*.snap
launchpad_credentials
snapcraft_login
snapcraft.yaml.bak
# IntelliJ IDEA project files
*.iml
# Packr
# Please, DO NOT put your text editors' temporary files here. The more are
# added, the harder it gets to maintain and manage projects' gitignores. Put
# them into your global gitignore file instead.
#
# See https://stackoverflow.com/a/7335487/1892060.
#
# Only build, run, and test outputs here. Sorted.
*-packr.go
*.db
*.snap
/bin/
/build/
/data/
/dist/
/dnsfilter/tests/dnsfilter.TestLotsOfRules*.pprof
/dnsfilter/tests/top-1m.csv
/launchpad_credentials
/querylog.json*
/snapcraft_login
AdGuardHome*
coverage.txt
node_modules/

View File

@@ -1,79 +0,0 @@
# options for analysis running
run:
# default concurrency is a available CPU number
concurrency: 4
# timeout for analysis, e.g. 30s, 5m, default is 1m
deadline: 2m
# which files to skip: they will be analyzed, but issues from them
# won't be reported. Default value is empty list, but there is
# no need to include all autogenerated files, we confidently recognize
# autogenerated files. If it's not please let us know.
skip-files:
- ".*generated.*"
- dnsfilter/rule_to_regexp.go
- util/pprof.go
- ".*_test.go"
- client/.*
- build/.*
- dist/.*
# all available settings of specific linters
linters-settings:
errcheck:
# [deprecated] comma-separated list of pairs of the form pkg:regex
# the regex is used to ignore names within pkg. (default "fmt:.*").
# see https://github.com/kisielk/errcheck#the-deprecated-method for details
ignore: fmt:.*,net:SetReadDeadline,net/http:^Write
gocyclo:
min-complexity: 20
lll:
line-length: 200
linters:
enable:
- deadcode
- errcheck
- govet
- ineffassign
- staticcheck
- structcheck
- unused
- varcheck
- bodyclose
- depguard
- dupl
- gocyclo
- goimports
- golint
- gosec
- misspell
- stylecheck
- unconvert
disable-all: true
fast: true
issues:
# List of regexps of issue texts to exclude, empty list by default.
# But independently from this option we use default exclude patterns,
# it can be disabled by `exclude-use-default: false`. To list all
# excluded by default patterns execute `golangci-lint run --help`
exclude:
# structcheck cannot detect usages while they're there
- .parentalServer. is unused
- .safeBrowsingServer. is unused
# errcheck
- Error return value of .s.closeConn. is not checked
- Error return value of ..*.Shutdown.
# goconst
- string .forcesafesearch.google.com. has 3 occurrences
# gosec: Profiling endpoint is automatically exposed on /debug/pprof
- G108
# gosec: Subprocess launched with function call as argument or cmd arguments
- G204
# gosec: Potential DoS vulnerability via decompression bomb
- G110
# gosec: Expect WriteFile permissions to be 0600 or less
- G306

View File

@@ -1,100 +1,115 @@
project_name: AdGuardHome
'project_name': 'AdGuardHome'
env:
- GO111MODULE=on
- GOPROXY=https://goproxy.io
'env':
- 'GO111MODULE=on'
- 'GOPROXY=https://goproxy.io'
before:
hooks:
- go mod download
- go generate ./...
'before':
'hooks':
- 'go mod download'
- 'go generate ./...'
builds:
- main: ./main.go
ldflags:
- -s -w -X main.version={{.Version}} -X main.channel={{.Env.CHANNEL}} -X main.goarm={{.Env.GOARM}}
env:
- CGO_ENABLED=0
goos:
- darwin
- linux
- freebsd
- windows
goarch:
- 386
- amd64
- arm
- arm64
- mips
- mipsle
- mips64
- mips64le
goarm:
- 5
- 6
- 7
gomips:
- softfloat
ignore:
- goos: freebsd
goarch: mips
- goos: freebsd
goarch: mipsle
'builds':
- 'main': './main.go'
'ldflags':
- '-s -w -X main.version={{.Version}} -X main.channel={{.Env.CHANNEL}} -X main.goarm={{.Env.GOARM}}'
'env':
- 'CGO_ENABLED=0'
'goos':
- 'darwin'
- 'linux'
- 'freebsd'
- 'windows'
'goarch':
- '386'
- 'amd64'
- 'arm'
- 'arm64'
- 'mips'
- 'mipsle'
- 'mips64'
- 'mips64le'
'goarm':
- '5'
- '6'
- '7'
'gomips':
- 'softfloat'
'ignore':
- 'goos': 'freebsd'
'goarch': 'mips'
- 'goos': 'freebsd'
'goarch': 'mipsle'
archives:
- # Archive name template.
# Defaults:
# - if format is `tar.gz`, `tar.xz`, `gz` or `zip`:
# - `{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}`
# - if format is `binary`:
# - `{{ .Binary }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}`
name_template: "{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}"
wrap_in_directory: "AdGuardHome"
format_overrides:
- goos: windows
format: zip
- goos: darwin
format: zip
files:
- LICENSE.txt
- README.md
'archives':
- # Archive name template.
# Defaults:
# - if format is `tar.gz`, `tar.xz`, `gz` or `zip`:
# - `{{ .ProjectName }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}`
# - if format is `binary`:
# - `{{ .Binary }}_{{ .Version }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}`
'name_template': '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}{{ if .Mips }}_{{ .Mips }}{{ end }}'
'wrap_in_directory': 'AdGuardHome'
'format_overrides':
- 'goos': 'windows'
'format': 'zip'
- 'goos': 'darwin'
'format': 'zip'
'files':
- 'LICENSE.txt'
- 'README.md'
snapcrafts:
- name: adguard-home
base: core18
name_template: '{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
summary: Network-wide ads & trackers blocking DNS server
description: |
AdGuard Home is a network-wide software for blocking ads & tracking. After
you set it up, it'll cover ALL your home devices, and you don't need any
client-side software for that.
'snapcrafts':
- 'name': 'adguard-home'
'base': 'core20'
'name_template': '{{ .ProjectName }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
'summary': 'Network-wide ads & trackers blocking DNS server'
'description': |
AdGuard Home is a network-wide software for blocking ads & tracking. After
you set it up, it'll cover ALL your home devices, and you don't need any
client-side software for that.
It operates as a DNS server that re-routes tracking domains to a "black hole,"
thus preventing your devices from connecting to those servers. It's based
on software we use for our public AdGuard DNS servers -- both share a lot
of common code.
grade: stable
confinement: strict
publish: false
license: GPL-3.0
extra_files:
- source: scripts/snap/local/adguard-home-web.sh
destination: adguard-home-web.sh
mode: 0755
- source: scripts/snap/gui/adguard-home-web.desktop
destination: meta/gui/adguard-home-web.desktop
mode: 0644
- source: scripts/snap/gui/adguard-home-web.png
destination: meta/gui/adguard-home-web.png
mode: 0644
apps:
adguard-home:
command: AdGuardHome -w $SNAP_DATA --no-check-update
plugs: [ network-bind ]
daemon: simple
adguard-home-web:
command: adguard-home-web.sh
plugs: [ desktop ]
It operates as a DNS server that re-routes tracking domains to a "black hole,"
thus preventing your devices from connecting to those servers. It's based
on software we use for our public AdGuard DNS servers -- both share a lot
of common code.
'grade': 'stable'
'confinement': 'strict'
'publish': false
'license': 'GPL-3.0'
'extra_files':
- 'source': 'scripts/snap/local/adguard-home-web.sh'
'destination': 'adguard-home-web.sh'
'mode': 0755
- 'source': 'scripts/snap/gui/adguard-home-web.desktop'
'destination': 'meta/gui/adguard-home-web.desktop'
'mode': 0644
- 'source': 'scripts/snap/gui/adguard-home-web.png'
'destination': 'meta/gui/adguard-home-web.png'
'mode': 0644
'apps':
'adguard-home':
'command': 'AdGuardHome -w $SNAP_DATA --no-check-update'
'plugs':
# Add the "netrwork-bind" plug to bind to interfaces.
- 'network-bind'
# Add the "netrwork-observe" plug to be able to bind to ports below 1024
# (cap_net_bind_service) and also to bind to a particular interface using
# SO_BINDTODEVICE (cap_net_raw).
- 'network-observe'
'daemon': 'simple'
'adguard-home-web':
'command': 'adguard-home-web.sh'
'plugs':
- 'desktop'
checksum:
name_template: 'checksums.txt'
'checksum':
'name_template': 'checksums.txt'
'snapshot':
# TODO(a.garipov): A temporary solution to trim the prerelease versions.
# A real solution would consist of making a better versioning scheme that also
# doesn't break SemVer or Snapcraft.
#
# See https://github.com/AdguardTeam/AdGuardHome/issues/2412.
'name_template': '{{ slice .Tag 0 8 }}-SNAPSHOT-{{ .ShortCommit }}'

View File

@@ -33,6 +33,7 @@ Contents:
* Static IP check/set
* API: Add a static lease
* API: Reset DHCP configuration
* RA+SLAAC
* DNS general settings
* API: Get DNS general settings
* API: Set DNS general settings
@@ -725,6 +726,53 @@ Response:
200 OK
### RA+SLAAC
There are 3 options for a client to get IPv6 address:
1. via DHCPv6.
Client doesn't receive any `ICMPv6.RouterAdvertisement` packets, so it tries to use DHCPv6.
2. via SLAAC.
Client receives a `ICMPv6.RouterAdvertisement` packet with `Managed=false` flag and IPv6 prefix.
Client then assigns to itself an IPv6 address using this prefix and its MAC address.
DHCPv6 server won't be started in this case.
3. via DHCPv6 or SLAAC.
Client receives a `ICMPv6.RouterAdvertisement` packet with `Managed=true` flag and IPv6 prefix.
Client may choose to use SLAAC or DHCPv6 to obtain an IPv6 address.
Configuration:
dhcp:
...
dhcpv6:
...
ra_slaac_only: false
ra_allow_slaac: false
* `ra_slaac_only:false; ra_allow_slaac:false`: use option #1.
Don't send any `ICMPv6.RouterAdvertisement` packets.
* `ra_slaac_only:true; ra_allow_slaac:false`: use option #2.
Periodically send `ICMPv6.RouterAdvertisement(Flags=(Managed=false,Other=false))` packets.
* `ra_slaac_only:false; ra_allow_slaac:true`: use option #3.
Periodically send `ICMPv6.RouterAdvertisement(Flags=(Managed=true,Other=true))` packets.
ICMPv6.RouterAdvertisement packet description:
ICMPv6:
Type=RouterAdvertisement(134)
Flags
Managed=<BOOL>
Other=<BOOL>
Option=Prefix information(3)
<IPv6 address prefix (/64) of the network interface>
Option=MTU(5)
<...>
Option=Source link-layer address(1)
<MAC address>
Option=Recursive DNS Server(25)
<IPv6 address of DNS server>
## TLS
@@ -782,6 +830,36 @@ Request:
"private_key_path":"..." // if set, private_key must be empty
}
Response:
200 OK
### API: Validate TLS configuration
Request:
POST /control/tls/validate
{
"enabled":true,
"port_https":443,
"port_dns_over_tls":853,
"port_dns_over_quic":784,
"allow_unencrypted_doh":false,
"certificate_chain":"...",
"private_key":"...",
"certificate_path":"...",
"private_key_path":"...",
"valid_cert":true,
"valid_chain":false,
"not_before":"2019-03-19T08:23:45Z",
"not_after":"2029-03-16T08:23:45Z",
"dns_names":null,
"valid_key":true,
"valid_pair":true
}
Response:
200 OK
@@ -942,7 +1020,7 @@ Error response (Client not found):
### API: Find clients by IP
This method returns the list of clients (manual and auto-clients) matching the IP list.
For auto-clients only `name`, `ids` and `whois_info` fields are set. Other fields are empty.
For auto-clients only `name`, `ids`, `whois_info`, `disallowed`, and `disallowed_rule` fields are set. Other fields are empty.
Request:
@@ -968,11 +1046,16 @@ Response:
key: "value"
...
}
"disallowed": false,
"disallowed_rule": "..."
}
}
...
]
* `disallowed` - whether the client's IP is blocked or not.
* `disallowed_rule` - the rule due to which the client is disallowed. If `disallowed` is `true`, and this string is empty - it means that the client IP is disallowed by the "allowed IP list", i.e. it is not included in allowed.
## DNS general settings
@@ -1102,7 +1185,7 @@ and `value` is either:
* IPv4 address: use this IP in A response
* IPv6 address: use this IP in AAAA response
* canonical name: add CNAME record
* "<key>": CNAME exception - pass request to upstream
* "`key`": CNAME exception - pass request to upstream
* "A": A exception - pass A request to upstream
* "AAAA": AAAA exception - pass AAAA request to upstream
@@ -1423,6 +1506,7 @@ When a new DNS request is received and processed, we store information about thi
"Reason":3,
"Rule":"...",
"FilterID":1,
"ServiceName":"..."
},
"Elapsed":12345,
"Upstream":"...",
@@ -1470,7 +1554,8 @@ Strict matching can be enabled by enclosing the value in double quotes: e.g. `"a
`response_status`:
* all
* filtered - all kinds of filtering
* blocked - blocked or blocked service
* blocked - blocked or blocked services
* blocked_services - blocked services
* blocked_safebrowsing - blocked by safebrowsing
* blocked_parental - blocked by parental control
* whitelisted - whitelisted
@@ -1502,7 +1587,7 @@ Response:
"upstream":"...", // Upstream URL starting with tcp://, tls://, https://, or with an IP address
"answer_dnssec": true,
"client":"127.0.0.1",
"client_proto": "" (plain) | "doh" | "dot",
"client_proto": "" (plain) | "doh" | "dot" | "doq",
"elapsedMs":"0.098403",
"filterId":1,
"question":{
@@ -1893,6 +1978,29 @@ Check if host name is blocked by SB/PC service:
sha256(sub.host.com)[0..1] -> hashes[2],...
...
## API: Get DNS over HTTPS .mobileconfig
Request:
GET /apple/doh.mobileconfig
Response:
200 OK
DOH plist file
## API: Get DNS over TLS .mobileconfig
Request:
GET /apple/dot.mobileconfig
Response:
200 OK
DOT plist file
## ipset

109
CHANGELOG.md Normal file
View File

@@ -0,0 +1,109 @@
# AdGuard Home Changelog
All notable changes to this project will be documented in this file.
The format is based on
[*Keep a Changelog*](https://keepachangelog.com/en/1.0.0/),
and this project adheres to
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
<!--
## [v0.105.0] - 2020-12-28
-->
### Added
- Detecting of network interface configurated to have static IP address via
`/etc/network/interfaces` ([#2302]).
- DNSCrypt protocol support [#1361].
- A 5 second wait period until a DHCP server's network interface gets an IP
address ([#2304]).
- `$dnstype` modifier for filters ([#2337]).
- HTTP API request body size limit ([#2305]).
[#1361]: https://github.com/AdguardTeam/AdGuardHome/issues/1361
[#2302]: https://github.com/AdguardTeam/AdGuardHome/issues/2302
[#2304]: https://github.com/AdguardTeam/AdGuardHome/issues/2304
[#2305]: https://github.com/AdguardTeam/AdGuardHome/issues/2305
[#2337]: https://github.com/AdguardTeam/AdGuardHome/issues/2337
### Changed
- Post-updating relaunch possibility is now determined OS-dependently ([#2231],
[#2391]).
- Made the mobileconfig HTTP API more robust and predictable, add parameters and
improve error response ([#2358]).
- Improved HTTP requests handling and timeouts ([#2343]).
- Our snap package now uses the `core20` image as its base ([#2306]).
- Various internal improvements ([#2267], [#2271], [#2297]).
[#2231]: https://github.com/AdguardTeam/AdGuardHome/issues/2231
[#2267]: https://github.com/AdguardTeam/AdGuardHome/issues/2267
[#2271]: https://github.com/AdguardTeam/AdGuardHome/issues/2271
[#2297]: https://github.com/AdguardTeam/AdGuardHome/issues/2297
[#2306]: https://github.com/AdguardTeam/AdGuardHome/issues/2306
[#2343]: https://github.com/AdguardTeam/AdGuardHome/issues/2343
[#2358]: https://github.com/AdguardTeam/AdGuardHome/issues/2358
[#2391]: https://github.com/AdguardTeam/AdGuardHome/issues/2391
### Fixed
- A mitigation against records being shown in the wrong order on the query log
page ([#2293]).
- A JSON parsing error in query log ([#2345]).
- Incorrect detection of the IPv6 address of an interface as well as another
infinite loop in the `/dhcp/find_active_dhcp` HTTP API ([#2355]).
[#2293]: https://github.com/AdguardTeam/AdGuardHome/issues/2293
[#2345]: https://github.com/AdguardTeam/AdGuardHome/issues/2345
[#2355]: https://github.com/AdguardTeam/AdGuardHome/issues/2355
## [v0.104.3] - 2020-11-19
### Fixed
- The accidentally exposed profiler HTTP API ([#2336]).
[#2336]: https://github.com/AdguardTeam/AdGuardHome/issues/2336
## [v0.104.2] - 2020-11-19
### Added
- This changelog :-) ([#2294]).
- `HACKING.md`, a guide for developers.
### Changed
- Improved tests output ([#2273]).
### Fixed
- Query logs from file not loading after the ones buffered in memory ([#2325]).
- Unnecessary errors in query logs when switching between log files ([#2324]).
- `404 Not Found` errors on the DHCP settings page on *Windows*. The page now
correctly shows that DHCP is not currently available on that OS ([#2295]).
- Infinite loop in `/dhcp/find_active_dhcp` ([#2301]).
[#2273]: https://github.com/AdguardTeam/AdGuardHome/issues/2273
[#2294]: https://github.com/AdguardTeam/AdGuardHome/issues/2294
[#2295]: https://github.com/AdguardTeam/AdGuardHome/issues/2295
[#2301]: https://github.com/AdguardTeam/AdGuardHome/issues/2301
[#2324]: https://github.com/AdguardTeam/AdGuardHome/issues/2324
[#2325]: https://github.com/AdguardTeam/AdGuardHome/issues/2325
<!--
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.105.0...HEAD
[v0.105.0]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.3...v0.105.0
-->
[Unreleased]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.3...HEAD
[v0.104.3]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.2...v0.104.3
[v0.104.2]: https://github.com/AdguardTeam/AdGuardHome/compare/v0.104.1...v0.104.2

View File

@@ -59,7 +59,6 @@ RUN apk --update --no-cache add \
ca-certificates \
libcap \
libressl \
tzdata \
&& rm -rf /tmp/* /var/cache/apk/*
COPY --from=builder --chown=nobody:nogroup /app/AdGuardHome /opt/adguardhome/AdGuardHome

225
HACKING.md Normal file
View File

@@ -0,0 +1,225 @@
# *AdGuardHome* Developer Guidelines
As of **December 2020**, this document is partially a work-in-progress, but
should still be followed. Some of the rules aren't enforced as thoroughly or
remain broken in old code, but this is still the place to find out about what we
**want** our code to look like.
The rules are mostly sorted in the alphabetical order.
## *Git*
* Call your branches either `NNNN-fix-foo` (where `NNNN` is the ID of the
*GitHub* issue you worked on in this branch) or just `fix-foo` if there was
no *GitHub* issue.
* Follow the commit message header format:
```none
pkg: fix the network error logging issue
```
Where `pkg` is the package where most changes took place. If there are
several such packages, or the change is top-level only, write `all`.
* Keep your commit messages, including headers, to eighty (**80**) columns.
* Only use lowercase letters in your commit message headers. The rest of the
message should follow the plain text conventions below.
The only exceptions are direct mentions of identifiers from the source code
and filenames like `HACKING.md`.
## *Go*
> Not Golang, not GO, not GOLANG, not GoLang. It is Go in natural language,
> golang for others.
— [@rakyll](https://twitter.com/rakyll/status/1229850223184269312)
### Code And Naming
* Avoid `goto`.
* Avoid `init` and use explicit initialization functions instead.
* Avoid `new`, especially with structs.
* Constructors should validate their arguments and return meaningful errors.
As a corollary, avoid lazy initialization.
* Don't use naked `return`s.
* Don't use underscores in file and package names, unless they're build tags
or for tests. This is to prevent accidental build errors with weird tags.
* Don't write code with more than four (**4**) levels of indentation. Just
like [Linus said], plus an additional level for an occasional error check or
struct initialization.
* Eschew external dependencies, including transitive, unless
absolutely necessary.
* Name benchmarks and tests using the same convention as examples. For
example:
```go
func TestFunction(t *testing.T) { /* … */ }
func TestFunction_suffix(t *testing.T) { /* … */ }
func TestType_Method(t *testing.T) { /* … */ }
func TestType_Method_suffix(t *testing.T) { /* … */ }
```
* Name the deferred errors (e.g. when closing something) `cerr`.
* No shadowing, since it can often lead to subtle bugs, especially with
errors.
* Prefer constants to variables where possible. Reduce global variables. Use
[constant errors] instead of `errors.New`.
* Use linters.
* Use named returns to improve readability of function signatures.
* Write logs and error messages in lowercase only to make it easier to `grep`
logs and error messages without using the `-i` flag.
[constant errors]: https://dave.cheney.net/2016/04/07/constant-errors
[Linus said]: https://www.kernel.org/doc/html/v4.17/process/coding-style.html#indentation
### Commenting
* See also the *Text, Including Comments* section below.
* Document everything, including unexported top-level identifiers, to build
a habit of writing documentation.
* Don't put identifiers into any kind of quotes.
* Put comments above the documented entity, **not** to the side, to improve
readability.
* When a method implements an interface, start the doc comment with the
standard template:
```go
// Foo implements the Fooer interface for *foo.
func (f *foo) Foo() {
// …
}
```
### Formatting
* Add an empty line before `break`, `continue`, `fallthrough`, and `return`,
unless it's the only statement in that block.
* Use `gofumpt --extra -s`.
* Write slices of struct like this:
```go
ts := []T{{
Field: Value0,
// …
}, {
Field: Value1,
// …
}, {
Field: Value2,
// …
}}
```
### Recommended Reading
* <https://github.com/golang/go/wiki/CodeReviewComments>.
* <https://github.com/golang/go/wiki/TestComments>.
* <https://go-proverbs.github.io/>
## *Markdown*
* **TODO(a.garipov):** Define our *Markdown* conventions.
## Shell Scripting
* Avoid bashisms, prefer *POSIX* features only.
* Prefer `'raw strings'` to `"double quoted strings"` whenever possible.
* Put spaces within `$( cmd )`, `$(( expr ))`, and `{ cmd; }`.
* `snake_case`, not `camelCase`.
* Use `set -e -f -u` and also `set -x` in verbose mode.
* Use the `"$var"` form instead of the `$var` form, unless word splitting is
required.
## Text, Including Comments
* End sentences with appropriate punctuation.
* Headers should be written with all initial letters capitalized, except for
references to variable names that start with a lowercase letter.
* Start sentences with a capital letter, unless the first word is a reference
to a variable name that starts with a lowercase letter.
* Text should wrap at eighty (**80**) columns to be more readable, to use
a common standard, and to allow editing or diffing side-by-side without
wrapping.
The only exception are long hyperlinks.
* Use U.S. English, as it is the most widely used variety of English in the
code right now as well as generally.
* Use double spacing between sentences to make sentence borders more clear.
* Use the serial comma (a.k.a. *Oxford* comma) to improve comprehension,
decrease ambiguity, and use a common standard.
* Write todos like this:
```go
// TODO(usr1): Fix the frobulation issue.
```
Or, if several people need to look at the code:
```go
// TODO(usr1, usr2): Fix the frobulation issue.
```
## *YAML*
* **TODO(a.garipov):** Define naming conventions for schema names in our
*OpenAPI* *YAML* file. And just generally OpenAPI conventions.
* **TODO(a.garipov):** Find a *YAML* formatter or write our own.
* All strings, including keys, must be quoted. Reason: the [*NO-rway Law*].
* Indent with two (**2**) spaces. *YAML* documents can get pretty
deeply-nested.
* No extra indentation in multiline arrays:
```yaml
'values':
- 'value-1'
- 'value-2'
- 'value-3'
```
* Prefer single quotes for strings to prevent accidental escaping, unless
escaping is required or there are single quotes inside the string (e.g. for
*GitHub Actions*).
* Use `>` for multiline strings, unless you need to keep the line breaks.
[*NO-rway Law*]: https://news.ycombinator.com/item?id=17359376

View File

@@ -26,13 +26,15 @@
# * DOCKER_IMAGE_NAME - adguard/adguard-home
# * DOCKER_OUTPUT - type=image,name=adguard/adguard-home,push=true
GOPATH := $(shell go env GOPATH)
GO := go
GOPATH := $(shell $(GO) env GOPATH)
PWD := $(shell pwd)
TARGET=AdGuardHome
BASE_URL="https://static.adguard.com/adguardhome/$(CHANNEL)"
GPG_KEY := devteam@adguard.com
GPG_KEY_PASSPHRASE :=
GPG_CMD := gpg --detach-sig --default-key $(GPG_KEY) --pinentry-mode loopback --passphrase $(GPG_KEY_PASSPHRASE)
VERBOSE := -v
# See release target
DIST_DIR=dist
@@ -56,15 +58,17 @@ ifeq ($(CHANNEL),edge)
endif
# goreleaser command depends on the $CHANNEL
GORELEASER_COMMAND=goreleaser release --rm-dist --skip-publish --snapshot
GORELEASER_COMMAND=goreleaser release --rm-dist --skip-publish --snapshot --parallelism 1
ifneq ($(CHANNEL),edge)
# If this is not an "edge" build, use normal release command
GORELEASER_COMMAND=goreleaser release --rm-dist --skip-publish
GORELEASER_COMMAND=goreleaser release --rm-dist --skip-publish --parallelism 1
endif
# Version properties
COMMIT=$(shell git rev-parse --short HEAD)
TAG_NAME=$(shell git describe --abbrev=0)
# TODO(a.garipov): The cut call is a temporary solution to trim
# prerelease versions. See the comment in .goreleaser.yml.
TAG_NAME=$(shell git describe --abbrev=0 | cut -c 1-8)
RELEASE_VERSION=$(TAG_NAME)
SNAPSHOT_VERSION=$(RELEASE_VERSION)-SNAPSHOT-$(COMMIT)
@@ -109,7 +113,7 @@ $(error DOCKER_IMAGE_NAME value is not set)
endif
# OS-specific flags
TEST_FLAGS := -race
TEST_FLAGS := --race $(VERBOSE)
ifeq ($(OS),Windows_NT)
TEST_FLAGS :=
endif
@@ -121,9 +125,9 @@ init:
git config core.hooksPath .githooks
build: client_with_deps
go mod download
PATH=$(GOPATH)/bin:$(PATH) go generate ./...
CGO_ENABLED=0 go build -ldflags="-s -w -X main.version=$(VERSION) -X main.channel=$(CHANNEL) -X main.goarm=$(GOARM)"
$(GO) mod download
PATH=$(GOPATH)/bin:$(PATH) $(GO) generate ./...
CGO_ENABLED=0 $(GO) build -ldflags="-s -w -X main.version=$(VERSION) -X main.channel=$(CHANNEL) -X main.goarm=$(GOARM)"
PATH=$(GOPATH)/bin:$(PATH) packr clean
client:
@@ -150,45 +154,40 @@ docker:
@echo Now you can run the docker image:
@echo docker run --name "adguard-home" -p 53:53/tcp -p 53:53/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp $(DOCKER_IMAGE_NAME)
lint: lint-js lint-go
lint: js-lint go-lint
lint-js: dependencies
@echo Running js linter
js-lint: dependencies
npm --prefix client run lint
lint-go:
@echo Running go linter
golangci-lint run
go-install-tools:
env GO=$(GO) sh ./scripts/go-install-tools.sh
test:
@echo Running JS unit-tests
go-lint:
env GO=$(GO) PATH="$$PWD/bin:$$PATH" sh ./scripts/go-lint.sh
test: js-test go-test
js-test:
npm run test --prefix client
@echo Running Go unit-tests
go test $(TEST_FLAGS) -v -coverprofile=coverage.txt -covermode=atomic ./...
go-test:
$(GO) test $(TEST_FLAGS) --coverprofile coverage.txt ./...
ci: client_with_deps
go mod download
$(GO) mod download
$(MAKE) test
dependencies:
npm --prefix client ci
go mod download
$(GO) mod download
clean:
# make build output
rm -f AdGuardHome
rm -f AdGuardHome.exe
# tests output
rm -rf data
rm -f coverage.txt
# static build output
rm -rf build
# dist folder
rm -rf $(DIST_DIR)
# client deps
rm -rf client/node_modules
# packr-generated files
PATH=$(GOPATH)/bin:$(PATH) packr clean || true
rm -f ./AdGuardHome ./AdGuardHome.exe ./coverage.txt
rm -f -r ./build/ ./client/node_modules/ ./data/ ./$(DIST_DIR)/
# Set the GOPATH explicitly in case make clean is called from under sudo
# after a Docker build.
env PATH="$(GOPATH)/bin:$$PATH" packr clean
rm -f -r ./bin/
docker-multi-arch:
DOCKER_CLI_EXPERIMENTAL=enabled \
@@ -206,7 +205,7 @@ docker-multi-arch:
@echo docker run --name "adguard-home" -p 53:53/tcp -p 53:53/udp -p 80:80/tcp -p 443:443/tcp -p 853:853/tcp -p 3000:3000/tcp $(DOCKER_IMAGE_NAME)
release: client_with_deps
go mod download
$(GO) mod download
@echo Starting release build: version $(VERSION), channel $(CHANNEL)
CHANNEL=$(CHANNEL) $(GORELEASER_COMMAND)
$(call write_version_file,$(VERSION))

View File

@@ -60,18 +60,34 @@ It operates as a DNS server that re-routes tracking domains to a "black hole," t
* [Other](#help-other)
* [Projects that use AdGuardHome](#uses)
* [Acknowledgments](#acknowledgments)
* [Privacy](#privacy)
<a id="getting-started"></a>
## Getting Started
Please read the **[Getting Started](https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started)** article on our Wiki to learn how to install AdGuard Home, and how to configure your devices to use it.
### Automated install (Linux and Mac)
Run the following command in your terminal:
```
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh
```
### Alternative methods
#### Manual installation
Please read the **[Getting Started](https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started)** article on our Wiki to learn how to install AdGuard Home manually, and how to configure your devices to use it.
#### Docker
You can use our [official Docker image](https://hub.docker.com/r/adguard/adguardhome).
#### Snap Store
If you're running **Linux**, there's a secure and easy way to install AdGuard Home - you can get it from the [Snap Store](https://snapcraft.io/adguard-home).
Alternatively, you can use our [official Docker image](https://hub.docker.com/r/adguard/adguardhome).
### Guides
* [FAQ](https://github.com/AdguardTeam/AdGuardHome/wiki/FAQ)
* [Configuration](https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration)
* [AdGuard Home as a DNS-over-HTTPS or DNS-over-TLS server](https://github.com/AdguardTeam/AdGuardHome/wiki/Encryption)
* [How to install and run AdGuard Home on Raspberry Pi](https://github.com/AdguardTeam/AdGuardHome/wiki/Raspberry-Pi)
@@ -155,9 +171,6 @@ You will need this to build AdGuard Home:
* [node.js](https://nodejs.org/en/download/) v10.16.2 or later.
* [npm](https://www.npmjs.com/) v6.14 or later.
Optionally, for Go devs:
* [golangci-lint](https://github.com/golangci/golangci-lint)
### Building
Open Terminal and execute these commands:
@@ -170,7 +183,7 @@ make
Check the [`Makefile`](https://github.com/AdguardTeam/AdGuardHome/blob/master/Makefile) to learn about other commands.
**Building for a different platform.** You can build AdGuard for any OS/ARCH just like any other Golang project.
**Building for a different platform.** You can build AdGuard for any OS/ARCH just like any other Go project.
In order to do this, specify `GOOS` and `GOARCH` env variables before running make.
For example:
@@ -228,13 +241,17 @@ There are three options how you can install an unstable version:
1. [Snap Store](https://snapcraft.io/adguard-home) -- look for "beta" and "edge" channels there.
2. [Docker Hub](https://hub.docker.com/r/adguard/adguardhome) -- look for "beta" and "edge" tags there.
3. Standalone builds. Look for the available builds below.
3. Standalone builds. Use the automated installation script or look for the available builds below.
There are three options how you can install an unstable version.
Beta:
```
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s beta
```
1. You can either install AdGuard Home from "beta" or "edge" distribution channel which we update periodically. If you're already using stable version of AdGuard Home, just replace the executable file with a new one.
2. You can use the Docker image from the `edge` tag, which is synced with the repo master branch.
3. You can install AdGuard Home from `beta` or `edge` channels on the Snap Store.
Edge:
```
curl -sSL https://raw.githubusercontent.com/AdguardTeam/AdGuardHome/master/scripts/install.sh | sh -s edge
```
* Beta channel builds
* Linux: [64-bit](https://static.adguard.com/adguardhome/beta/AdGuardHome_linux_amd64.tar.gz), [32-bit](https://static.adguard.com/adguardhome/beta/AdGuardHome_linux_386.tar.gz)
@@ -273,7 +290,7 @@ Here is a link to AdGuard Home project: https://crowdin.com/project/adguard-appl
Here's what you can also do to contribute:
1. [Look for issues](https://github.com/AdguardTeam/AdGuardHome/issues?q=is%3Aissue+is%3Aopen+label%3A%22help+wanted%22+) marked as "help wanted".
2. Actualize the list of *Blocked services*. It it can be found in [dnsfilter/blocked_services.go](https://github.com/AdguardTeam/AdGuardHome/blob/master/dnsfilter/blocked_services.go).
2. Actualize the list of *Blocked services*. It it can be found in [dnsfilter/blocked_services.go](https://github.com/AdguardTeam/AdGuardHome/blob/master/internal/dnsfilter/blocked_services.go).
3. Actualize the list of known *trackers*. It it can be found in [client/src/helpers/trackers/adguard.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/src/helpers/trackers/adguard.json).
4. Actualize the list of vetted *blocklists*. It it can be found in [client/src/helpers/filters/filters.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/src/helpers/filters/filters.json).
@@ -307,3 +324,8 @@ This software wouldn't have been possible without:
You might have seen that [CoreDNS](https://coredns.io) was mentioned here before — we've stopped using it in AdGuardHome. While we still use it on our servers for [AdGuard DNS](https://adguard.com/adguard-dns/overview.html) service, it seemed like an overkill for Home as it impeded with Home features that we plan to implement.
For a full list of all node.js packages in use, please take a look at [client/package.json](https://github.com/AdguardTeam/AdGuardHome/blob/master/client/package.json) file.
<a id="privacy"></a>
## Privacy
Our main idea is that you are the one, who should be in control of your data. So it is only natural, that AdGuard Home does not collect any usage statistics, and does not use any web services unless you configure it to do so. Full policy with every bit that _could in theory be_ sent by AdGuard Home is available [here](https://adguard.com/en/privacy/home.html).

2
client/constants.js vendored
View File

@@ -3,7 +3,7 @@ const BUILD_ENVS = {
prod: 'production',
};
const BASE_URL = '/control';
const BASE_URL = 'control';
module.exports = {
BUILD_ENVS,

349
client/package-lock.json generated vendored
View File

@@ -2014,72 +2014,168 @@
}
}
},
"@nivo/axes": {
"version": "0.49.1",
"resolved": "https://registry.npmjs.org/@nivo/axes/-/axes-0.49.1.tgz",
"integrity": "sha512-2ZqpKtnZ9HE30H+r565VCrypKRQzAoMbAg1hsht88dlNQRtghBSxbAS0Y4IUW/wgN/AzvOIBJHvxH7bgaB8Oow==",
"@nivo/annotations": {
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/annotations/-/annotations-0.64.0.tgz",
"integrity": "sha512-b9VAVuAn2HztOZckU2GcBwptjCobYV5VgX/jwZTSFeZFLtjZza+QinNL2AbQ2cnmeU3nVCw1dTbJMMZ9fTCCNQ==",
"requires": {
"@nivo/core": "0.49.0",
"d3-format": "^1.3.2",
"@nivo/colors": "0.64.0",
"lodash": "^4.17.11",
"react-spring": "^8.0.27"
}
},
"@nivo/axes": {
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/axes/-/axes-0.64.0.tgz",
"integrity": "sha512-Pm+Y3C67OuBb3JqHpyFKWAoPAnNojb1s5/LFQYVYN1QpKyjeqilGAoLCjHK6ckgfzreiGf7NG+oBgpH8Ncz2fQ==",
"requires": {
"@nivo/scales": "0.64.0",
"d3-format": "^1.4.4",
"d3-time": "^1.0.11",
"d3-time-format": "^2.1.3",
"lodash": "^4.17.4",
"react-motion": "^0.5.2",
"recompose": "^0.26.0"
"react-spring": "^8.0.27"
},
"dependencies": {
"d3-format": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
"integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ=="
},
"d3-time": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
"integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
},
"d3-time-format": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
"integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
"requires": {
"d3-time": "1"
}
}
}
},
"@nivo/colors": {
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/colors/-/colors-0.64.0.tgz",
"integrity": "sha512-3CKIkSjKgwSgBsiJoTlZpFUUpaGTl60pF6rFsIiFT30os9jMxP/J4ikQGQ/vMLPTXskZYoxByaMHGKJy5wypqg==",
"requires": {
"d3-color": "^1.2.3",
"d3-scale": "^3.0.0",
"d3-scale-chromatic": "^1.3.3",
"lodash.get": "^4.4.2",
"lodash.isplainobject": "^4.0.6",
"react-motion": "^0.5.2"
}
},
"@nivo/core": {
"version": "0.49.0",
"resolved": "https://registry.npmjs.org/@nivo/core/-/core-0.49.0.tgz",
"integrity": "sha512-TCPMUO2aJ7fI+ZB6t3d3EBQtNxJnTzaxLJsrVyn/3AQIjUwccAeo2aIy81wLBGWGtlGNUDNdAbnFzXiJosH0yg==",
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/core/-/core-0.64.0.tgz",
"integrity": "sha512-tupETbvxgv4B9y3pcXy/lErMwY2aZht+FKSyah1dPFd88LnMD/DOL+to6ociBHmpLQNUMA7wid6R7BlXRY/bmg==",
"requires": {
"d3-color": "^1.0.3",
"d3-format": "^1.3.2",
"d3-color": "^1.2.3",
"d3-format": "^1.4.4",
"d3-hierarchy": "^1.1.8",
"d3-interpolate": "^1.3.2",
"d3-scale": "^2.1.2",
"d3-interpolate": "^2.0.1",
"d3-scale": "^3.0.0",
"d3-scale-chromatic": "^1.3.3",
"d3-shape": "^1.2.2",
"d3-shape": "^1.3.5",
"d3-time-format": "^2.1.3",
"lodash": "^4.17.4",
"react-measure": "^2.0.2",
"react-motion": "^0.5.2",
"recompose": "^0.26.0"
"lodash": "^4.17.11",
"react-spring": "^8.0.27",
"recompose": "^0.30.0",
"resize-observer-polyfill": "^1.5.1"
},
"dependencies": {
"d3-format": {
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.5.tgz",
"integrity": "sha512-J0piedu6Z8iB6TbIGfZgDzfXxUFN3qQRMofy2oPdXzQibYGqPB/9iMcxr/TGalU+2RsyDO+U4f33id8tbnSRMQ=="
},
"d3-time": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
"integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
},
"d3-time-format": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
"integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
"requires": {
"d3-time": "1"
}
}
}
},
"@nivo/legends": {
"version": "0.49.0",
"resolved": "https://registry.npmjs.org/@nivo/legends/-/legends-0.49.0.tgz",
"integrity": "sha512-8KbUFYozqwD+/rj4in0mnF9b9CuyNFjVgXqm2KW3ODVlWIgYgjTVlEhlg9VZIArFPlIyyAjEYC88YSRcALHugg==",
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/legends/-/legends-0.64.0.tgz",
"integrity": "sha512-L7Mp/of/jY4qE7ef6PXJ8/e3aASBTfsf5BTOh3imSXZT6I4hXa5ppmGAgZ0gOSpcPXuMEjBc0aSIEJoeoytQ/g==",
"requires": {
"lodash": "^4.17.4",
"recompose": "^0.26.0"
"@nivo/core": "0.64.0",
"lodash": "^4.17.11",
"recompose": "^0.30.0"
}
},
"@nivo/line": {
"version": "0.49.1",
"resolved": "https://registry.npmjs.org/@nivo/line/-/line-0.49.1.tgz",
"integrity": "sha512-wKkOmpnwK2psmZbJReDq+Eh/WV9r1JA8V4Vl4eIRuf971CW0KUT9nCAoc/FcKio0qsiq5wyFt3J5LuAhfzlV/w==",
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/line/-/line-0.64.0.tgz",
"integrity": "sha512-WkQU28ZL9Mxq42AdmybWe+2qFh/TiUXu+7e6nj41e/8DO95Guxg1XQ+i5zQKuw/UZlqXZs6WOsMW8EMNE4GzXw==",
"requires": {
"@nivo/axes": "0.49.1",
"@nivo/core": "0.49.0",
"@nivo/legends": "0.49.0",
"@nivo/scales": "0.49.0",
"d3-format": "^1.3.2",
"d3-scale": "^2.1.2",
"d3-shape": "^1.2.2",
"lodash": "^4.17.4",
"react-motion": "^0.5.2",
"recompose": "^0.26.0"
"@nivo/annotations": "0.64.0",
"@nivo/axes": "0.64.0",
"@nivo/colors": "0.64.0",
"@nivo/legends": "0.64.0",
"@nivo/scales": "0.64.0",
"@nivo/tooltip": "0.64.0",
"@nivo/voronoi": "0.64.0",
"d3-shape": "^1.3.5",
"react-spring": "^8.0.27"
}
},
"@nivo/scales": {
"version": "0.49.0",
"resolved": "https://registry.npmjs.org/@nivo/scales/-/scales-0.49.0.tgz",
"integrity": "sha512-+5Leu4zX6mDSAunf4ZJHeqVlT+ZsqiKXLB6hT/u7r3GjxZP9A+n3rHePhIzikBiBRMlLjyiBlylLzhKBAYbGWQ==",
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/scales/-/scales-0.64.0.tgz",
"integrity": "sha512-Jbr1rlfe/gLCippndPaCM7doJzzx1K9oXPxS4JiyvrIUkQoMWiozymZQdEp8kgigI6uwWu5xvPwCOFXalCIhKg==",
"requires": {
"d3-scale": "^2.1.2",
"d3-scale": "^3.0.0",
"d3-time-format": "^2.1.3",
"lodash": "^4.17.4"
"lodash": "^4.17.11"
},
"dependencies": {
"d3-time": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
"integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
},
"d3-time-format": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.3.0.tgz",
"integrity": "sha512-guv6b2H37s2Uq/GefleCDtbe0XZAuy7Wa49VGkPVPMfLL9qObgBST3lEHJBMUp8S7NdLQAGIvr2KXk8Hc98iKQ==",
"requires": {
"d3-time": "1"
}
}
}
},
"@nivo/tooltip": {
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/tooltip/-/tooltip-0.64.0.tgz",
"integrity": "sha512-iGsuCi42uw/8F7OVvPyWdQgxJXVOPTEdtl2WK2FlSJIH7bfnEsZ+R/lTdElY2JAvGHuNW6hQwpNUZdC/2rOatg==",
"requires": {
"react-spring": "^8.0.27"
}
},
"@nivo/voronoi": {
"version": "0.64.0",
"resolved": "https://registry.npmjs.org/@nivo/voronoi/-/voronoi-0.64.0.tgz",
"integrity": "sha512-YdNRzD2rFc1NcAZe9D8gxos+IT2CRPOV/7fUfBCG9SoNw1TtSwSKtEs4xsxmUFmLT1FadWcyKeKuhgJUQnof/A==",
"requires": {
"@nivo/core": "0.64.0",
"d3-delaunay": "^5.1.1",
"d3-scale": "^3.0.0",
"recompose": "^0.30.0"
}
},
"@nodelib/fs.scandir": {
@@ -2970,12 +3066,6 @@
"pkg-up": "^2.0.0"
}
},
"caniuse-lite": {
"version": "1.0.30001062",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001062.tgz",
"integrity": "sha512-ei9ZqeOnN7edDrb24QfJ0OZicpEbsWxv7WusOiQGz/f2SfvBgHHbOEwBJ8HKGVSyx8Z6ndPjxzR6m0NQq+0bfw==",
"dev": true
},
"postcss": {
"version": "7.0.30",
"resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.30.tgz",
@@ -3832,9 +3922,9 @@
}
},
"caniuse-lite": {
"version": "1.0.30001059",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001059.tgz",
"integrity": "sha512-oOrc+jPJWooKIA0IrNZ5sYlsXc7NP7KLhNWrSGEJhnfSzDvDJ0zd3i6HXsslExY9bbu+x0FQ5C61LcqmPt7bOQ==",
"version": "1.0.30001165",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001165.tgz",
"integrity": "sha512-8cEsSMwXfx7lWSUMA2s08z9dIgsnR5NAqjXP23stdsU3AUWkCr/rr4s4OFtHXn5XXr6+7kam3QFVoYyXNPdJPA==",
"dev": true
},
"capture-exit": {
@@ -4681,24 +4771,27 @@
"dev": true
},
"d3-array": {
"version": "1.2.4",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.4.tgz",
"integrity": "sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw=="
},
"d3-collection": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.7.tgz",
"integrity": "sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A=="
"version": "2.8.0",
"resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.8.0.tgz",
"integrity": "sha512-6V272gsOeg7+9pTW1jSYOR1QE37g95I3my1hBmY+vOUNHRrk9yt4OTz/gK7PMkVAVDrYYq4mq3grTiZ8iJdNIw=="
},
"d3-color": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.4.1.tgz",
"integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q=="
},
"d3-delaunay": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-5.3.0.tgz",
"integrity": "sha512-amALSrOllWVLaHTnDLHwMIiz0d1bBu9gZXd1FiLfXf8sHcX9jrcj81TVZOqD4UX7MgBZZ07c8GxzEgBpJqc74w==",
"requires": {
"delaunator": "4"
}
},
"d3-format": {
"version": "1.4.4",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.4.4.tgz",
"integrity": "sha512-TWks25e7t8/cqctxCmxpUuzZN11QxIA7YrMbram94zMQ0PXjE4LVIMe/f6a4+xxL8HQ3OsAFULOINQi1pE62Aw=="
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/d3-format/-/d3-format-2.0.0.tgz",
"integrity": "sha512-Ab3S6XuE/Q+flY96HXT0jOXcM4EAClYFnRGY5zsjRGNy6qCYrQsMffs7cV5Q9xejb35zxW5hf/guKw34kvIKsA=="
},
"d3-hierarchy": {
"version": "1.1.9",
@@ -4706,11 +4799,11 @@
"integrity": "sha512-j8tPxlqh1srJHAtxfvOUwKNYJkQuBFdM1+JAUfq6xqH5eAqf93L7oG1NVqDa4CpFZNvnNKtCYEUC8KY9yEn9lQ=="
},
"d3-interpolate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
"integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-2.0.1.tgz",
"integrity": "sha512-c5UhwwTs/yybcmTpAVqwSFl6vrQ8JZJoT5F7xNFK9pymv5C0Ymcc9/LIJHtYIggg/yS9YHw8i8O8tgb9pupjeQ==",
"requires": {
"d3-color": "1"
"d3-color": "1 - 2"
}
},
"d3-path": {
@@ -4719,16 +4812,15 @@
"integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
},
"d3-scale": {
"version": "2.2.2",
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-2.2.2.tgz",
"integrity": "sha512-LbeEvGgIb8UMcAa0EATLNX0lelKWGYDQiPdHj+gLblGVhGLyNbaCn3EvrJf0A3Y/uOOU5aD6MTh5ZFCdEwGiCw==",
"version": "3.2.3",
"resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-3.2.3.tgz",
"integrity": "sha512-8E37oWEmEzj57bHcnjPVOBS3n4jqakOeuv1EDdQSiSrYnMCBdMd3nc4HtKk7uia8DUHcY/CGuJ42xxgtEYrX0g==",
"requires": {
"d3-array": "^1.2.0",
"d3-collection": "1",
"d3-format": "1",
"d3-interpolate": "1",
"d3-time": "1",
"d3-time-format": "2"
"d3-array": "^2.3.0",
"d3-format": "1 - 2",
"d3-interpolate": "1.2.0 - 2",
"d3-time": "1 - 2",
"d3-time-format": "2 - 3"
}
},
"d3-scale-chromatic": {
@@ -4738,6 +4830,16 @@
"requires": {
"d3-color": "1",
"d3-interpolate": "1"
},
"dependencies": {
"d3-interpolate": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.4.0.tgz",
"integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==",
"requires": {
"d3-color": "1"
}
}
}
},
"d3-shape": {
@@ -4749,16 +4851,16 @@
}
},
"d3-time": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.1.0.tgz",
"integrity": "sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA=="
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/d3-time/-/d3-time-2.0.0.tgz",
"integrity": "sha512-2mvhstTFcMvwStWd9Tj3e6CEqtOivtD8AUiHT8ido/xmzrI9ijrUUihZ6nHuf/vsScRBonagOdj0Vv+SEL5G3Q=="
},
"d3-time-format": {
"version": "2.2.3",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.2.3.tgz",
"integrity": "sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-3.0.0.tgz",
"integrity": "sha512-UXJh6EKsHBTjopVqZBhFysQcoXSv/5yLONZvkQ5Kk3qbwiUYkdX17Xa1PT6U1ZWXGGfB1ey5L8dKMlFq2DO0Ag==",
"requires": {
"d3-time": "1"
"d3-time": "1 - 2"
}
},
"damerau-levenshtein": {
@@ -4963,6 +5065,11 @@
}
}
},
"delaunator": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz",
"integrity": "sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag=="
},
"delayed-stream": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz",
@@ -5253,11 +5360,21 @@
"dev": true
},
"encoding": {
"version": "0.1.12",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.12.tgz",
"integrity": "sha1-U4tm8+5izRq1HsMjgp0flIDHS+s=",
"version": "0.1.13",
"resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz",
"integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==",
"requires": {
"iconv-lite": "~0.4.13"
"iconv-lite": "^0.6.2"
},
"dependencies": {
"iconv-lite": {
"version": "0.6.2",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz",
"integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==",
"requires": {
"safer-buffer": ">= 2.1.2 < 3.0.0"
}
}
}
},
"end-of-stream": {
@@ -6766,11 +6883,6 @@
"integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==",
"dev": true
},
"get-node-dimensions": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/get-node-dimensions/-/get-node-dimensions-1.2.1.tgz",
"integrity": "sha512-2MSPMu7S1iOTL+BOa6K1S62hB2zUAYNF/lV0gSVlOaacd087lc6nR1H1r0e3B1CerTo+RceOmi1iJW+vp21xcQ=="
},
"get-package-type": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/get-package-type/-/get-package-type-0.1.0.tgz",
@@ -7430,6 +7542,7 @@
"version": "0.4.24",
"resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz",
"integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==",
"dev": true,
"requires": {
"safer-buffer": ">= 2.1.2 < 3"
}
@@ -10194,6 +10307,16 @@
"resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz",
"integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ=="
},
"lodash.get": {
"version": "4.4.2",
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
},
"lodash.isplainobject": {
"version": "4.0.6",
"resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz",
"integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs="
},
"lodash.sortby": {
"version": "4.7.0",
"resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
@@ -12403,17 +12526,6 @@
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
"integrity": "sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA=="
},
"react-measure": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/react-measure/-/react-measure-2.3.0.tgz",
"integrity": "sha512-dwAvmiOeblj5Dvpnk8Jm7Q8B4THF/f1l1HtKVi0XDecsG6LXwGvzV5R1H32kq3TW6RW64OAf5aoQxpIgLa4z8A==",
"requires": {
"@babel/runtime": "^7.2.0",
"get-node-dimensions": "^1.2.1",
"prop-types": "^15.6.2",
"resize-observer-polyfill": "^1.5.0"
}
},
"react-modal": {
"version": "3.11.2",
"resolved": "https://registry.npmjs.org/react-modal/-/react-modal-3.11.2.tgz",
@@ -12576,6 +12688,15 @@
}
}
},
"react-spring": {
"version": "8.0.27",
"resolved": "https://registry.npmjs.org/react-spring/-/react-spring-8.0.27.tgz",
"integrity": "sha512-nDpWBe3ZVezukNRandTeLSPcwwTMjNVu1IDq9qA/AMiUqHuRN4BeSWvKr3eIxxg1vtiYiOLy4FqdfCP5IoP77g==",
"requires": {
"@babel/runtime": "^7.3.1",
"prop-types": "^15.5.8"
}
},
"react-table": {
"version": "6.11.4",
"resolved": "https://registry.npmjs.org/react-table/-/react-table-6.11.4.tgz",
@@ -12663,13 +12784,15 @@
}
},
"recompose": {
"version": "0.26.0",
"resolved": "https://registry.npmjs.org/recompose/-/recompose-0.26.0.tgz",
"integrity": "sha512-KwOu6ztO0mN5vy3+zDcc45lgnaUoaQse/a5yLVqtzTK13czSWnFGmXbQVmnoMgDkI5POd1EwIKSbjU1V7xdZog==",
"version": "0.30.0",
"resolved": "https://registry.npmjs.org/recompose/-/recompose-0.30.0.tgz",
"integrity": "sha512-ZTrzzUDa9AqUIhRk4KmVFihH0rapdCSMFXjhHbNrjAWxBuUD/guYlyysMnuHjlZC/KRiOKRtB4jf96yYSkKE8w==",
"requires": {
"@babel/runtime": "^7.0.0",
"change-emitter": "^0.1.2",
"fbjs": "^0.8.1",
"hoist-non-react-statics": "^2.3.1",
"react-lifecycles-compat": "^3.0.2",
"symbol-observable": "^1.0.4"
}
},
@@ -15067,9 +15190,9 @@
}
},
"ua-parser-js": {
"version": "0.7.21",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.21.tgz",
"integrity": "sha512-+O8/qh/Qj8CgC6eYBVBykMrNtp5Gebn4dlGD/kKXVkJNDwyrAwSIqwz8CDf+tsAIWVycKcku6gIXJ0qwx/ZXaQ=="
"version": "0.7.22",
"resolved": "https://registry.npmjs.org/ua-parser-js/-/ua-parser-js-0.7.22.tgz",
"integrity": "sha512-YUxzMjJ5T71w6a8WWVcMGM6YWOTX27rCoIQgLXiWaxqXSx9D7DNjiGWn1aJIRSQ5qr0xuhra77bSIh6voR/46Q=="
},
"unherit": {
"version": "1.1.3",
@@ -16086,9 +16209,9 @@
}
},
"whatwg-fetch": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.0.0.tgz",
"integrity": "sha512-9GSJUgz1D4MfyKU7KRqwOjXCXTqWdFNvEr7eUBYchQiVc744mqK/MzXPNR2WsPkmkOa4ywfg8C2n8h+13Bey1Q=="
"version": "3.5.0",
"resolved": "https://registry.npmjs.org/whatwg-fetch/-/whatwg-fetch-3.5.0.tgz",
"integrity": "sha512-jXkLtsR42xhXg7akoDKvKWE40eJeI+2KZqcp2h3NsOrRnDvtWX36KcKl30dy+hxECivdk2BVUHVNrPtoMBUx6A=="
},
"whatwg-mimetype": {
"version": "2.3.0",

2
client/package.json vendored
View File

@@ -13,7 +13,7 @@
"test:watch": "jest --watch"
},
"dependencies": {
"@nivo/line": "^0.49.1",
"@nivo/line": "^0.64.0",
"axios": "^0.19.2",
"classnames": "^2.2.6",
"date-fns": "^1.29.0",

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Налады кліентаў",
"example_upstream_reserved": "Вы можаце паказаць DNS-сервер <0>для канкрэтнага дамена(аў)</0>",
"example_upstream_comment": "Вы можаце паказаць каментар",
"upstream_parallel": "Ужыць адначасныя запыты да ўсіх сервераў для паскарэння апрацоўкі запыту",
"parallel_requests": "Паралельныя запыты",
"load_balancing": "Размеркаванне нагрузкі",
@@ -114,7 +115,7 @@
"average_processing_time": "Сярэдні час апрацоўкі запыту",
"average_processing_time_hint": "Сярэдні час для апрацоўкі запыту DNS у мілісекундах",
"block_domain_use_filters_and_hosts": "Блакаваць дамены з выкарыстаннем фільтраў і файлаў хастоў",
"filters_block_toggle_hint": "Вы можаце наладзіць правілы блакавання ў <a href='#filters'> \"Фільтрах\"</a>.",
"filters_block_toggle_hint": "Вы можаце наладзіць правілы блакавання ў <a> \"Фільтрах\"</a>.",
"use_adguard_browsing_sec": "Выкарыстаць Бяспечную навігацыю AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home праверыць, ці ўлучаны дамен у ўэб-службу бяспекі браўзара. Ён будзе выкарыстоўваць API, каб выканаць праверку: на сервер адсылаецца толькі кароткі прэфікс імя дамена SHA256.",
"use_adguard_parental": "Ужывайце модуль Бацькоўскага кантролю AdGuard ",
@@ -133,6 +134,7 @@
"dhcp_settings": "Налады DHCP",
"upstream_dns": "Upstream DNS-серверы",
"upstream_dns_help": "Увядзіце адрасы сервераў па адным у радку. <a>Даведацца больш </a> пра наладжванне DNS-сервераў.",
"upstream_dns_configured_in_file": "Наладжаны ў {{path}}",
"test_upstream_btn": "Тэст upstream сервераў",
"upstreams": "Upstreams",
"apply_btn": "Ужыць",
@@ -186,6 +188,7 @@
"example_upstream_regular": "звычайны DNS (наўзверх UDP)",
"example_upstream_dot": "зашыфраваны <a href='https://en.wikipedia.org/wiki/DNS_over_TLS' target='_blank'>DNS-па-над-TLS</a>",
"example_upstream_doh": "зашыфраваны <a href='https://en.wikipedia.org/wiki/DNS_over_HTTPS' target='_blank'>DNS-over-HTTPS</a>",
"example_upstream_doq": "зашыфраваны <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "вы можаце выкарыстоўваць <a href='https://dnscrypt.info/stamps/' target='_blank'>DNS Stamps</a> для <a href='https://dnscrypt.info/' target='_blank'>DNSCrypt</a> ці <a href='https://en.wikipedia.org/wiki/DNS_over_HTTPS' target='_blank'>DNS-over-HTTPS</a> рэзалвераў",
"example_upstream_tcp": "звычайны DNS (наўзверх TCP)",
"all_lists_up_to_date_toast": "Усе спісы ўжо абноўлены",
@@ -194,6 +197,10 @@
"dns_test_not_ok_toast": "Сервер \"{{key}}\": немагчыма выкарыстоўваць, праверце слушнасць напісання",
"unblock": "Адблакаваць",
"block": "Заблакаваць",
"disallow_this_client": "Забараніць доступ гэтаму кліенту",
"allow_this_client": "Дазволіць доступ гэтаму кліенту",
"block_for_this_client_only": "Заблакаваць толькі для гэтага кліента",
"unblock_for_this_client_only": "Адблакаваць толькі для гэтага кліента",
"time_table_header": "Час",
"date": "Дата",
"domain_name_table_header": "Дамен",
@@ -235,6 +242,7 @@
"blocking_mode": "Рэжым блакавання",
"default": "Стандартны",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Нулёвы IP",
"custom_ip": "Свой IP",
"blocking_ipv4": "Блакаванне IPv4",
@@ -249,7 +257,8 @@
"rate_limit_desc": "Абмежаванне на колькасць запытаў у секунду для кожнага кліента (0 — неабмежавана)",
"blocking_ipv4_desc": "IP-адрас, што вяртаецца пры блакаванню A-запыту",
"blocking_ipv6_desc": "IP-адрас, што вяртаецца пры блакаванню AAAA-запыту",
"blocking_mode_default": "Стандартны: Адказвае з REFUSED, калі заблакавана правілам у стылі Adblock; адказвае з IP-адрасам, паказаным у правіле, калі заблакавана правілам у стылі /etc/hosts",
"blocking_mode_default": "Стандартны: Адказвае з нулёвым IP-адрасам (0.0.0.0 для A; :: для AAAA), калі заблакавана правілам у стылі Adblock; адказвае з IP-адрасам, паказаным у правіле, калі заблакавана правілам у стылі /etc/hosts-style",
"blocking_mode_refused": "REFUSED: Адказвае з кодам REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Адказвае з кодам NXDOMAIN\n",
"blocking_mode_null_ip": "Нулёвы IP: Адказвае з нулёвым IP-адрасам (0.0.0.0 для A; :: для AAAA)",
"blocking_mode_custom_ip": "Карыстацкі IP: Адказвае з ручна наладжаным IP-адрасам",
@@ -326,6 +335,8 @@
"encryption_https_desc": "Калі порт HTTPS наладжаны, ўэб-інтэрфейс адміністравання AdGuard Home будзе даступны праз HTTPS, а таксама DNS-over-HTTPS сервер будзе даступны па шляху '/dns-query'.",
"encryption_dot": "Порт DNS-over-TLS",
"encryption_dot_desc": "Калі гэты порт наладжаны, AdGuard Home запусціць DNS-over-TLS-сервер на гэтаму порту.",
"encryption_doq": "Порт DNS-over-QUIC",
"encryption_doq_desc": "Калі гэты порт наладжаны, AdGuard Home запусціць сервер DNS-over-QUIC на гэтым порце. Гэта эксперыментальна і можа быць ненадзейна. Апроч таго, не так шмат кліентаў падтрымвае гэты спосаб цяпер.",
"encryption_certificates": "Сертыфікаты",
"encryption_certificates_desc": "Для выкарыстання шыфравання вам трэба падаць валідны ланцужок SSL-сертыфікатаў для вашага дамена. Вы можаце атрымаць дармовы сертыфікат на <0>{{link}}</0> ці вы можаце купіць яго ў аднаго з давераных Цэнтраў Сертыфікацыі.",
"encryption_certificates_input": "Скапіюйце сюды сертыфікаты ў PEM-кадоўцы.",
@@ -404,7 +415,7 @@
"dns_privacy": "Зашыфраваны DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Ужывайце радок <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Ужывайце радок <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Звярніце ўвагу, што зашыфраваны DNS-пратакол падтрымваецца толькі на Android 9. Для іншых аперацыйных сістэм вам трэба будзе ўсталяваць дадатковае ПА.</0><0>Вось спіс ПА, якое вы можаце выкарыстоўваць.</0>",
"setup_dns_privacy_3": "<0>Вось спіс ПА, якое вы можаце выкарыстоўваць.</0>",
"setup_dns_privacy_android_1": "Android 9 натыўна падтрымвае DNS-over-TLS. Для налады, перайдзіце ў Налады → Сеціва і Інтэрнэт → Дадаткова → Персанальны DNS сервер, і ўвядзіце туды ваша даменавае імя.",
"setup_dns_privacy_android_2": "<0>AdGuard для Android</0> падтрымвае <1>DNS-over-HTTPS</1> і <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> дадае падтрымка <1>DNS-over-HTTPS</1> на Android.",
@@ -517,6 +528,7 @@
"check_reason": "Прычына: {{reason}}",
"check_rule": "Правіла: {{rule}}",
"check_service": "Назва сэрвісу: {{service}}",
"service_name": "Назва сэрвіса",
"check_not_found": "Не знойдзена ў вашым спісе фільтраў",
"client_confirm_block": "Вы ўпэўнены, што хочаце заблакаваць кліента \"{{ip}}\"?",
"client_confirm_unblock": "Вы ўпэўнены, што хочаце адблакаваць кліента \"{{ip}}\"?",
@@ -551,11 +563,12 @@
"cache_size_desc": "Памер кэша DNS (у байтах)",
"cache_ttl_min_override": "Перавызначыць мінімальны TTL",
"cache_ttl_max_override": "Перавызначыць максімальны TTL",
"enter_cache_size": "Увядзіце памер кэша",
"enter_cache_ttl_min_override": "Увядзіце мінімальны TTL",
"enter_cache_ttl_max_override": "Увядзіце максімальны TTL",
"enter_cache_size": "Увядзіце памер кэша (байты)",
"enter_cache_ttl_min_override": "Увядзіце мінімальны TTL (секунды)",
"enter_cache_ttl_max_override": "Увядзіце максімальны TTL (секунды)",
"cache_ttl_min_override_desc": "Перавызначыць TTL-значэнне (мінімальнае), атрыманае з upstream-сервера",
"cache_ttl_max_override_desc": "Перавызначыць TTL-значэнне (максімальнае), атрыманае з сервера для выгрузкі даных",
"cache_ttl_max_override_desc": "Усталюйце максімальнае TTL-значэнне (секунды) для запісаў у кэшы DNS",
"ttl_cache_validation": "Мінімальнае значэнне TTL кэша павінна быць менш ці роўна максімальнаму значэнню",
"filter_category_general": "Галоўныя",
"filter_category_security": "Бяспека",
"filter_category_regional": "Рэгіянальныя",
@@ -567,5 +580,8 @@
"setup_config_to_enable_dhcp_server": "Наладзіць канфігурацыю для ўключэння DHCP-сервера",
"original_response": "Першапачатковы адказ",
"click_to_view_queries": "Націсніце, каб прагледзець запыты",
"port_53_faq_link": "Порт 53 часта заняты службамі \"DNSStubListener\" ці \"systemd-resolved\". Азнаёмцеся з <0>інструкцыяй</0> пра тое, як гэта дазволіць."
"port_53_faq_link": "Порт 53 часта заняты службамі \"DNSStubListener\" ці \"systemd-resolved\". Азнаёмцеся з <0>інструкцыяй</0> пра тое, як гэта дазволіць.",
"adg_will_drop_dns_queries": "AdGuard Home скіне ўсе DNS-запыты ад гэтага кліента.",
"client_not_in_allowed_clients": "Кліент не дазволены, бо яго няма ў спісе \"Дазволеных кліентаў\".",
"experimental": "Эксперыментальны"
}

View File

@@ -71,7 +71,7 @@
"average_processing_time": "Средно време за обработка",
"average_processing_time_hint": "Средно време за обработка на DNS заявки в милисекунди",
"block_domain_use_filters_and_hosts": "Блокирани домейни - общи и местни филтри",
"filters_block_toggle_hint": "Може да зададете собствени настройки в <a href='#filters'>Филтри</a>.",
"filters_block_toggle_hint": "Може да зададете собствени настройки в <a>Филтри</a>.",
"use_adguard_browsing_sec": "Използвайте AdGuard модул за сигурността",
"use_adguard_browsing_sec_hint": "Модул Сигурност в AdGuard Home проверява всяка страница която отваряте дали е в черните списъци застрашаващи вашата сигурност. Използва се програмен интерфейс който защитава вашата анонимност и изпраща само SHA256 сума базирана на част от домейна който посещавате.",
"use_adguard_parental": "Включи AdGuard Родителски Надзор",

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Nastavení klienta",
"example_upstream_reserved": "Můžete zadat DNS upstream <0>pro konkrétní doménu(y)</0>",
"example_upstream_comment": "Můžete zadat komentář",
"upstream_parallel": "Použijte paralelní požadavky na urychlení řešení simultánním dotazováním na všechny navazující servery",
"parallel_requests": "Paralelní požadavky",
"load_balancing": "Optimalizace vytížení",
@@ -114,7 +115,7 @@
"average_processing_time": "Průměrný čas zpracování",
"average_processing_time_hint": "Průměrný čas zpracování požadavků DNS v milisekundách",
"block_domain_use_filters_and_hosts": "Blokovat domény pomocí filtrů a seznamů adres",
"filters_block_toggle_hint": "Pravidla blokování můžete nastavit v nastavení <a href='#filters'>Filtry</a>.",
"filters_block_toggle_hint": "Pravidla blokování můžete nastavit v nastavení <a>Filtry</a>.",
"use_adguard_browsing_sec": "Použít službu AdGuard Bezpečné prohlížení",
"use_adguard_browsing_sec_hint": "AdGuard Home zkontroluje, zda je doména na seznamu zakázaných ve službě Bezpečné prohlížení. Použije vyhledávací API přátelské k ochraně soukromí na provedení kontroly: na server je odeslána pouze krátká předpona SHA256 otisku názvu domény.",
"use_adguard_parental": "Použít službu AdGuard Rodičovská kontrola",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Blokování IPv6",
"dns_over_https": "DNS přes HTTPS",
"dns_over_tls": "DNS přes TLS",
"download_mobileconfig_doh": "Stáhnout .mobileconfig pro DNS skrze HTTPS",
"download_mobileconfig_dot": "Stáhnout .mobileconfig pro DNS skrze TLS",
"plain_dns": "Čisté DNS",
"form_enter_rate_limit": "Zadejte rychlostní limit",
"rate_limit": "Rychlostní limit",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Počet požadavků za sekundu, které smí jeden klient provádět (0: neomezeno)",
"blocking_ipv4_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu A",
"blocking_ipv6_desc": "IP adresa, která se má vrátit v případě blokovaného požadavku typu AAAA",
"blocking_mode_default": "Výchozí: Odezva pomocí REFUSED, pokud je blokováno pravidlem ve stylu Adblock; odezva pomocí IP adresy uvedené v pravidle, pokud je blokováno pravidlem /etc/hosts-style",
"blocking_mode_default": "Výchozí: Odezva s nulovou IP adresou (0.0.0.0 pro A; :: pro AAAA), pokud je blokováno pravidlem ve stylu Adblock; odezva pomocí IP adresy uvedené v pravidle, pokud je blokováno pravidlem /etc/hosts-style",
"blocking_mode_refused": "REFUSED: Odezva pomocí kódu REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Odezva s kódem NXDOMAIN",
"blocking_mode_null_ip": "Nulová IP: Odezva s nulovou IP adresou (0.0.0.0 pro A; :: pro AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "Soukromí DNS",
"setup_dns_privacy_1": "<0>DNS-přes-TLS:</0> Použít <1>{{address}}</1> řetězec.",
"setup_dns_privacy_2": "<0>DNS-přes-HTTPS:</0> Použít <1>{{address}}</1> řetězec.",
"setup_dns_privacy_3": "<0>Upozorňujeme, že šifrované protokoly DNS jsou podporovány pouze v systému Android 9. Proto je třeba nainstalovat další software pro jiné operační systémy.</0><0>Zde je seznam softwaru, který můžete použít.</0>",
"setup_dns_privacy_3": "<0>Zde je seznam softwaru, který můžete použít.</0>",
"setup_dns_privacy_4": "Na zařízení se systémem iOS 14 nebo macOS Big Sur si můžete stáhnout speciální soubor '.mobileconfig', který do nastavení DNS přidává servery <highlight>DNS skrze HTTPS</highlight> nebo <highlight> DNS skrze TLS</highlight>.",
"setup_dns_privacy_android_1": "Android 9 podporuje DNS-přes-TLS nativně. Pokud ho chcete konfigurovat, přejděte na Nastavení → Síť & internet → Pokročilé → Soukromé DNS a tam zadejte název vaší domény.",
"setup_dns_privacy_android_2": "<0>AdGuard pro Android</0> podporuje <1>DNS-přes-HTTPS</1> a <1>DNS-přes-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> přidává podporu <1>DNS-přes-HTTPS</1> pro Android.",
@@ -527,6 +531,7 @@
"check_reason": "Důvod: {{reason}}",
"check_rule": "Pravidlo: {{rule}}",
"check_service": "Název služby: {{service}}",
"service_name": "Název služby",
"check_not_found": "Nenalezeno ve Vašich seznamech filtrů",
"client_confirm_block": "Opravdu chcete zablokovat klienta „{{ip}}“?",
"client_confirm_unblock": "Opravdu chcete odblokovat klienta „{{ip}}“?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Velikost mezipaměti DNS (v bajtech)",
"cache_ttl_min_override": "Přepsat minimální hodnotu TTL",
"cache_ttl_max_override": "Přepsat maximální hodnotu TTL",
"enter_cache_size": "Zadejte velikost mezipaměti",
"enter_cache_ttl_min_override": "Zadejte minimální hodnotu TTL",
"enter_cache_ttl_max_override": "Zadejte maximální hodnotu TTL",
"cache_ttl_min_override_desc": "Přepište hodnotu TTL (minimální) obdrženou z odchozího serveru",
"cache_ttl_max_override_desc": "Přepište hodnotu TTL (maximální) obdrženou z odchozího serveru",
"enter_cache_size": "Zadejte velikost mezipaměti (v bajtech)",
"enter_cache_ttl_min_override": "Zadejte minimální hodnotu TTL (v sekundách)",
"enter_cache_ttl_max_override": "Zadejte maximální hodnotu TTL (v sekundách)",
"cache_ttl_min_override_desc": "Prodlužte nejkratší hodnotu TTL (v sekundách) obdrženou z odchozího serveru při ukládání DNS odpovědí do mezipaměti",
"cache_ttl_max_override_desc": "Nastavte maximální hodnotu TTL (v sekundách) pro položky v mezipaměti DNS",
"ttl_cache_validation": "Minimální hodnota TTL mezipaměti musí být menší nebo rovna maximální hodnotě",
"filter_category_general": "Obecné",
"filter_category_security": "Bezpečnost",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Klikněte pro zobrazení dotazů",
"port_53_faq_link": "Port 53 je často obsazen službami \"DNSStubListener\" nebo \"systemd-resolved\". Přečtěte si <0>tento návod</0> o tom, jak to vyřešit.",
"adg_will_drop_dns_queries": "AdGuard Home zruší všechny DNS dotazy tohoto klienta.",
"client_not_in_allowed_clients": "Tento klient není povolen, protože není na seznamu \"Povolení klienti\".",
"experimental": "Experimentální"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Klient-indstillinger",
"example_upstream_reserved": "Du kan specificere DNS upstream <0>for det(de) specifikke domæne(r)</0>",
"example_upstream_comment": "Du kan uddybe kommentaren",
"upstream_parallel": "Brug parallelle forespørgsler til at fremskynde behandlingen ved samtidig at spørge alle upstream servere",
"parallel_requests": "Parallelle forespørgsler",
"load_balancing": "Belastningsfordeling",
@@ -114,7 +115,7 @@
"average_processing_time": "Gennemsnitlig behandlingstid",
"average_processing_time_hint": "Gennemsnitlig behandlingstid i millisekunder af DNS-forespørgsel",
"block_domain_use_filters_and_hosts": "Bloker domæner ved hjælp af filtre og værtsfiler",
"filters_block_toggle_hint": "Du kan oprette blokeringsregler i <a href='#filters'>Filterindstillingerne</a>.",
"filters_block_toggle_hint": "Du kan oprette blokeringsregler i <a>Filterindstillingerne</a>.",
"use_adguard_browsing_sec": "Brug AdGuards browsing sikkerhedstjeneste",
"use_adguard_browsing_sec_hint": "AdGuard Home vil kontrollere om domænet er sortlistet af browsing sikkerhedstjenesten. Den vil bruge privatlivsvenlig lookup API til at udføre kontrollen: kun et kort præfiks af domænenavnet SHA256 hash bliver sendt til serveren.",
"use_adguard_parental": "Brug AdGuards forældrekontrol",
@@ -248,6 +249,8 @@
"blocking_ipv6": "IPv6-blokering",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Download .mobileconfig til DNS-over-HTTPS",
"download_mobileconfig_dot": "Download .mobileconfig til DNS-over-TLS",
"plain_dns": "Almindelig DNS",
"form_enter_rate_limit": "Indtast hyppighedsgrænse",
"rate_limit": "Hyppighedsgrænse",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Antallet af anmodninger pr. sekund, som en enkelt klient får lov til at fremsætte (indstilles den til 0 betyder det ubegrænset)",
"blocking_ipv4_desc": "IP-adresse, der skal returneres for en blokeret A-anmodning",
"blocking_ipv6_desc": "IP-adresse, der skal returneres for en blokeret AAAA-anmodning",
"blocking_mode_default": "Standard: Svar med REFUSED, når det blokeres af Adblock-stil-reglen; svar med den IP-adresse, der er angivet i reglen, når den blokeres af /etc/hosts-style-reglen",
"blocking_mode_default": "Standard: Svar med nul IP-adresse (0.0.0.0 for A; :: for AAAA), når den blokeres af Adblock-stil-reglen; svar med den IP-adresse, der er angivet i reglen, når den blokeres af /etc/hosts-style-reglen",
"blocking_mode_refused": "REFUSED: Svar med en REFUSED kode",
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-kode",
"blocking_mode_null_ip": "Null IP: Svar med nul IP-adresse (0.0.0.0 for A; :: for AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "DNS Privatliv",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Brug <1>{{address}}</1> streng.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Brug <1>{{address}}</1> streng.",
"setup_dns_privacy_3": "<0>Bemærk venligst, at krypterede DNS-protokoller kun understøttes på Android 9. Så du skal installere ekstra software til andre styresystemer.</0><0>Her er en liste af software, du kan bruge.</0>",
"setup_dns_privacy_3": "<0>Her er en liste over software, du kan bruge.</0>",
"setup_dns_privacy_4": "På en iOS 14 eller macOS Big Sur-enhed kan du downloade en særlig '.mobileconfig' -fil, der tilføjer <highlight>DNS-over-HTTPS</highlight> eller <highlight>DNS-over-TLS</highlight> servere til DNS-indstillingerne.",
"setup_dns_privacy_android_1": "Android 9 understøtter den indbyggede DNS-over-TLS. For at konfigurere den, gå til Indstillinger → Netværk & internet → Avanceret → Privat DNS og indtast dit domænenavn.",
"setup_dns_privacy_android_2": "<0>AdGuard til Android</0> understøtter <1>DNS-over-HTTPS</1> og <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> tilføjer <1>DNS-over-HTTPS</1> understøttelse til Android.",
@@ -527,6 +531,7 @@
"check_reason": "Årsag: {{reason}}",
"check_rule": "Regel: {{rule}}",
"check_service": "Servicenavn: {{service}}",
"service_name": "Navn på tjeneste",
"check_not_found": "Ikke fundet i dine filterlister",
"client_confirm_block": "Er du sikker på, at du vil blokere klienten \"{{ip}}\"?",
"client_confirm_unblock": "Er du sikker på, at du vil fjerne blokeringen af klienten \"{{ip}}\"?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Størrelse på DNS-cache (i bytes)",
"cache_ttl_min_override": "Overskriv minimum TTL",
"cache_ttl_max_override": "Overskriv maksimal TTL",
"enter_cache_size": "Indtast cache-størrelse",
"enter_cache_ttl_min_override": "Indtast minimum TTL",
"enter_cache_ttl_max_override": "Indtast maksimum TTL",
"cache_ttl_min_override_desc": "Overskriv TTL-værdi (minimum) modtaget fra upstream-serveren",
"cache_ttl_max_override_desc": "Overskriv TTL-værdi (maksimum) modtaget fra upstream-serveren",
"enter_cache_size": "Indtast cache-størrelse (bytes)",
"enter_cache_ttl_min_override": "Indtast minimum TTL (sekunder)",
"enter_cache_ttl_max_override": "Indtast maksimum TTL (sekunder)",
"cache_ttl_min_override_desc": "Udvid korte time-to-live værdier (sekunder) modtaget fra upstream-serveren, når DNS-svar cachelagres",
"cache_ttl_max_override_desc": "Indstil en maksimal time-to-live (sekunder) for registreringer i DNS-cachen",
"ttl_cache_validation": "Minimum cache TTL-værdi skal være mindre end eller lig med den maksimale værdi",
"filter_category_general": "Generelt",
"filter_category_security": "Sikkerhed",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Klik for at se forespørgsler",
"port_53_faq_link": "Port 53 optages ofte af \"DNSStubListener\" eller \"systemd-resolved\" tjenester. Læs <0>denne instruktion</0> om, hvordan du løser dette.",
"adg_will_drop_dns_queries": "AdGuard Home vil afbryde alle DNS-forespørgsler fra denne klient.",
"client_not_in_allowed_clients": "Klienten er ikke tilladt, fordi den ikke er på listen \"Tilladte klienter\".",
"experimental": "Eksperimentel"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Client-Einstellungen",
"example_upstream_reserved": "Sie können DNS-Upstream <0>für bestimmte Domain(s)</0> angeben",
"example_upstream_comment": "Sie können den Kommentar angeben",
"upstream_parallel": "Parallele Abfragen verwenden, um die Lösung zu beschleunigen, indem Sie alle Upstream-Server gleichzeitig abfragen",
"parallel_requests": "Parallele Abfragen",
"load_balancing": "Lastverteilung",
@@ -114,7 +115,7 @@
"average_processing_time": "Durchschnittliche Bearbeitungsdauer",
"average_processing_time_hint": "Durchschnittliche Zeit in Millisekunden zur Bearbeitung von DNS-Anfragen",
"block_domain_use_filters_and_hosts": "Domains durch Filter und Host-Dateien sperren",
"filters_block_toggle_hint": "Sie können Blockierregeln in den <a href='#filters'>Filter</a>einstellungen erstellen",
"filters_block_toggle_hint": "Sie können Blockierregeln in den <a>Filter</a>einstellungen erstellen.",
"use_adguard_browsing_sec": "AdGuard Webservice für Internetsicherheit nutzen",
"use_adguard_browsing_sec_hint": "AdGuard Home prüft, ob die Domain durch den Webdienst für Internetsicherheit auf eine Sperrliste gesetzt wurde. Um Ihre Privatsphäre zu wahren, wird eine API verwendet, bei der nur ein kurzer Präfix des Domainnamens als SHA256 gehasht an den Server gesendet wird.",
"use_adguard_parental": "AdGuard Webservice für Kindersicherung verwenden",
@@ -248,6 +249,8 @@
"blocking_ipv6": "IPv6-Sperren",
"dns_over_https": "DNS-over-HTTPS (DNS-Abrage über HTTPS)",
"dns_over_tls": "DNS-over-TLS (DNS-Abrage über TLS)",
"download_mobileconfig_doh": ".mobileconfig für DNS-über-HTTPS herunterladen",
"download_mobileconfig_dot": ".mobileconfig für DNS-über-TLS herunterladen",
"plain_dns": "Einfaches DNS",
"form_enter_rate_limit": "Begrenzungswert eingeben",
"rate_limit": "Begrenzungswert",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Die Anzahl der Anfragen pro Sekunde, die ein einzelner Client stellen darf (0: unbegrenzt)",
"blocking_ipv4_desc": "IP-Adresse, die für eine gesperrte A-Anfrage zurückgegeben werden soll",
"blocking_ipv6_desc": "IP-Adresse, die für eine gesperrte AAAA-Anfrage zurückgegeben werden soll",
"blocking_mode_default": "Standard: Mit REFUSED antworten, wenn sie durch eine Regel im Adblock-Stil gesperrt sind; mit der in der Regel angegebenen IP-Adresse antworten, wenn sie durch eine Regel im /etc/hosts-Stil gesperrt wurde",
"blocking_mode_default": "Standard: Mit Null IP Adress (0.0.0.0 for A; :: for AAAA) antworten, wenn sie durch eine Regel im Adblock-Stil gesperrt sind; mit der in der Regel angegebenen IP-Adresse antworten, wenn sie durch eine Regel im /etc/hosts-Stil gesperrt wurde",
"blocking_mode_refused": "REFUSED: mit abgelehntem Code REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Mit NXDOMAIN-Code antworten",
"blocking_mode_null_ip": "Null-IP: Antworten mit Null-IP-Adresse (0.0.0.0.0 für A; :: für AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "DNS-Datenschutz",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Zeichenkette <1>{{address}}</1> verwenden.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Zeichenkette <1>{{address}}</1> verwenden.",
"setup_dns_privacy_3": "<0>Bitte beachten Sie, dass verschlüsselte DNS-Protokolle nur von Android 9 unterstützt werden. Sie müssen also zusätzliche Software für andere Betriebssysteme installieren.</0><0>Hier eine Liste der Apps, die Sie verwenden könnten.</0>",
"setup_dns_privacy_3": "<0>Hier ist eine Liste von Software, die Sie verwenden können.</0>",
"setup_dns_privacy_4": "Auf einem iOS 14 oder macOS Big Sur-Gerät können Sie eine spezielle Datei „.mobileconfig” herunterladen, die Server für <highlight>DNS-über-HTTPS</highlight> oder <highlight>DNS-über-TLS</highlight> zu den DNS-Einstellungen hinzufügt.",
"setup_dns_privacy_android_1": "Android 9 unterstützt DNS-over-TLS nativ. Um es zu konfigurieren, gehen Sie zu „Einstellungen” → „Netzwerk & Internet” → „Erweitert” → „Privater DNS” und geben Sie dort Ihren Domainnamen ein.",
"setup_dns_privacy_android_2": "<0>AdGuard für Android</0> unterstützt <1>DNS-over-HTTTPS</1> und <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "„<0>Intra</0>” fügt <1>DNS-over-HTTPS</1>-Unterstützung zu Android hinzu.",
@@ -527,6 +531,7 @@
"check_reason": "Grund: {{reason}}",
"check_rule": "Regel: {{rule}}",
"check_service": "Dienstname: {{service}}",
"service_name": "Name des Dienstes",
"check_not_found": "Nicht in Ihren Filterlisten enthalten",
"client_confirm_block": "Möchten Sie den Client „{{ip}}” wirklich sperren?",
"client_confirm_unblock": "Möchten Sie den Client „{{ip}}” wirklich entsperren?",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Anklicken, um Abfragen anzuzeigen",
"port_53_faq_link": "Port 53 wird oft von Diensten wie „DNSStubListener” oder „systemresolved” belegt. Bitte lesen Sie <0>diese Anweisung</0>, wie dies behoben werden kann.",
"adg_will_drop_dns_queries": "AdGuard Home wird alle DNS-Abfragen von diesem Client verwerfen.",
"client_not_in_allowed_clients": "Diese Anwendung ist nicht erlaubt, weil diese nicht in der Liste „Erlaubte Anwendungen” aufgeführt ist.",
"experimental": "Experimentell"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Client settings",
"example_upstream_reserved": "You can specify DNS upstream <0>for the specific domain(s)</0>",
"example_upstream_comment": "You can specify the comment",
"upstream_parallel": "Use parallel requests to speed up resolving by simultaneously querying all upstream servers",
"parallel_requests": "Parallel requests",
"load_balancing": "Load-balancing",
@@ -31,6 +32,7 @@
"form_error_ip_format": "Invalid IP format",
"form_error_mac_format": "Invalid MAC format",
"form_error_client_id_format": "Invalid client ID format",
"form_error_server_name": "Invalid server name or wildcard certificate",
"form_error_positive": "Must be greater than 0",
"form_error_negative": "Must be equal to 0 or greater",
"range_end_error": "Must be greater than range start",
@@ -114,7 +116,7 @@
"average_processing_time": "Average processing time",
"average_processing_time_hint": "Average time in milliseconds on processing a DNS request",
"block_domain_use_filters_and_hosts": "Block domains using filters and hosts files",
"filters_block_toggle_hint": "You can setup blocking rules in the <a href='#filters'>Filters</a> settings.",
"filters_block_toggle_hint": "You can setup blocking rules in the <a>Filters</a> settings.",
"use_adguard_browsing_sec": "Use AdGuard browsing security web service",
"use_adguard_browsing_sec_hint": "AdGuard Home will check if domain is blacklisted by the browsing security web service. It will use privacy-friendly lookup API to perform the check: only a short prefix of the domain name SHA256 hash is sent to the server.",
"use_adguard_parental": "Use AdGuard parental control web service",
@@ -248,6 +250,9 @@
"blocking_ipv6": "Blocking IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"dns_over_quic": "DNS-over-QUIC",
"download_mobileconfig_doh": "Download .mobileconfig for DNS-over-HTTPS",
"download_mobileconfig_dot": "Download .mobileconfig for DNS-over-TLS",
"plain_dns": "Plain DNS",
"form_enter_rate_limit": "Enter rate limit",
"rate_limit": "Rate limit",
@@ -256,7 +261,7 @@
"rate_limit_desc": "The number of requests per second that a single client is allowed to make (setting it to 0 means unlimited)",
"blocking_ipv4_desc": "IP address to be returned for a blocked A request",
"blocking_ipv6_desc": "IP address to be returned for a blocked AAAA request",
"blocking_mode_default": "Default: Respond with REFUSED when blocked by Adblock-style rule; respond with the IP address specified in the rule when blocked by /etc/hosts-style rule",
"blocking_mode_default": "Default: Respond with zero IP address (0.0.0.0 for A; :: for AAAA) when blocked by Adblock-style rule; respond with the IP address specified in the rule when blocked by /etc/hosts-style rule",
"blocking_mode_refused": "REFUSED: Respond with REFUSED code",
"blocking_mode_nxdomain": "NXDOMAIN: Respond with NXDOMAIN code",
"blocking_mode_null_ip": "Null IP: Respond with zero IP address (0.0.0.0 for A; :: for AAAA)",
@@ -327,7 +332,7 @@
"encryption_config_saved": "Encryption config saved",
"encryption_server": "Server name",
"encryption_server_enter": "Enter your domain name",
"encryption_server_desc": "In order to use HTTPS, you need to enter the server name that matches your SSL certificate.",
"encryption_server_desc": "In order to use HTTPS, you need to enter the server name that matches your SSL certificate or wildcard certificate. If the field is not set, it will accept TLS connections for any domain.",
"encryption_redirect": "Redirect to HTTPS automatically",
"encryption_redirect_desc": "If checked, AdGuard Home will automatically redirect you from HTTP to HTTPS addresses.",
"encryption_https": "HTTPS port",
@@ -383,7 +388,7 @@
"client_edit": "Edit Client",
"client_identifier": "Identifier",
"ip_address": "IP address",
"client_identifier_desc": "Clients can be identified by the IP address, CIDR, MAC address. Please note that using MAC as identifier is possible only if AdGuard Home is also a <0>DHCP server</0>",
"client_identifier_desc": "Clients can be identified by the IP address, CIDR, MAC address or domain. Please note that using MAC as identifier is possible only if AdGuard Home is also a <0>DHCP server</0>",
"form_enter_ip": "Enter IP",
"form_enter_mac": "Enter MAC",
"form_enter_id": "Enter identifier",
@@ -414,7 +419,8 @@
"dns_privacy": "DNS Privacy",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Use <1>{{address}}</1> string.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Use <1>{{address}}</1> string.",
"setup_dns_privacy_3": "<0>Please note that encrypted DNS protocols are supported only on Android 9. So you need to install additional software for other operating systems.</0><0>Here's a list of software you can use.</0>",
"setup_dns_privacy_3": "<0>Here's a list of software you can use.</0>",
"setup_dns_privacy_4": "On an iOS 14 or macOS Big Sur device you can download special '.mobileconfig' file that adds <highlight>DNS-over-HTTPS</highlight> or <highlight>DNS-over-TLS</highlight> servers to the DNS settings.",
"setup_dns_privacy_android_1": "Android 9 supports DNS-over-TLS natively. To configure it, go to Settings → Network & internet → Advanced → Private DNS and enter your domain name there.",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> supports <1>DNS-over-HTTPS</1> and <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> adds <1>DNS-over-HTTPS</1> support to Android.",
@@ -527,6 +533,7 @@
"check_reason": "Reason: {{reason}}",
"check_rule": "Rule: {{rule}}",
"check_service": "Service name: {{service}}",
"service_name": "Service name",
"check_not_found": "Not found in your filter lists",
"client_confirm_block": "Are you sure you want to block the client \"{{ip}}\"?",
"client_confirm_unblock": "Are you sure you want to unblock the client \"{{ip}}\"?",
@@ -561,11 +568,11 @@
"cache_size_desc": "DNS cache size (in bytes)",
"cache_ttl_min_override": "Override minimum TTL",
"cache_ttl_max_override": "Override maximum TTL",
"enter_cache_size": "Enter cache size",
"enter_cache_ttl_min_override": "Enter minimum TTL",
"enter_cache_ttl_max_override": "Enter maximum TTL",
"cache_ttl_min_override_desc": "Override TTL value (minimum) received from upstream server",
"cache_ttl_max_override_desc": "Override TTL value (maximum) received from upstream server",
"enter_cache_size": "Enter cache size (bytes)",
"enter_cache_ttl_min_override": "Enter minimum TTL (seconds)",
"enter_cache_ttl_max_override": "Enter maximum TTL (seconds)",
"cache_ttl_min_override_desc": "Extend short time-to-live values (seconds) received from the upstream server when caching DNS responses",
"cache_ttl_max_override_desc": "Set a maximum time-to-live value (seconds) for entries in the DNS cache",
"ttl_cache_validation": "Minimum cache TTL value must be less than or equal to the maximum value",
"filter_category_general": "General",
"filter_category_security": "Security",
@@ -580,5 +587,6 @@
"click_to_view_queries": "Click to view queries",
"port_53_faq_link": "Port 53 is often occupied by \"DNSStubListener\" or \"systemd-resolved\" services. Please read <0>this instruction</0> on how to resolve this.",
"adg_will_drop_dns_queries": "AdGuard Home will be dropping all DNS queries from this client.",
"client_not_in_allowed_clients": "The client is not allowed because it is not in the \"Allowed clients\" list.",
"experimental": "Experimental"
}
}

View File

@@ -1,12 +1,13 @@
{
"client_settings": "Configuración de clientes",
"example_upstream_reserved": "puedes especificar el DNS de subida <0>para un dominio específico</0>",
"example_upstream_comment": "puedes especificar el comentario",
"upstream_parallel": "Usar peticiones paralelas para acelerar la resolución al consultar simultáneamente a todos los servidores de subida",
"parallel_requests": "Peticiones paralelas",
"load_balancing": "Balanceo de carga",
"load_balancing_desc": "Consulta un servidor a la vez. AdGuard Home utilizará el algoritmo aleatorio ponderado para elegir el servidor más rápido y sea utilizado con más frecuencia.",
"bootstrap_dns": "Servidores DNS de arranque",
"bootstrap_dns_desc": "Los servidores DNS de arranque se utilizan para resolver las direcciones IP de los resolutores DoH/DoT que usted especifique como DNS de subida.",
"bootstrap_dns_desc": "Los servidores DNS de arranque se utilizan para resolver las direcciones IP de los resolutores DoH/DoT que especifiques como DNS de subida.",
"check_dhcp_servers": "Comprobar si hay servidores DHCP",
"save_config": "Guardar configuración",
"enabled_dhcp": "Servidor DHCP habilitado",
@@ -114,7 +115,7 @@
"average_processing_time": "Tiempo promedio de procesamiento",
"average_processing_time_hint": "Tiempo promedio en milisegundos al procesar una petición DNS",
"block_domain_use_filters_and_hosts": "Bloquear dominios usando filtros y archivos hosts",
"filters_block_toggle_hint": "Puedes configurar las reglas de bloqueo en la configuración de <a href='#filters'>filtros</a>.",
"filters_block_toggle_hint": "Puedes configurar las reglas de bloqueo en la configuración de <a>filtros</a>.",
"use_adguard_browsing_sec": "Usar el servicio web de seguridad de navegación de AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home comprobará si el dominio está en la lista negra del servicio web de seguridad de navegación. Utilizará la API de búsqueda amigable con la privacidad para realizar la comprobación: solo se envía al servidor un prefijo corto del nombre de dominio con hash SHA256.",
"use_adguard_parental": "Usar el control parental de AdGuard",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Bloqueo de IPv6",
"dns_over_https": "DNS mediante HTTPS",
"dns_over_tls": "DNS mediante TLS",
"download_mobileconfig_doh": "Descargar .mobileconfig para DNS mediante HTTPS",
"download_mobileconfig_dot": "Descargar .mobileconfig para DNS mediante TLS",
"plain_dns": "DNS simple",
"form_enter_rate_limit": "Ingresa el límite de cantidad",
"rate_limit": "Límite de cantidad",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Número de peticiones por segundo que un solo cliente puede hacer (establecerlo en 0 significa ilimitado)",
"blocking_ipv4_desc": "Dirección IP devolverá una petición A bloqueada",
"blocking_ipv6_desc": "Dirección IP devolverá una petición AAAA bloqueada",
"blocking_mode_default": "Predeterminado: Responde con REFUSED cuando está bloqueado por la regla de estilo Adblock; responde con la dirección IP especificada en la regla cuando está bloqueado por una regla de estilo /etc/hosts",
"blocking_mode_default": "Predeterminado: Responde con dirección IP cero (0.0.0.0 para A; :: para AAAA) cuando está bloqueado por la regla de estilo Adblock; responde con la dirección IP especificada en la regla cuando está bloqueado por una regla de estilo /etc/hosts",
"blocking_mode_refused": "REFUSED: Responde con el código REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Responde con el código NXDOMAIN",
"blocking_mode_null_ip": "IP nulo: Responde con dirección IP cero (0.0.0.0 para A; :: para AAAA)",
@@ -383,7 +386,7 @@
"client_edit": "Editar cliente",
"client_identifier": "Identificador",
"ip_address": "Dirección IP",
"client_identifier_desc": "Los clientes pueden ser identificados por la dirección IP, MAC y CIDR. Tenga en cuenta que el uso de MAC como identificador solo es posible si AdGuard Home también es un <0>servidor DHCP</0>",
"client_identifier_desc": "Los clientes pueden ser identificados por la dirección IP, MAC y CIDR. Ten en cuenta que el uso de MAC como identificador solo es posible si AdGuard Home también es un <0>servidor DHCP</0>",
"form_enter_ip": "Ingresa la IP",
"form_enter_mac": "Ingresa la MAC",
"form_enter_id": "Ingresa el identificador",
@@ -414,7 +417,8 @@
"dns_privacy": "DNS cifrado",
"setup_dns_privacy_1": "<0>DNS mediante TLS:</0> Utiliza la cadena <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS mediante HTTPS:</0> Utiliza la cadena <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Tenga en cuenta que los protocolos DNS cifrados solo son compatibles con Android 9. Por lo tanto, necesita instalar software adicional para otros sistemas operativos.</0><0>Aquí hay una lista de software que puedes usar.</0>",
"setup_dns_privacy_3": "<0>Aquí hay una lista de software que puedes usar.</0>",
"setup_dns_privacy_4": "En un dispositivo iOS 14 o macOS Big Sur puedes descargar el archivo especial '.mobileconfig' que añade servidores <highlight>DNS mediante HTTPS</highlight> o <highlight>DNS mediante TLS</highlight> a la configuración del DNS.",
"setup_dns_privacy_android_1": "Android 9 soporta DNS mediante TLS de forma nativa. Para configurarlo, ve a Configuración → Red e Internet → Avanzado → DNS privado e ingresa el nombre del dominio allí.",
"setup_dns_privacy_android_2": "<0>AdGuard para Android</0> soporta <1>DNS mediante HTTPS</1> y <1>DNS mediante TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> añade soporte a Android para <1>DNS mediante HTTPS</1>.",
@@ -527,6 +531,7 @@
"check_reason": "Razón: {{reason}}",
"check_rule": "Regla: {{rule}}",
"check_service": "Nombre del servicio: {{service}}",
"service_name": "Nombre del servicio",
"check_not_found": "No se ha encontrado en tus listas de filtros",
"client_confirm_block": "¿Está seguro de que desea bloquear al cliente \"{{ip}}\"?",
"client_confirm_unblock": "¿Está seguro de que desea desbloquear al cliente \"{{ip}}\"?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Tamaño de la caché DNS (en bytes)",
"cache_ttl_min_override": "Anular TTL mínimo",
"cache_ttl_max_override": "Anular TTL máximo",
"enter_cache_size": "Ingresa el tamaño de la caché",
"enter_cache_ttl_min_override": "Ingresa el TTL mínimo",
"enter_cache_ttl_max_override": "Ingresa el TTL máximo",
"cache_ttl_min_override_desc": "Anula el valor TTL (mínimo) recibido del servidor DNS de subida",
"cache_ttl_max_override_desc": "Anula el valor TTL (máximo) recibido del servidor DNS de subida",
"enter_cache_size": "Ingresa el tamaño de la caché (bytes)",
"enter_cache_ttl_min_override": "Ingresa el TTL mínimo (en segundos)",
"enter_cache_ttl_max_override": "Ingresa el TTL máximo (en segundos)",
"cache_ttl_min_override_desc": "Amplia el corto tiempo de vida de los valores recibidos del servidor DNS de subida al almacenar en caché las respuestas DNS",
"cache_ttl_max_override_desc": "Establece un valor de tiempo de vida máximo para las entradas en la caché DNS",
"ttl_cache_validation": "El valor TTL mínimo de la caché debe ser menor o igual al valor máximo",
"filter_category_general": "General",
"filter_category_security": "Seguridad",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Clic para ver las consultas",
"port_53_faq_link": "El puerto 53 suele estar ocupado por los servicios \"DNSStubListener\" o \"systemd-resolved\". Por favor lee <0>esta instrucción</0> sobre cómo resolver esto.",
"adg_will_drop_dns_queries": "AdGuard Home descartará todas las consultas DNS de este cliente.",
"client_not_in_allowed_clients": "El cliente no está permitido porque no está en la lista de \"Clientes permitidos\".",
"experimental": "experimental"
}

View File

@@ -106,7 +106,7 @@
"average_processing_time": "میانگین زمان پردازش",
"average_processing_time_hint": "زمان میانگین بر هزارم ثانیه در پردازش درخواست DNS",
"block_domain_use_filters_and_hosts": "مسدودسازی دامنه ها توسط فیلترها و فایل های میزبان",
"filters_block_toggle_hint": "میتوانید دستورات مسدودسازی را در تنظیمات <a href='#filters'>فیلترها</a> راه اندازی کنید.",
"filters_block_toggle_hint": "میتوانید دستورات مسدودسازی را در تنظیمات <a>فیلترها</a> راه اندازی کنید.",
"use_adguard_browsing_sec": "استفاده از سرویس وب امنیت وب گردی AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home بررسی می کند اگر دامنه در سرویس وب امنیت وب گردی در لیست سیاه است.آن از اِی پی آی دارای حریم خصوصی برای بررسی استفاده می کند:فقط پیشوند کوتاه نام دامنه هش SHA256 به سرور ارسال خواهد شد.",
"use_adguard_parental": "از سرویس وب نظارت والدین AdGuard استفاده کن",
@@ -232,7 +232,6 @@
"edns_cs_desc": "اگر فعال باشد،AdGuard Home زیرشبکه های کلاینت ها را به سرورهای DNS می فرستد.",
"blocking_ipv4_desc": "آدرس آی پی برگشت داده شده برای درخواست مسدود شده A",
"blocking_ipv6_desc": "آدرس آی پی برگشت داده شده برای درخواست مسدود شده AAAA",
"blocking_mode_default": "پیش فرض: وقتی مسدود شود با دستور سبک-مسدودساز تبلیغ REFUSED پاسخ میدهد،پاسخ با آدرس آی پی تعیین شده در دستور وقتی با دستور /etc/hosts-style rule مسدود شود",
"blocking_mode_nxdomain": "NXDOMAIN: پاسخ با کُد NXDOMAIN",
"blocking_mode_null_ip": "Null IP: پاسخ با آدرس آی پی صفر(0.0.0.0 برای A; :: برای AAAA)",
"blocking_mode_custom_ip": "آی پی دستی: پاسخ با آدرس آی پی دستی تنظیم شده",
@@ -386,7 +385,6 @@
"dns_privacy": "حریم خصوصی DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> استفاده از<1>{{address}}</1> .",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> استفاده از <1>{{address}}</1> .",
"setup_dns_privacy_3": "<0>لطفا توجه کنید که پروتکل های رمزگذاری شده DNS فقط در آندروئید 9 پشتیبانی می شود. پس برای سیستم عامل های دیگر نیاز است که برنامه دیگری نصب کنید.</0><0>در اینجا میتوانید لیست نرم افزارهای قابل استفاده را ببینید.</0>",
"setup_dns_privacy_android_1": "آندروئید 9 بطور پیش فرض از DNS-over-TLS پشتیبانی می کند. برای پیکربندی آن، بروید به تنظیمات → شبکه & اینترنت → پیشرفته → DNS خصوصی و نام دامنه را آنجا وارد کنید.",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> پشتیبانی از <1>DNS-over-HTTPS</1> و <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> قابلیت <1>DNS-over-HTTPS</1> را به آندروئید اضافه می کند.",

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Paramètres du client",
"example_upstream_reserved": "Vous pouvez spécifier un DNS en amont <0>pour un/des domaine(s) spécifique(s)</0>",
"example_upstream_comment": "Vous pouvez spécifier un commentaire",
"upstream_parallel": "Utiliser des requêtes parallèles pour accélérer la résolution en requêtant simultanément tous les serveurs upstream",
"parallel_requests": "Demandes en parallèle",
"load_balancing": "Équilibrage de charge",
@@ -11,6 +12,8 @@
"save_config": "Sauvegarder la configuration",
"enabled_dhcp": "Serveur DHCP activé",
"disabled_dhcp": "Serveur DHCP désactivé",
"unavailable_dhcp": "Le DHCP nest pas disponible",
"unavailable_dhcp_desc": "AdGuard Home ne peut pas exécuter un serveur DHCP sur votre système dexploitation",
"dhcp_title": "Serveur DHCP (experimental !)",
"dhcp_description": "Si votre routeur ne fonctionne pas avec les réglages DHCP, vous pouvez utiliser le serveur DHCP par défaut d'AdGuard.",
"dhcp_enable": "Activer le serveur DHCP",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "Baux statiques DHCP",
"dhcp_leases_not_found": "Aucune location des serveurs DHCP trouvée",
"dhcp_config_saved": "La configuration du serveur DHCP est sauvegardée",
"dhcp_ipv4_settings": "Paramètres IPv4 du DHCP",
"dhcp_ipv6_settings": "Paramètres IPv6 du DHCP",
"form_error_required": "Champ requis",
"form_error_ip4_format": "Format IPv4 invalide",
"form_error_ip6_format": "Format IPv6 invalide",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Format d'ID client non valide",
"form_error_positive": "Doit être supérieur à 0",
"form_error_negative": "Doit être égal à 0 ou supérieur",
"range_end_error": "Doit être supérieur au début de la gamme",
"dhcp_form_gateway_input": "IP de la passerelle",
"dhcp_form_subnet_input": "Masque de sous-réseau",
"dhcp_form_range_title": "Rangée des adresses IP",
@@ -109,7 +115,7 @@
"average_processing_time": "Temps moyen de traitement",
"average_processing_time_hint": "Temps moyen (en millisecondes) de traitement d'une requête DNS",
"block_domain_use_filters_and_hosts": "Bloquez les domaines à l'aide des filtres et fichiers hosts",
"filters_block_toggle_hint": "Vous pouvez configurer les règles de filtrage dans les paramètres des <a href='#filters'>Filtres</a>.",
"filters_block_toggle_hint": "Vous pouvez configurer les règles de filtrage dans les paramètres des <a>Filtres</a>.",
"use_adguard_browsing_sec": "Utilisez le service Sécurité de navigation d'AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home va vérifier si le domaine est dans la liste noire du service de sécurité de navigation. Pour cela il va utiliser un lookup API discret : le préfixe court du hash du nom de domaine SHA256 sera envoyé au serveur.",
"use_adguard_parental": "Utiliser le contrôle parental d'AdGuard",
@@ -127,6 +133,8 @@
"encryption_settings": "Paramètres de chiffrement",
"dhcp_settings": "Paramètres DHCP",
"upstream_dns": "Serveurs DNS upstream",
"upstream_dns_help": "Saisissez les adresses des serveurs, une par ligne. <a>En savoir plus</a> sur la configuration des serveurs DNS en amont.",
"upstream_dns_configured_in_file": "Configuré dans {{path}}",
"test_upstream_btn": "Tester les upstreams",
"upstreams": "En amont",
"apply_btn": "Appliquer",
@@ -180,6 +188,7 @@
"example_upstream_regular": "DNS classique (au-dessus de UDP)",
"example_upstream_dot": "<0>DNS-over-TLS</0> chiffré",
"example_upstream_doh": "<0>DNS-over-HTTPS</0> chiffré",
"example_upstream_doq": "<0>DNS-over-QUIC</0> chiffré",
"example_upstream_sdns": "vous pouvez utiliser <0>DNS Stamps</0> pour <1>DNSCrypt</1> ou les resolveurs <2>DNS_over_HTTPS</2>",
"example_upstream_tcp": "DNS classique (au-dessus de TCP)",
"all_lists_up_to_date_toast": "Toutes les listes sont déjà à jour",
@@ -188,6 +197,10 @@
"dns_test_not_ok_toast": "Impossible d'utiliser le serveur \"{{key}}\": veuillez vérifier si le nom saisi est bien correct",
"unblock": "Débloquer",
"block": "Bloquer",
"disallow_this_client": "Interdire ce client",
"allow_this_client": "Autoriser ce client",
"block_for_this_client_only": "Bloquer uniquement pour ce client",
"unblock_for_this_client_only": "Débloquer uniquement pour ce client",
"time_table_header": "Temps",
"date": "Date",
"domain_name_table_header": "Nom de domaine",
@@ -236,14 +249,17 @@
"blocking_ipv6": "Blocage IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Télécharger .mobileconfig pour DNS-sur-HTTPS",
"download_mobileconfig_dot": "Télécharger .mobileconfig pour DNS-sur-TLS",
"plain_dns": "DNS brut",
"form_enter_rate_limit": "Entrez la limite de taux",
"rate_limit": "Limite de taux",
"edns_enable": "Activer le sous-réseau du client EDNS",
"edns_cs_desc": "Si activé, AdGuard Home enverra les sous-réseaux des clients aux serveurs DNS.",
"rate_limit_desc": "Le nombre de requêtes par seconde quun seul client est autorisé à faire (le réglage 0 fait illimité)",
"blocking_ipv4_desc": "Adresse IP à renvoyer pour une demande A bloquée",
"blocking_ipv6_desc": "Adresse IP à renvoyer pour une demande AAAA bloquée",
"blocking_mode_default": "Par défaut : Répondre avec REFUSED lorsque bloqué par la règle de style Adblock; répondre avec ladresse IP spécifiée dans la règle lorsque bloquée par la règle de style /etc/hosts",
"blocking_mode_default": "Par défaut : Répondre avec adresse IP zéro (0.0.0.0 pour A; :: pour AAAA) lorsque bloqué par la règle de style Adblock; répondre avec ladresse IP spécifiée dans la règle lorsque bloquée par la règle du style /etc/hosts",
"blocking_mode_refused": "REFUSED: Répondre avec le code REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN : Répondre avec le code NXDOMAIN",
"blocking_mode_null_ip": "IP nulle : Répondre avec une adresse IP nulle (0.0.0.0 pour A; :: pour AAAA)",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Si le port HTTPS est configuré, l'interface administrateur de AdGuard Home sera accessible via HTTPS et fournira aussi un service DNS-over-HTTPS sur l'emplacement '/dns-query'.",
"encryption_dot": "Port DNS-over-TLS",
"encryption_dot_desc": "Si ce port est configuré, AdGuard Home exécutera un serveur DNS-over-TLS sur ce port.",
"encryption_doq": "Port DNS sur QUIC",
"encryption_doq_desc": "Si ce port est configuré, AdGuard Home exécutera un serveur DNS sur QUIC sur ce port. Ceci est expérimental et possiblement pas entièrement fiable. Peu de clients le prennent en charge actuellement.",
"encryption_certificates": "Certificats",
"encryption_certificates_desc": "Pour utiliser le chiffrement, vous devez fournir une chaîne de certificats SSL valide pour votre domaine. Vous pouvez en obtenir une gratuitement sur <0>{{link}}</0> ou vous pouvez en acheter une via les Autorités de Certification de confiance.",
"encryption_certificates_input": "Copiez/coller vos certificats encodés PEM ici.",
@@ -399,7 +417,8 @@
"dns_privacy": "Confidentialité DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS :</0> Utiliser le string <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS :</0> Utiliser le string <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Veuillez noter que les protocoles DNS chiffrés sont supportés que sur Android 9. Donc vous devez installer un logiciel complémentaire pour les autres systèmes opérationnels.</0><0>Voici une liste de logiciels que vous pouvez utiliser.</0>",
"setup_dns_privacy_3": "<0>Voici une liste de logiciels que vous pouvez utiliser.</0>",
"setup_dns_privacy_4": "Si vous utilisez un appareil sur iOS 14 ou macOS Big Sur, vous pouvez télécharger un fichier spécial '.mobileconfig' pour ajouter les serveurs <highlight>DNS-sur-HTTPS</highlight> ou <highlight>DNS-sur-TLS</highlight> aux configurations DNS.",
"setup_dns_privacy_android_1": "Android 9 supporte nativement le DNS-over-TLS. Pour le configurer, allez dans Paramètres → Réseau et Internet → Avancés → DNS privé et saisissez votre nom de domaine ici.",
"setup_dns_privacy_android_2": "<0>AdGuard pour Android</0> supporte le <1>DNS-over-HTTPS</1> et le <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> ajoute le support <1>DNS-over-HTTPS</1> sur Android.",
@@ -480,6 +499,7 @@
"whois": "Whois",
"filtering_rules_learn_more": "<0>Apprenez-en plus</0> à propos de la création de vos propres listes de blocage dhôtes.",
"blocked_by_response": "Bloqué par un CNAME ou une réponse IP",
"blocked_by_cname_or_ip": "Bloqué par CNAME ou adresse IP",
"try_again": "Réessayer",
"domain_desc": "Saisissez le nom de domaine ou le caractère générique que vous souhaitez réécrire.",
"example_rewrite_domain": "réécrivez les réponses pour ce nom de domaine uniquement.",
@@ -511,6 +531,7 @@
"check_reason": "Raison : {{reason}}",
"check_rule": "Règle : {{rule}}",
"check_service": "Nom du service : {{service}}",
"service_name": "Nom du service",
"check_not_found": "Introuvable dans vos listes de filtres",
"client_confirm_block": "Voulez-vous vraiment bloquer le client « {{ip}} »?",
"client_confirm_unblock": "Voulez-vous vraiment débloquer le client « {{ip}} »?",
@@ -528,6 +549,7 @@
"dnssec_enable": "Activer DNSSEC",
"dnssec_enable_desc": "Définir lindicateur DNSSEC dans les requêtes DNS sortantes et vérifier le résultat (résolveur compatible DNSSEC requis)",
"validated_with_dnssec": "Validé avec DNSSEC",
"all_queries": "Toutes les requêtes",
"show_blocked_responses": "Bloqué",
"show_whitelisted_responses": "Ajouté à la liste blanche",
"show_processed_responses": "Traité",
@@ -544,10 +566,12 @@
"cache_size_desc": "Taille du cache DNS (en bytes)",
"cache_ttl_min_override": "Remplacer le TTL minimum",
"cache_ttl_max_override": "Remplacer le TTL maximum",
"enter_cache_size": "Entrer la taille du cache",
"enter_cache_ttl_min_override": "Entrez le TTL minimum",
"enter_cache_ttl_max_override": "Entrez le TTL maximum",
"cache_ttl_max_override_desc": "Remplacer la valeur TTL (maximale) reçue du serveur en amont",
"enter_cache_size": "Entrer la taille du cache (octets)",
"enter_cache_ttl_min_override": "Entrez le TTL minimum (secondes)",
"enter_cache_ttl_max_override": "Entrez le TTL maximum (secondes)",
"cache_ttl_min_override_desc": "Prolonger les valeurs courtes de durée de vie (en secondes) reçues du serveur en amont lors de la mise en cache des réponses DNS",
"cache_ttl_max_override_desc": "Établir la valeur de durée de vie TTL maximale (en secondes) pour les saisies dans le cache du DNS",
"ttl_cache_validation": "La valeur TTL minimale du cache doit être inférieure ou égale à la valeur maximale",
"filter_category_general": "Général",
"filter_category_security": "Sécurité",
"filter_category_regional": "Régional",
@@ -556,6 +580,11 @@
"filter_category_security_desc": "Listes spécialisées dans le blocage de logiciels malveillants, dhameçonnage ou de domaines frauduleux",
"filter_category_regional_desc": "Listes axées sur les annonces régionales et les serveurs de pistage",
"filter_category_other_desc": "Autres listes noires",
"setup_config_to_enable_dhcp_server": "Configurer les paramètres pour activer le serveur DHCP",
"original_response": "Réponse originale",
"click_to_view_queries": "Cliquez pour voir les requêtes",
"port_53_faq_link": "Le port 53 est souvent occupé par les services « DNSStubListener » ou « systemd-resolved ». Veuillez lire <0>cette instruction</0> pour savoir comment résoudre ce problème."
"port_53_faq_link": "Le port 53 est souvent occupé par les services « DNSStubListener » ou « systemd-resolved ». Veuillez lire <0>cette instruction</0> pour savoir comment résoudre ce problème.",
"adg_will_drop_dns_queries": "AdGuard Home ignorera toutes les requêtes DNS de ce client.",
"client_not_in_allowed_clients": "Le client nest pas autorisé car il ne figure pas dans la liste « Clients autorisés ».",
"experimental": "Expérimental"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Postavke klijenta",
"example_upstream_reserved": "VI možete odrediti DNS upstream-ove <0>za određene domene</0>",
"example_upstream_comment": "Možete odrediti komentar",
"upstream_parallel": "Koristi paralelne upite kako bi ubrzali rješavanje istovremenim ispitavanjem svih upstream poslužitelja",
"parallel_requests": "Paralelni zahtjevi",
"load_balancing": "Load-balancing",
@@ -114,7 +115,7 @@
"average_processing_time": "Prosječno vrijeme obrade",
"average_processing_time_hint": "Prosječno vrijeme u milisekundama za obradu DNS zahtjeva",
"block_domain_use_filters_and_hosts": "Blokiraj domene koristeći filtre ili hosts datoteke",
"filters_block_toggle_hint": "Pravila blokiranja možete postaviti u postavkama <a href='#filters'>filtara</a>.",
"filters_block_toggle_hint": "Pravila blokiranja možete postaviti u postavkama <a>filtara</a>.",
"use_adguard_browsing_sec": "Koristi AdGuard uslugu zaštite pregledavanja",
"use_adguard_browsing_sec_hint": "AdGuard Home će provjeriti nalazi li se domena na popisu nedopuštenih domena od usluge zaštite pregledavanja. Za provjeru će se koristiti API za provjeru koji poštuje vašu privatnost. Samo mali dio SHA256 hash-a od naziva domene se šalje poslužitelju.",
"use_adguard_parental": "Koristi web uslugu AdGuard roditeljske zaštite",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Blokiranje IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Preuzmi .mobileconfig za DNS-over-HTTPS",
"download_mobileconfig_dot": "Preuzmi .mobileconfig za DNS-over-TLS",
"plain_dns": "Obični DNS",
"form_enter_rate_limit": "Unesite ograničenje",
"rate_limit": "Ograničenje",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Broj zahtjeva u sekundi koji su dopušteni po jednom klijentu (postavljanje na 0 znači neograničeno)",
"blocking_ipv4_desc": "Povratna IP adresa za blokirane A zahtjeve",
"blocking_ipv6_desc": "Povratna IP adresa za blokirane AAAA zahtjeve",
"blocking_mode_default": "Zadano: Odgovor s REFUSED kada je blokirano od Adblock sličnog pravila; odgovor s IP adresom definiranom u pravilu kada je blokirano od /etc/hosts sličnog pravila",
"blocking_mode_default": "Zadano: Odgovori s nultom IP adresom (0.0.0.0 za A; :: za AAAA) kada ga blokira Adblock slično pravilo; odgovorite s IP adresom definiranom u pravilu kada je blokirano od /etc/hosts sličnog pravila",
"blocking_mode_refused": "REFUSED: Odgovorite s REFUSED kôdom",
"blocking_mode_nxdomain": "NXDOMAIN: Odgovor s NXDOMAIN kôdom",
"blocking_mode_null_ip": "Nuliran IP: Odgovor s nuliranom IP adresom (0.0.0.0 za A; :: za AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "DNS privatnost",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Koristite <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Koristite <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Imajte na umu da su šifrirani DNS protokoli podržani samo na Androidu 9. Stoga morate instalirati dodatni program za ostale operativne sustave.</0><0>Evo popisa programa koje možete koristiti.</0>",
"setup_dns_privacy_3": "<0>Evo popisa programa koje možete koristiti.</0>",
"setup_dns_privacy_4": "Na iOS 14 ili macOS Big Sur uređaju možete preuzeti posebnu datoteku '.mobileconfig' koja dodaje <highlight>DNS-over-HTTPS</highlight> ili <highlight>DNS-over-TLS</highlight> poslužitelje u postavke DNS-a.",
"setup_dns_privacy_android_1": "Android 9 nativno podržava DNS-over-TLS. Da biste ga postavili, idite na Postavke → Mreža i internet → Napredno → Privatni DNS i tamo unesite svoje naziv domene.",
"setup_dns_privacy_android_2": "<0>AdGuard za Android</0> podržava <1>DNS-over-HTTPS</1> i <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> dodaje <1>DNS-over-HTTPS</1> podršku za Android.",
@@ -527,6 +531,7 @@
"check_reason": "Razlog: {{reason}}",
"check_rule": "Pravilo: {{rule}}",
"check_service": "Naziv usluge: {{service}}",
"service_name": "Naziv usluge",
"check_not_found": "Nije pronađeno na vašoj listi filtara",
"client_confirm_block": "Jeste li sigurni da želite blokirati \"{{ip}}\" klijenta?",
"client_confirm_unblock": "Jeste li sigurni da želite odblokirati \"{{ip}}\" klijenta?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Veličina DNS predmemorije (u bajtovima)",
"cache_ttl_min_override": "Nadjačaj minimum TTL-a",
"cache_ttl_max_override": "Nadjačaj maksimum TTL-a",
"enter_cache_size": "Unesite veličinu predmemorije",
"enter_cache_ttl_min_override": "Unesite minimalni TTL",
"enter_cache_ttl_max_override": "Unesite maksimalni TTL",
"cache_ttl_min_override_desc": "Nadjačaj TTL vrijednost (minimum) dobivenu od upstream poslužitelja",
"cache_ttl_max_override_desc": "Nadjačaj TTL vrijednost (maksimum) dobivenu od upstream poslužitelja",
"enter_cache_size": "Unesite veličinu predmemorije (u bajtovima)",
"enter_cache_ttl_min_override": "Unesite minimalni TTL (u sekundama)",
"enter_cache_ttl_max_override": "Unesite maksimalni TTL (u sekundama)",
"cache_ttl_min_override_desc": "Povećajte kratke vrijednosti TTL-a (u sekundama) primljene od upstream poslužitelja prilikom predmemoriranja DNS odgovora",
"cache_ttl_max_override_desc": "Postavite maksimalnu vrijednost TTL-a (u sekundama) za zapise u DNS predmemoriju",
"ttl_cache_validation": "Minimalna vrijednost TTL predmemorije mora biti manja ili jednaka maksimalnoj vrijednosti",
"filter_category_general": "Općenito",
"filter_category_security": "Sigurnost",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Kliknite za pregled upita",
"port_53_faq_link": "Port 53 često zauzimaju usluge \"DNSStubListener\" ili \"systemd-resolved\". Molimo pročitajte <0>ove upute</0> o tome kako to riješiti.",
"adg_will_drop_dns_queries": "AdGuard Home odbaciti će sve DNS upite od ovog klijenta.",
"client_not_in_allowed_clients": "Klijent nije dopušten jer nije na popisu \"Dopuštenih klijenata\".",
"experimental": "Eksperimentalno"
}

View File

@@ -1,12 +1,13 @@
{
"client_settings": "Kliens beállítások",
"example_upstream_reserved": "Megadhat egy DNS kiszolgálót <0>egy adott domainhez vagy domainekhez</0>",
"example_upstream_comment": "Megadhat egy megjegyzést",
"upstream_parallel": "Használjon párhuzamos lekéréseket a domainek feloldásának felgyorsításához az összes upstream kiszolgálóra való egyidejű lekérdezéssel",
"parallel_requests": "Párhuzamos lekérések",
"load_balancing": "Terheléselosztás",
"load_balancing_desc": "Egyszerre csak egy szerverről történjen lekérdezés. Az AdGuard Home egy súlyozott, véletlenszerű algoritmust fog használni a megfelelő szerver kiválasztására, így a leggyorsabb szervert gyakrabban fogja használni.",
"bootstrap_dns": "Bootstrap DNS kiszolgálók",
"bootstrap_dns_desc": "Bootstrap DNS szerverek feloldják a megadott DoH/DoT feloldók IP-címeit.",
"bootstrap_dns_desc": "A Bootstrap DNS szerverek a DoH/DoT feloldók IP-címeinek feloldására szolgálnak.",
"check_dhcp_servers": "DHCP szerverek keresése",
"save_config": "Konfiguráció mentése",
"enabled_dhcp": "DHCP szerver engedélyezve",
@@ -89,10 +90,10 @@
"disable_protection": "Védelem letiltása",
"disabled_protection": "Letiltott védelem",
"refresh_statics": "Statisztikák frissítése",
"dns_query": "DNS lekérdezések",
"dns_query": "DNS lekérdezés",
"blocked_by": "<0>Szűrők által blokkolt</0>",
"stats_malware_phishing": "Blokkolt kártevő/adathalászat",
"stats_adult": "Blokkolva a felnőtt tartalmak által",
"stats_adult": "Blokkolt felnőtt tartalom",
"stats_query_domain": "Leglátogatottabb domainek",
"for_last_24_hours": "az utóbbi 24 órában",
"for_last_days": "az utóbbi {{count}} napban",
@@ -114,7 +115,7 @@
"average_processing_time": "Átlagos feldolgozási idő",
"average_processing_time_hint": "A DNS lekérdezések feldolgozásához szükséges átlagos idő milliszekundumban",
"block_domain_use_filters_and_hosts": "Domainek blokkolása szűrők és hosztfájlok használatával",
"filters_block_toggle_hint": "A <a href='#filters'> szűrőbeállításoknál</a> megadhatja a blokkolási szabályokat.",
"filters_block_toggle_hint": "A <a> szűrőbeállításoknál</a> megadhatja a blokkolási szabályokat.",
"use_adguard_browsing_sec": "Használja az AdGuard böngészési biztonság webszolgáltatását",
"use_adguard_browsing_sec_hint": "Az AdGuard Home ellenőrzi, hogy a böngészési biztonsági modul a domaint tiltólistára tette-e. Az ellenőrzés elvégzéséhez egy adatvédelmet tiszteletben tartó API-t fog használni: a domain név egy rövid előtagját elküldi SHA256 kódolással a szerver felé.",
"use_adguard_parental": "Használja az AdGuard szülői felügyelet webszolgáltatását",
@@ -132,6 +133,8 @@
"encryption_settings": "Titkosítási beállítások",
"dhcp_settings": "DHCP beállítások",
"upstream_dns": "Upstream DNS-kiszolgálók",
"upstream_dns_help": "Adja meg a szerverek címeit soronként. <a>Tudjon meg többet</a> a DNS szerverek bekonfigurálásáról.",
"upstream_dns_configured_in_file": "Beállítva itt: {{path}}",
"test_upstream_btn": "Upstreamek tesztelése",
"upstreams": "Upstream-ek",
"apply_btn": "Alkalmaz",
@@ -185,6 +188,7 @@
"example_upstream_regular": "hagyományos DNS (UDP felett)",
"example_upstream_dot": "titkosított <0>DNS-over-TLS</0>",
"example_upstream_doh": "titkosított <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "titkosított <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "használhatja a <0> DNS Stamps</0>-ot a <1>DNSCrypt</1> vagy a <2>DNS-over-HTTPS</2> feloldások érdekében",
"example_upstream_tcp": "hagyományos DNS (TCP felett)",
"all_lists_up_to_date_toast": "Már minden lista naprakész",
@@ -193,6 +197,10 @@
"dns_test_not_ok_toast": "Szerver \"{{key}}\": nem használható, ellenőrizze, hogy helyesen írta-e be",
"unblock": "Feloldás",
"block": "Blokkolás",
"disallow_this_client": "Tiltás ennek a kliensnek",
"allow_this_client": "Engedélyezés ennek a kliensnek",
"block_for_this_client_only": "Tiltás csak ennek a kliensnek",
"unblock_for_this_client_only": "Feloldás csak ennek a kliensnek",
"time_table_header": "Idő",
"date": "Dátum",
"domain_name_table_header": "Domain név",
@@ -234,20 +242,25 @@
"blocking_mode": "Blokkolás módja",
"default": "Alapértelmezett",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null IP-cím",
"custom_ip": "Egyedi IP",
"blocking_ipv4": "IPv4 blokkolása",
"blocking_ipv6": "IPv6 blokkolása",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": ".mobileconfig letöltése DNS-over-HTTPS-hez",
"download_mobileconfig_dot": ".mobileconfig letöltése DNS-over-TLS-hez",
"plain_dns": "Egyszerű DNS",
"form_enter_rate_limit": "Adja meg a kérések maximális számát",
"rate_limit": "Kérések korlátozása",
"edns_enable": "EDNS kliens alhálózat engedélyezése",
"edns_cs_desc": "Ha engedélyezve van, az AdGuard Home a kliensek alhálózatait küldi el a DNS-kiszolgálóknak.",
"rate_limit_desc": "Maximálisan hány kérést küldhet egy kliens másodpercenként (0: korlátlan)",
"blocking_ipv4_desc": "A blokkolt A kéréshez visszaadandó IP-cím",
"blocking_ipv6_desc": "A blokkolt AAAA kéréshez visszaadandó IP-cím",
"blocking_mode_default": "Alapértelmezés: Adblock-stílusú szabály esetén REFUSED válasz küldése, /etc/hosts-stílusú szabály esetén pedig a szabályban meghatározott IP-címmel való válasz küldése",
"blocking_mode_default": "Alapértelmezés: Válaszoljon nulla IP-címmel (vagyis 0.0.0.0 az A-hoz, :: pedig az AAAA-hoz), amikor a blokkolás egy adblock-stílusú szabállyal történik; illetve válaszoljon egy, a szabály által meghatározott IP címmel, amikor a blokkolás egy /etc/hosts stílusú szabállyal történik",
"blocking_mode_refused": "REFUSED: Válaszoljon REFUSED kóddal",
"blocking_mode_nxdomain": "NXDOMAIN: Az NXDOMAIN kóddal fog válaszolni",
"blocking_mode_null_ip": "Null IP: Nullákból álló IP-címmel válaszol (0.0.0.0 for A; :: for AAAA)",
"blocking_mode_custom_ip": "Egyedi IP: Válasz egy kézzel beállított IP címmel",
@@ -261,7 +274,7 @@
"unknown_filter": "Ismeretlen szűrő: {{filterId}}",
"known_tracker": "Ismert követő",
"install_welcome_title": "Üdvözli az AdGuard Home!",
"install_welcome_desc": "Az AdGuard Home egy, a teljes hálózatot lefedő hirdetés és követő blokkoló DNS szerver. Az a célja, hogy lehetővé tegye a teljes hálózat és az összes eszköz vezérlését, és nem igényel kliensoldali programot.",
"install_welcome_desc": "Az AdGuard Home egy, a teljes hálózatot lefedő DNS szerver, amely blokkolja a hirdetéseket és a nyomkövető rendszereket. Az a célja, hogy lehetővé tegye a teljes hálózat és az összes eszköz felügyeletét, emellett pedig nem igényel kliensoldali programot.",
"install_settings_title": "Webes admin felület",
"install_settings_listen": "Figyelő felület",
"install_settings_port": "Port",
@@ -324,6 +337,8 @@
"encryption_https_desc": "Ha a HTTPS port konfigurálva van, akkor az AdGuard Home admin felülete elérhető lesz a HTTPS-en keresztül, és ezenkívül DNS-over-HTTPS-t is biztosít a '/dns-query' helyen.",
"encryption_dot": "DNS-over-TLS port",
"encryption_dot_desc": "Ha ez a port be van állítva, az AdGuard Home DNS-over-TLS szerverként tud futni ezen a porton.",
"encryption_doq": "DNS-over-TLS port",
"encryption_doq_desc": "Ha ez a port be van állítva, akkor az AdGuard Home egy DNS-over-QUIC szerverként fog futni ezen a porton. Ez egy kísérleti funkció és nem biztos, hogy megbízható. Emellett nincs sok olyan kliens, ami támogatná ezt jelenleg.",
"encryption_certificates": "Tanúsítványok",
"encryption_certificates_desc": "A titkosítás használatához érvényes SSL tanúsítványláncot kell megadnia a domainjéhez. Ingyenes tanúsítványt kaphat a <0>{{link}}</0> webhelyen, vagy megvásárolhatja az egyik megbízható tanúsítványkibocsátó hatóságtól.",
"encryption_certificates_input": "Másolja be ide a PEM-kódolt tanúsítványt.",
@@ -402,7 +417,8 @@
"dns_privacy": "DNS Adatvédelem",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Használja a(z) <1>{{address}}</1> szöveget.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Használja a(z) <1>{{address}}</1> szöveget.",
"setup_dns_privacy_3": "<0>Kérjük, vegye figyelembe, hogy a titkosított DNS protokollok csak Android 9-től vannak támogatva. Tehát további szoftvert kell telepítenie más operációs rendszerekhez.</0><0>Itt megtalálja azon szoftverek listáját, amelyeket használhat.</0>",
"setup_dns_privacy_3": "<0>Azon szoftverek listája, amelyeket használhat.</0>",
"setup_dns_privacy_4": "Az iOS14-en vagy a macOS Big Sur eszközökön le tud tölteni egy speciális, '.mobileconfig' nevű fájlt, ami hozzáadja a <highlight>DNS-over-HTTPS</highlight> vagy a <highlight>DNS-over-TLS</highlight> szervereket a DNS beállításokhoz.",
"setup_dns_privacy_android_1": "Az Android 9 natív módon támogatja a DNS-over-TLS-t. A beállításához menjen a Beállítások → Hálózat & internet → Speciális → Privát DNS menübe, és adja meg itt a domaint.",
"setup_dns_privacy_android_2": "Az <0>AdGuard for Android</0> támogatja a <1>DNS-over-HTTPS</1>-t és a <1>DNS-over-TLS</1>-t.",
"setup_dns_privacy_android_3": "Az <0>Intra</0> hozzáadja a <1>DNS-over-HTTPS</1> támogatást az Androidhoz.",
@@ -515,6 +531,7 @@
"check_reason": "Indok: {{reason}}",
"check_rule": "Szabály: {{rule}}",
"check_service": "Szolgáltatás neve: {{service}}",
"service_name": "Szolgáltatás neve",
"check_not_found": "Nem található az Ön szűrőlistái között",
"client_confirm_block": "Biztosan blokkolni szeretné a(z) \"{{ip}}\" klienst?",
"client_confirm_unblock": "Biztosan fel szeretné oldani a(z) \"{{ip}}\" kliens blokkolását?",
@@ -547,10 +564,14 @@
"milliseconds_abbreviation": "ms",
"cache_size": "Gyorsítótár mérete",
"cache_size_desc": "DNS gyorsítótár mérete (bájtokban)",
"cache_ttl_min_override": "A minimális TTL felülírása",
"cache_ttl_max_override": "A maximális TTL felülírása",
"enter_cache_size": "Adja meg a gyorsítótár méretét",
"enter_cache_ttl_min_override": "Adja meg a minimális TTL-t",
"enter_cache_ttl_max_override": "Adja meg a maximális TTL-t",
"cache_ttl_max_override_desc": "Felülbírálja az upstream kiszolgálótól kapott (maximális) TTL értéket",
"enter_cache_ttl_min_override": "Adja meg a minimális TTL-t (másodpercben)",
"enter_cache_ttl_max_override": "Adja meg a maximális TTL-t (másodpercben)",
"cache_ttl_min_override_desc": "Megnöveli a DNS kiszolgálótól kapott rövid TTL értékeket (másodpercben), ha gyorsítótárazza a DNS kéréseket",
"cache_ttl_max_override_desc": "Állítson be egy maximális TTL értéket (másodpercben) a DNS gyorsítótár bejegyzéseihez",
"ttl_cache_validation": "A minimális gyorsítótár TTL értéknek kisebbnek vagy egyenlőnek kell lennie a maximum értékkel",
"filter_category_general": "Általános",
"filter_category_security": "Biztonság",
"filter_category_regional": "Regionális",
@@ -562,5 +583,8 @@
"setup_config_to_enable_dhcp_server": "Konfiguráció beállítása a DHCP-kiszolgáló engedélyezéséhez",
"original_response": "Eredeti válasz",
"click_to_view_queries": "Kattintson a lekérésekért",
"port_53_faq_link": "Az 53-as portot gyakran a \"DNSStubListener\" vagy a \"systemd-resolved\" (rendszer által feloldott) szolgáltatások használják. Kérjük, olvassa el <0>ezt az útmutatót</0> a probléma megoldásához."
"port_53_faq_link": "Az 53-as portot gyakran a \"DNSStubListener\" vagy a \"systemd-resolved\" (rendszer által feloldott) szolgáltatások használják. Kérjük, olvassa el <0>ezt az útmutatót</0> a probléma megoldásához.",
"adg_will_drop_dns_queries": "Az AdGuard Home eldobja az összes DNS kérést erről a kliensről.",
"client_not_in_allowed_clients": "Ez a kliens nincs engedélyezve, mivel nincs rajta az \"Engedélyezett kliensek\" listáján.",
"experimental": "Kísérleti"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Pengaturan klien",
"example_upstream_reserved": "Anda dapat menetapkan DNS upstream <0>untuk domain spesifik</0>",
"example_upstream_comment": "Anda dapat menentukan komentar",
"upstream_parallel": "Gunakan kueri paralel untuk mempercepat resoluasi dengan menanyakan semua server upstream secara bersamaan",
"parallel_requests": "Permintaan paralel",
"load_balancing": "Penyeimbang beban",
@@ -114,7 +115,7 @@
"average_processing_time": "Rata-rata waktu pemrosesan",
"average_processing_time_hint": "Rata-rata waktu dalam milidetik untuk pemrosesan sebuah permintaan DNS",
"block_domain_use_filters_and_hosts": "Blokir domain menggunakan filter dan file hosts",
"filters_block_toggle_hint": "Anda dapat menyiapkan aturan pemblokiran di pengaturan <a href='#filters'>Penyaringan</a>.",
"filters_block_toggle_hint": "Anda dapat menyiapkan aturan pemblokiran di pengaturan <a>Penyaringan</a>.",
"use_adguard_browsing_sec": "Gunakan layanan web Keamanan Penjelajahan AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home akan mengecek jika domain diblacklist oleh layanan web keamanan penjelajahan. Akan menggunakan lookup API yang ramah privasi untuk melakukan cek: hanya awalan singkat hash SHA256 dari nama domain yang dikirim ke server.",
"use_adguard_parental": "Gunakan layanan web kontrol orang tua AdGuard",
@@ -132,6 +133,8 @@
"encryption_settings": "Pengaturan enkripsi",
"dhcp_settings": "Pengaturan DHCP",
"upstream_dns": "Server DNS hulu",
"upstream_dns_help": "Masukkan alamat server per baris. <a>Pelajari lebih</a> mengenai konfigurasi upstream server DNS.",
"upstream_dns_configured_in_file": "Diatur dalam {{path}}",
"test_upstream_btn": "Uji hulu",
"upstreams": "Upstream",
"apply_btn": "Terapkan",
@@ -185,6 +188,7 @@
"example_upstream_regular": "DNS reguler (melalui UDP)",
"example_upstream_dot": "terenkripsi <0>DNS-over-TLS</0>",
"example_upstream_doh": "terenkripsi <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "terenkripsi <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "anda bisa menggunakan <0>Stempel DNS</0> untuk <1>DNSCrypt</1> atau pengarah <2>DNS-over-HTTPS</2>",
"example_upstream_tcp": "DNS reguler (melalui TCP)",
"all_lists_up_to_date_toast": "Semua daftar sudah diperbarui",
@@ -193,6 +197,10 @@
"dns_test_not_ok_toast": "Server \"{{key}}\": tidak dapat digunakan, mohon cek bahwa Anda telah menulisnya dengan benar",
"unblock": "Buka Blokir",
"block": "Blok",
"disallow_this_client": "Cabut ijin untuk klien ini",
"allow_this_client": "Ijinkan klien ini",
"block_for_this_client_only": "Blok hanya untuk klien ini",
"unblock_for_this_client_only": "Jangan diblok hanya untuk klien ini",
"time_table_header": "Waktu",
"date": "Tanggal",
"domain_name_table_header": "Nama domain",
@@ -234,20 +242,25 @@
"blocking_mode": "Mode blokir",
"default": "Standar",
"nxdomain": "NXDOMAIN",
"refused": "DITOLAK",
"null_ip": "Null IP",
"custom_ip": "Custom IP",
"blocking_ipv4": "Blokiran IPv4",
"blocking_ipv6": "Blokiran IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Unduh .mobileconfig untuk DNS-over-HTTPS",
"download_mobileconfig_dot": "Unduh .mobileconfig untuk DNS-over-TLS",
"plain_dns": "Plain DNS",
"form_enter_rate_limit": "Masukkan batas nilai",
"rate_limit": "Batas nilai",
"edns_enable": "Aktifkan EDNS Klien Subnet",
"edns_cs_desc": "Apabila dinyalakan, AdGuard Home akan mengirim subnet klien ke server-server DNS.",
"rate_limit_desc": "Jumlah permintaan per detik yang diperbolehkan untuk satu klien (atur ke 0 untuk tidak terbatas)",
"blocking_ipv4_desc": "Alamat IP akan dikembalikan untuk permintaan A yang diblokir",
"blocking_ipv6_desc": "Alamat IP akan dipulihkan untuk permintaan AAAA yang diblokir",
"blocking_mode_default": "Standar: Respon pakai REFUSED saat diblokir oleh aturan gaya Adblock; membalas dengan alamat IP yang ditentukan dalam aturan ketika diblokir oleh /et /aturan hosts-style",
"blocking_mode_default": "Default: Tanggapi dengan alamat IP nol (0.0.0.0 untuk A; :: untuk AAAA) saat diblokir oleh aturan gaya Adblock; tanggapi dengan alamat IP yang ditentukan dalam aturan ketika diblokir oleh aturan gaya host /etc/",
"blocking_mode_refused": "DITOLAK: Respon dengan kode DITOLAK",
"blocking_mode_nxdomain": "NXDOMAIN: Respon pakai kode NXDOMAIN",
"blocking_mode_null_ip": "Null IP: Respon pakai alamat IP kosong (0.0.0.0 untuk A; :: untuk AAAA)",
"blocking_mode_custom_ip": "IP kustom: respon dengan alamat IP yang diset secara manual",
@@ -324,6 +337,8 @@
"encryption_https_desc": "Jika port HTTPS dikonfigurasi, antarmuka admin Home AdGuard akan dapat diakses melalui HTTPS, dan itu juga akan memberikan DNS-over-HTTPS di lokasi '/ dns-query'.",
"encryption_dot": "Port DNS-over-TLS",
"encryption_dot_desc": "Jika port ini terkonfigurasi, AdGuard Home akan menjalankan server DNS-over-TLS dalam port ini",
"encryption_doq": "Port DNS-lewat-QUIC",
"encryption_doq_desc": "Jika port ini diatur secara sepesifik, AdGuard Home akan menjalankan server DNS-lewat-QUIC pada port ini. Ini adalah eksperimental dan mungkin tidak dapat diandalkan. Juga, tidak banyak klien yang mendukungnya saat ini.",
"encryption_certificates": "Sertifikat",
"encryption_certificates_desc": "Untuk menggunakan enkripsi, Anda perlu memberikan rantai sertifikat SSL yang valid untuk domain Anda. Anda bisa mendapatkan sertifikat gratis di <0>{{link}}</0> atau Anda dapat membelinya dari salah satu Otoritas Sertifikat tepercaya.",
"encryption_certificates_input": "Salin / rekatkan sertifikat PEM yang disandikan di sini.",
@@ -402,7 +417,8 @@
"dns_privacy": "DNS Privasi",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Memakai <1>{{address}}</1> string.",
"setup_dns_privacy_2": "<0>DNS-over-TLS:</0> Memakai <1>{{address}}</1> string.",
"setup_dns_privacy_3": "<0>Harap dicatat bahwa protokol DNS terenkripsi hanya didukung pada Android 9. Jadi Anda perlu memasang perangkat lunak tambahan untuk sistem operasi lain.</0><0>Berikut daftar perangkat lunak yang dapat Anda gunakan.</0>",
"setup_dns_privacy_3": "<0>Berikut daftar perangkat lunak yang dapat Anda gunakan.</0>",
"setup_dns_privacy_4": "Di perangkat iOS 14 atau macOS Big Sur, Anda dapat mengunduh file '.mobileconfig' khusus yang menambahkan server <highlight>DNS-over-HTTPS</highlight> atau <highlight>DNS-over-TLS</highlight> ke pengaturan DNS.",
"setup_dns_privacy_android_1": "Android 9 mendukung DNS-over-TLS secara asli. Untuk mengkonfigurasinya, buka Pengaturan → Jaringan & internet → Tingkat Lanjut → DNS Pribadi dan masukkan nama domain Anda di sana.",
"setup_dns_privacy_android_2": "<0>AdGuard untuk Android</0> mendukung <1>DNS-over-HTTPS</1> dan <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> menambahkan dukungan <1>DNS-over-HTTPS</1> untuk Android.",
@@ -515,6 +531,7 @@
"check_reason": "Alasan: {{reason}}",
"check_rule": "Aturan: {{rule}}",
"check_service": "Nama layanan: {{service}}",
"service_name": "Nama layanan",
"check_not_found": "Tidak di temukan di daftar penyaringan anda",
"client_confirm_block": "Apa anda yakin ingin mem-blokir klien ini \"{{ip}}\"?",
"client_confirm_unblock": "Apa anda yakin ingin meng-unblock klien ini \"{{ip}}\"?",
@@ -549,10 +566,12 @@
"cache_size_desc": "Ukuran DNS cache (dalam bit)",
"cache_ttl_min_override": "Tumpuk TTL minimum",
"cache_ttl_max_override": "Tumpuk TTL maksimum",
"enter_cache_size": "Masukkan ukuran cache",
"enter_cache_ttl_min_override": "Masukkan TTL minimum",
"enter_cache_ttl_max_override": "Masukkan TTL maksimum",
"cache_ttl_max_override_desc": "Ganti nilai TTL (maksimum) yang diterima dari server upstream",
"enter_cache_size": "Masukkan ukuran cache (bytes)",
"enter_cache_ttl_min_override": "Masukkan TTL minimum (detik)",
"enter_cache_ttl_max_override": "Masukkan TTL maksimum (detik)",
"cache_ttl_min_override_desc": "Perpanjang nilai waktu-online singkat (detik) yang diterima dari server upstream saat menyimpan respons DNS",
"cache_ttl_max_override_desc": "Tetapkan nilai waktu-online maksimum (detik) untuk entri di cache DNS",
"ttl_cache_validation": "Nilai TTL cache minimum harus kurang dari atau sama dengan nilai maksimum",
"filter_category_general": "Umum",
"filter_category_security": "Keamanan",
"filter_category_regional": "Wilayah",
@@ -564,5 +583,8 @@
"setup_config_to_enable_dhcp_server": "Setel konfigurasi untuk aktifkan server DHCP",
"original_response": "Respon asli",
"click_to_view_queries": "Klik untuk lihat permintaan",
"port_53_faq_link": "Port 53 sering ditempati oleh layanan \"DNSStubListener\" atau \"systemd-resolved\". Silakan baca <0>instruksi ini</0> tentang cara menyelesaikan ini."
"port_53_faq_link": "Port 53 sering ditempati oleh layanan \"DNSStubListener\" atau \"systemd-resolved\". Silakan baca <0>instruksi ini</0> tentang cara menyelesaikan ini.",
"adg_will_drop_dns_queries": "AdGuard Home akan menghapus semua permintaan DNS dari klien ini.",
"client_not_in_allowed_clients": "Klien tidak diizinkan karena tidak ada dalam daftar \"Klien yang diizinkan\".",
"experimental": "Eksperimental"
}

View File

@@ -1,12 +1,13 @@
{
"client_settings": "Impostazioni client",
"example_upstream_reserved": "Puoi specificare un server DNS<0>per uno specifico dominio(i)</0>",
"example_upstream_comment": "Puoi specificare il commento",
"upstream_parallel": "Utilizza richieste parallele per accelerare la risoluzione interrogando simultaneamente tutti i server",
"parallel_requests": "Richieste parallele",
"load_balancing": "Bilanciamento del carico",
"load_balancing_desc": "Interroga un server per volta. AdGuard Home utilizzerà un algoritmo casuale per la selezione del server, in maniera tale da propendere il maggior numero di volte per quello più veloce.",
"bootstrap_dns": "Server DNS di avvio",
"bootstrap_dns_desc": "Server DNS utilizzati per risolvere gli indirizzi IP dei risolutori DoH/DoT specificati come upstream.",
"bootstrap_dns": "Server DNS bootstrap",
"bootstrap_dns_desc": "Server DNS bootstrap sono utilizzati per risolvere gli indirizzi IP dei risolutori DoH/DoT specificati come upstream.",
"check_dhcp_servers": "Controlla la presenza di server DHCP",
"save_config": "Salva configurazione",
"enabled_dhcp": "Server DHCP attivo",
@@ -114,7 +115,7 @@
"average_processing_time": "Tempo di elaborazione medio",
"average_processing_time_hint": "Tempo medio in millisecondi per elaborare una richiesta DNS",
"block_domain_use_filters_and_hosts": "Blocca domini utilizzando filtri e file hosts",
"filters_block_toggle_hint": "Puoi impostare le regole di blocco nelle impostazioni dei <a href='#filters'>Filtri</a>.",
"filters_block_toggle_hint": "Puoi impostare le regole di blocco nelle impostazioni dei <a>Filtri</a>.",
"use_adguard_browsing_sec": "Utilizza il servizio web AdGuard \"sicurezza di navigazione\"",
"use_adguard_browsing_sec_hint": "AdGuard Home verificherà se il dominio è stato bloccato dal servizio web \"sicurezza di navigazione\". Per eseguire il controllo utilizzerà delle API privacy-friendly: verrà inviato al server solo un breve prefisso dell'hash SHA256 del nome del dominio.",
"use_adguard_parental": "Utilizza il Controllo Parentale di AdGuard",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Blocca IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Scarica .mobileconfig per DNS-over-HTTPS",
"download_mobileconfig_dot": "Scarica .mobileconfig per DNS-over-TLS",
"plain_dns": "DNS semplice",
"form_enter_rate_limit": "Imposta limite delle richieste",
"rate_limit": "Limite delle richieste",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Il numero di richieste al secondo che un singolo client può fare (0: illimitato)",
"blocking_ipv4_desc": "Indirizzo IP per una richiesta DNS IPv4 bloccata",
"blocking_ipv6_desc": "Indirizzo IP restituito per una richiesta DNS IPv6 bloccata",
"blocking_mode_default": "Predefinito: Rispondi con REFUSED quando bloccato da una regola di blocco annunci; rispondi con l'indirizzo IP specificato nella regola quando bloccato dalla regola / etc / hosts-style",
"blocking_mode_default": "Predefinito: Rispondi con IP address zero (0.0.0.0 per A; :: per AAAA) quando bloccato da una regola di blocco annunci; rispondi con l'indirizzo IP specificato nella regola quando bloccato dalla regola /etc/hosts-style",
"blocking_mode_refused": "REFUSED: Risposta con codice di REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Rispondi con il codice NXDOMAIN",
"blocking_mode_null_ip": "IP nullo: Rispondi con indirizzo IP zero (0.0.0.0 per A; :: per AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "Privacy DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Utilizza la stringa <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Utilizza la stringa <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Nota che i protocolli DNS crittografati sono supportati solo su Android 9. Quindi è necessario installare software aggiuntivo per altri sistemi operativi.</0><0>Ecco un elenco di software che è possibile utilizzare.</0>",
"setup_dns_privacy_3": "<0>Ecco un elenco di software che è possibile utilizzare.</0>",
"setup_dns_privacy_4": "Si usa un dispositivo iOS 14 o macOS Big Sur puoi scaricare uno file speciale.mobileconfig' che aggiunge i server <highlight>DNS-over-HTTPS</highlight> or <highlight>DNS-over-TLS</highlight> alle configurazioni DNS.",
"setup_dns_privacy_android_1": "Android 9 supporta DNS-over-TLS in modo nativo. Per configurarlo, vai su Impostazioni → Rete e Internet → Avanzate → DNS privato e inserisci qui il tuo nome di dominio.",
"setup_dns_privacy_android_2": "<0>AdGuard per Android</0> supporta <1>DNS-over-HTTPS</1> e <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> aggiunge <1>DNS-over-HTTPS</1> il supporto ad Android.",
@@ -527,6 +531,7 @@
"check_reason": "Motivo: {{reason}}",
"check_rule": "Regola: {{rule}}",
"check_service": "Nome servizio: {{service}}",
"service_name": "Nome servizio",
"check_not_found": "Non trovato negli elenchi dei filtri",
"client_confirm_block": "Sei sicuro di voler bloccare il client \"{{ip}}\"?",
"client_confirm_unblock": "Sei sicuro di voler sbloccare il client \"{{ip}}\"?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Dimensioni cache DNS (in byte)",
"cache_ttl_min_override": "Sovrascrivi TTL minimo",
"cache_ttl_max_override": "Sovrascrivi TTL massimo",
"enter_cache_size": "Immetti dimensioni cache",
"enter_cache_ttl_min_override": "Immetti TTL minimo",
"enter_cache_ttl_max_override": "Immetti TTL massimo",
"cache_ttl_min_override_desc": "Sovrascrivi il valore TTL (minimo) ricevuto dall'upstream del server",
"cache_ttl_max_override_desc": "Sovrascrivi valore TTL (massimo) ricevuto dall'upstream del server",
"enter_cache_size": "Immetti dimensioni cache (in byte)",
"enter_cache_ttl_min_override": "Immetti TTL minimo (in secondi)",
"enter_cache_ttl_max_override": "Immetti TTL massimo (in secondi)",
"cache_ttl_min_override_desc": "Estende i valori brevi (in secondi) ricevuti dal server upstream durante la memorizzazione nella cache delle risposte DNS",
"cache_ttl_max_override_desc": "Imposta un periodo massimo di attivazione (in secondi) per le voci nella cache DNS",
"ttl_cache_validation": "Il valore minimo della cache TTL deve essere inferiore o uguale al valore massimo",
"filter_category_general": "Generali",
"filter_category_security": "Sicurezza",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Clicca per visualizzare le richieste",
"port_53_faq_link": "La Porta 53 è spesso occupata dai servizi \"DNSStubListener\" o \"systemd-resolved\". Si prega di leggere <0>queste istruzioni</0> per risolvere il problema.",
"adg_will_drop_dns_queries": "AdGuard Home eliminerà tutte le richieste DNS da questo client.",
"client_not_in_allowed_clients": "Il client non è consentito perché non è nell'elenco \"Client consentiti\".",
"experimental": "Sperimentale"
}

View File

@@ -114,7 +114,7 @@
"average_processing_time": "平均処理時間",
"average_processing_time_hint": "DNSリクエストの処理にかかる平均時間ミリ秒単位",
"block_domain_use_filters_and_hosts": "フィルタとhostsファイルを使用してドメインをブロックする",
"filters_block_toggle_hint": "<a href='#filters'>フィルタ</a>の設定でブロックするルールを設定することができます。",
"filters_block_toggle_hint": "<a>フィルタ</a>の設定でブロックするルールを設定することができます。",
"use_adguard_browsing_sec": "AdGuardブラウジングセキュリティ・ウェブサービスを使用する",
"use_adguard_browsing_sec_hint": "AdGuard Homeは、ブラウジングセキュリティ・ウェブサービスによってドメインがブラックリストに登録されているかどうかを確認します。 これはプライバシーを考慮したAPIを使用してチェックを実行します。ドメイン名SHA256ハッシュの短いプレフィックスのみがサーバに送信されます。",
"use_adguard_parental": "AdGuardペアレンタルコントロール・ウェブサービスを使用する",
@@ -256,7 +256,7 @@
"rate_limit_desc": "単一のクライアントに対して許可される1秒あたりのリクエスト数「0」に設定すると無制限になります",
"blocking_ipv4_desc": "ブロックされたAリクエストに対して応答されるIPアドレス",
"blocking_ipv6_desc": "ブロックされたAAAAリクエストに対して応答されるIPアドレス",
"blocking_mode_default": "デフォルトAdblockスタイルのルールによってブロックされると、REFUSEDで応答します。 /etc/hostsスタイルのルールによってブロックされると、ルール指定されIPアドレスで応答します",
"blocking_mode_default": "デフォルトAdblockルールによってブロックされると、ゼロIPアドレスAに対しては「0.0.0.0」、AAAAに対しては「::」)で応答します。/etc/hostsルールによってブロックされると、ルールにて指定されているIPアドレスで応答します",
"blocking_mode_refused": "REFUSED: 「REFUSED」コードで応答します",
"blocking_mode_nxdomain": "NXDOMAINNXDOMAINコードで応答します",
"blocking_mode_null_ip": "Null IPゼロのIPアドレスで応答しますAの場合は0.0.0.0; AAAAの場合は::",
@@ -414,7 +414,7 @@
"dns_privacy": "DNSプライバシー",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1>という文字列を使用してください。",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1>という文字列を使用してください。",
"setup_dns_privacy_3": "<0>暗号化されたDNSプロトコルはAndroid 9でのみサポートされていることに注意してください。そのため、他のオペレーティングシステムでは追加のソフトウェアをインストールする必要があります。</0> <0>使用できるソフトウェアの一覧です。</0>",
"setup_dns_privacy_4": "iOS 14 または macOS Big Sur デバイスにて、<highlight>DNS-over-HTTPS</highlight>または<highlight>DNS-over-TLS</highlight>サーバをDNS設定へ追加する特別な「.mobileconfig」ファイルをダウンロードできます。",
"setup_dns_privacy_android_1": "Android 9はDNS-over-TLSをネイティブにサポートします。設定するには、設定 → ネットワークとインターネット → 詳細設定 → プライベートDNS へ遷移し、そこにドメイン名を入力してください。",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0>は、<1>DNS-over-HTTPS</1>と<1>DNS-over-TLS</1>をサポートしています。",
"setup_dns_privacy_android_3": "<0>Intra</0>は、Androidに<1>DNS-over-HTTPS</1>サポートを追加します。",
@@ -510,7 +510,7 @@
"fastest_addr_desc": "すべてのDNSサーバーを照会し、全応答の中で最速のIPアドレスを返します",
"autofix_warning_text": "\"改善\"をクリックすると、AdGuardHomeはAdGuardHome DNSサーバを使用するようにシステムを構成します。",
"autofix_warning_list": "次のタスクを実行します:<0>システムDNSStubListenerを非アクティブ化します</0> <0>DNSサーバのアドレスを127.0.0.1に設定します</0> <0>/etc/resolv.confのシンボリックリンクの対象を/run/systemd/resolve/resolv.confに置換します</0> <0>DNSStubListenerを停止しますsystemd-resolvedサービスをリロードします</0>",
"autofix_warning_result": "その結果、システムからのすべてのDNS要求は、デフォルトでAdGuardHomeによって処理されます。",
"autofix_warning_result": "その結果、システムからのすべてのDNSリクエストは、デフォルトでAdGuard Homeによって処理されます。",
"tags_title": "タグ",
"tags_desc": "クライアントに対応するタグを選択できます。タグはフィルタリングルールに含めることができ、より正確に適用できます。 <0>詳細</0>",
"form_select_tags": "クライアントのタグを選択する",
@@ -561,11 +561,6 @@
"cache_size_desc": "DNSキャッシュサイズバイト単位",
"cache_ttl_min_override": "最小TTLの上書き秒単位",
"cache_ttl_max_override": "最大TTLの上書き秒単位",
"enter_cache_size": "キャッシュサイズを入力してください",
"enter_cache_ttl_min_override": "最小TTLを入力してください",
"enter_cache_ttl_max_override": "最大TTLを入力してください",
"cache_ttl_min_override_desc": "アップストリームサーバから受信したTTL値最小値をオーバーライドする",
"cache_ttl_max_override_desc": "上流サーバから受信したTTL値最大を上書き。",
"ttl_cache_validation": "最小キャッシュTTL値は最大値以下にする必要があります",
"filter_category_general": "一般",
"filter_category_security": "セキュリティ",

View File

@@ -1,6 +1,7 @@
{
"client_settings": "클라이언트 설정",
"example_upstream_reserved": "<0>특정 도메인에 대한</0> DNS 업스트림을 지정할 수 있습니다.",
"example_upstream_comment": "설명을 맞춤 지정할 수 있습니다.",
"upstream_parallel": "쿼리 처리 속도를 높이려면 모든 업스트림 서버에서 동시에 병렬 쿼리를 사용해주세요.",
"parallel_requests": "병렬 처리 요청",
"load_balancing": "로드 밸런싱",
@@ -114,7 +115,7 @@
"average_processing_time": "평균처리 시간",
"average_processing_time_hint": "DNS 요청 처리시 평균 시간(밀리초)",
"block_domain_use_filters_and_hosts": "필터 및 호스트 파일을 사용하여 도메인 차단",
"filters_block_toggle_hint": "차단규칙<a href='#filters'>필터</a>을 설정할 수 있습니다.",
"filters_block_toggle_hint": "차단규칙<a>필터</a>을 설정할 수 있습니다.",
"use_adguard_browsing_sec": "AdGuard 브라우징 보안 웹 서비스 사용",
"use_adguard_browsing_sec_hint": "AdGuard Home은 개인정보를 보호하는 API를 사용하여 브라우징 보안 웹 서비스를 통해 도메인이 블랙리스트에 올라 있는지 확인합니다. 참고: 도메인 이름의 SHA256 해시의 짧은 접두사만 서버로 전송됩니다.",
"use_adguard_parental": "AdGuard 자녀 보호 웹 서비스 사용",
@@ -248,6 +249,8 @@
"blocking_ipv6": "IPv6 차단",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "DNS-over-HTTPS용 .mobileconfig 다운로드",
"download_mobileconfig_dot": "DNS-over-TLS용 .mobileconfig 다운로드",
"plain_dns": "평문 DNS",
"form_enter_rate_limit": "한도 제한 입력하기",
"rate_limit": "한도 제한",
@@ -256,7 +259,7 @@
"rate_limit_desc": "단일 클라이언트에서 허용 가능한 초 당 요청 생성 숫자 (0: 무제한)",
"blocking_ipv4_desc": "차단된 A 요청에 대해서 반환할 IP 주소",
"blocking_ipv6_desc": "차단된 AAAA 요청에 대해서 반환할 IP 주소",
"blocking_mode_default": "기본: Adblock 스타일 규칙에 의해 차단되면 REFUSED으로 응답합니다; /etc/hosts 스타일 규칙에 의해 차단되면 규칙에 정의된 IP 주소로 응답합니다",
"blocking_mode_default": "기본: Adblock 스타일 규칙에 의해 차단되면 제로 IP 주소(A는 0.0.0.0; AAAA는 ::)로 응답합니다; /etc/hosts 스타일 규칙에 의해 차단되면 규칙에 정의된 IP 주소로 응답합니다",
"blocking_mode_refused": "REFUSED: REFUSED 코드로 응답",
"blocking_mode_nxdomain": "NXDOMAIN: NXDOMAIN 코드로 응답",
"blocking_mode_null_ip": "Null IP: 제로 IP 주소 (A는 0.0.0.0; AAAA는 ::) 로 응답합니다",
@@ -414,7 +417,8 @@
"dns_privacy": "DNS 프라이버시",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> 사용하세요.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> 사용하세요.",
"setup_dns_privacy_3": "<0>암호화된 DNS 프로토콜은 Android 9에서만 지원됩니다. 다른 운영 체제를 위한 추가 소프트웨어를 설치해야 합니다.</0><0>사용할 수 있는 소프트웨어 목록입니다. </0>",
"setup_dns_privacy_3": "<0>사용할 수 있는 소프트웨어는 다음과 같습니다.</0>",
"setup_dns_privacy_4": "iOS 14 또는 macOS Big Sur 기기에서 DNS 설정에 <highlight>DNS-over-HTTPS</highlight> 또는 <highlight>DNS-over-TLS</highlight> 서버를 추가하는 특수 '.mobileconfig' 파일을 다운로드할 수 있습니다.",
"setup_dns_privacy_android_1": "Android 9는 기본적으로 DNS-over-TLS를 지원합니다. 구성하려면 설정 → 네트워크 및 인터넷 → 고급 → 개인 DNS로 이동하여 도메인 이름을 입력하세요.",
"setup_dns_privacy_android_2": "<0>Android용 AdGuard</0>DNS-over-HTTPS <1>및</1> DNS-over-TLS <1>지원합니다</1>",
"setup_dns_privacy_android_3": "<0>인트라</0> 안드로이드에 <1>DNS-over-HTTPS </1>지원 추가합니다.",
@@ -527,6 +531,7 @@
"check_reason": "이유: {{reason}}",
"check_rule": "규칙: {{rule}}",
"check_service": "서비스 이름: {{service}}",
"service_name": "서비스 이름",
"check_not_found": "필터 목록에서 찾을 수 없음",
"client_confirm_block": "정말로 클라이언트 \"{{ip}}\"을(를) 차단하시겠습니까?",
"client_confirm_unblock": "정말로 클라이언트 \"{{ip}}\"의 차단을 해제하시겠습니까?",
@@ -580,5 +585,6 @@
"click_to_view_queries": "쿼리를 보려면 클릭합니다",
"port_53_faq_link": "53번 포트는 보통 \"DNSStubListener\"나 \"systemd-resolved\" 서비스가 이미 사용하고 있습니다. 이 문제에 대한 해결 방법을 <0>설명</0>에서 찾아보세요.",
"adg_will_drop_dns_queries": "AdGuard Home은 이 클라이언트에서 모든 DNS 쿼리를 삭제합니다.",
"client_not_in_allowed_clients": "이 클라이언트는 허용된 클라이언트 목록에 없으므로 허용되지 않습니다.",
"experimental": "실험"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "cliënt Instellingen",
"client_settings": "Cliënt Instellingen",
"example_upstream_reserved": "Je kan DNS upstream <0>specifiëren voor specifieke domein(en)</0>",
"example_upstream_comment": "Het commentaar kan gespecificeerd worden",
"upstream_parallel": "Gebruik parallelle verzoeken om te versnellen door gelijktijdig verzoeken te sturen naar alle upstream servers",
"parallel_requests": "Parallelle verzoeken",
"load_balancing": "Volume balanceren",
@@ -114,7 +115,7 @@
"average_processing_time": "Gemiddelde procestijd",
"average_processing_time_hint": "Gemiddelde verwerkingstijd in milliseconden van een DNS aanvraag",
"block_domain_use_filters_and_hosts": "Blokkeerd domeinen dmv filters en host bestanden",
"filters_block_toggle_hint": "Je kunt blokkeer regels toevoegen in de <a href='#filters'>Filters</a>instellingen",
"filters_block_toggle_hint": "Je kan blokkeringsregels toevoegen in de <a>Filters</a> instellingen.",
"use_adguard_browsing_sec": "Gebruik AdGuardBrowsing Security web service",
"use_adguard_browsing_sec_hint": "AdGuard Home controleert of het domein in de blokkeerlijst voorkomt dmv Browsing Security web service. Dit gebeurt dmv een privacy vriendelijk API verzoek:een korte prefix van de domein naam met SHA256 hash wordt verzonden naar de server.",
"use_adguard_parental": "Gebruik AdGuard Ouderlijk toezicht web service",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Blokkeren IP6",
"dns_over_https": "DNS-via-HTTPS",
"dns_over_tls": "DNS-via-TLS",
"download_mobileconfig_doh": ".mobileconfig voor DNS-via-HTTPS downloaden",
"download_mobileconfig_dot": ".mobileconfig voor DNS-via-TLS downloaden",
"plain_dns": "Gewone DNS",
"form_enter_rate_limit": "Voer ratio limiet in",
"rate_limit": "Ratio limiet",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Het aantal verzoeken per seconde die een enkele client mag doen (0 betekent onbeperkt)",
"blocking_ipv4_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek",
"blocking_ipv6_desc": "IP-adres dat moet worden teruggegeven voor een geblokkeerd A-verzoek",
"blocking_mode_default": "Standaard: Reageer met REFUSED wanneer geblokkeerd door een Adblock-type regel; reageer met het IP-adres dat is opgegeven in de regel wanneer het wordt geblokkeerd door een /etc/hosts type regel",
"blocking_mode_default": "Standaard: Reageer met een nul IP adres (0.0.0.0 for A; :: voor AAAA) wanneer geblokkeerd door een Adblock-type regel; reageer met het IP-adres dat is opgegeven in de regel wanneer geblokkeerd door een /etc/hosts type regel",
"blocking_mode_refused": "REFUSED: Antwoorden met REFUSED code",
"blocking_mode_nxdomain": "NXDOMAIN: Reageer met NXDOMAIN code",
"blocking_mode_null_ip": "Nul IP: Reageer met een nul IP address (0.0.0.0 voor A; :: voor AAAA)",
@@ -415,6 +418,7 @@
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Gebruik <1>{{address}}</1> string.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Gebruik <1>{{address}}</1> string.",
"setup_dns_privacy_3": "<0>Hou er rekening mee dat het beveiligde DNS protocol alleen beschikbaar is voor Android 9. U moet dus extra software installeren voor andere besturingssystemen.</0><0>Hier is een lijst van te gebruiken software.</0>",
"setup_dns_privacy_4": "Op een iOS 14 of macOS Big Sur apparaat kan je een speciaal '.mobileconfig'-bestand downloaden dat <highlight>DNS-via-HTTPS</highlight> of <highlight>DNS-via-TLS</highlight> servers aan de DNS-instellingen toevoegt.",
"setup_dns_privacy_android_1": "Android 9 ondersteunt native DNS-over-TLS. Om het te configureren, ga naar Instellingen → Netwerk & internet → Geavanceerd → Privé DNS en voer daar uw domeinnaam in.",
"setup_dns_privacy_android_2": "<0>AdGuard voor Android</0>ondersteunt<1>DNS-over-HTTPS </1>en<1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0> Intra </0> voegt <1> DNS-over-HTTPS</1> ondersteuning toe aan Android.",
@@ -527,6 +531,7 @@
"check_reason": "Reden: {{reason}}",
"check_rule": "Regel: {{rule}}",
"check_service": "Servicenaam: {{service}}",
"service_name": "Naam service",
"check_not_found": "Niet in je lijst met filters gevonden",
"client_confirm_block": "Weet je zeker dat je client \"{{ip}}\" wil blokkeren?",
"client_confirm_unblock": "Weet je zeker dat je client \"{{ip}}\" niet meer wil blokkeren?",
@@ -561,11 +566,11 @@
"cache_size_desc": "DNS cache grootte (in bytes)",
"cache_ttl_min_override": "Minimale TTL overschrijven",
"cache_ttl_max_override": "Maximale TTL overschrijven",
"enter_cache_size": "Cache grootte invoeren",
"enter_cache_ttl_min_override": "Minimale TTL invoeren",
"enter_cache_ttl_max_override": "Maximale TTL invoeren",
"cache_ttl_min_override_desc": "Overschrijf de TTL waarde (minimum) ontvangen van de upstream server",
"cache_ttl_max_override_desc": "Overschrijft TTL waarde (maximaal) ontvangen van de upstream server",
"enter_cache_size": "Cache grootte invoeren (bytes)",
"enter_cache_ttl_min_override": "Minimum TTL invoeren (seconden)",
"enter_cache_ttl_max_override": "Maximum TTL invoeren (seconden)",
"cache_ttl_min_override_desc": "Uitbreiden van korte Time-To-Live waardes (seconden) ontvangen van de upstream server bij het cachen van DNS antwoorden",
"cache_ttl_max_override_desc": "Instellen van maximum time-to-live waarde (seconden) voor opslag in de DNS cache",
"ttl_cache_validation": "Minimale waarde TTL-cache moet kleiner dan of gelijk zijn aan de maximale waarde",
"filter_category_general": "Algemeen",
"filter_category_security": "Beveiliging",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Klik om queries te bekijken",
"port_53_faq_link": "Poort 53 wordt vaak gebruikt door services als DNSStubListener- of de systeem DNS-resolver. Lees a.u.b. <0>deze instructie</0> hoe dit is op te lossen.",
"adg_will_drop_dns_queries": "AdGuard Home zal alle DNS verzoeken van deze toepassing/dit systeem negeren.",
"client_not_in_allowed_clients": "De toepassing is niet toegestaan omdat deze niet in de lijst \"Toegestane toepassingen\" voorkomt.",
"experimental": "Experimenteel"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Klientinnstillinger",
"example_upstream_reserved": "du kan bestemme en oppstrøms-DNS <0>for et spesifikt domene(r)</0>",
"example_upstream_comment": "Du kan spesifisere kommentaren",
"upstream_parallel": "Bruk parallele forespørsler for å få oppfarten på behandlinger, ved å forespørre til alle oppstrømstjenerne samtidig",
"parallel_requests": "Parallelle forespørsler",
"load_balancing": "Pågangstrykk-utjevning",
@@ -114,7 +115,7 @@
"average_processing_time": "Gjennomsnittlig behandlingstid",
"average_processing_time_hint": "Gjennomsnittstid for behandling av DNS-forespørsler i millisekunder",
"block_domain_use_filters_and_hosts": "Blokker domener ved hjelp av filtre, «hosts»-filer, og rå domener",
"filters_block_toggle_hint": "Du kan sette opp blokkeringsoppføringer i <a href='#filters'>Filtre</a>-innstillingene.",
"filters_block_toggle_hint": "Du kan sette opp blokkeringsoppføringer i <a>Filtre</a>-innstillingene.",
"use_adguard_browsing_sec": "Benytt AdGuard sin nettlesersikkerhetstjeneste",
"use_adguard_browsing_sec_hint": "AdGuard Home vil sjekke om domenet har blitt svartelistet av nettlesersikkerhetstjenesten. Den vil bruke en privatlivsvennlig søke-API til å utføre sjekken: kun en kort prefiks av domenenavnet med SHA256-salting blir sendt til tjeneren.",
"use_adguard_parental": "Benytt AdGuard sin foreldrekontroll-nettjeneste",
@@ -132,6 +133,7 @@
"encryption_settings": "Krypteringsinnstillinger",
"dhcp_settings": "DHCP-innstillinger",
"upstream_dns": "Oppstrøms-DNS-tjenere",
"upstream_dns_help": "Skriv inn tjeneradresser, én per linje. <a>Lær mer</a> om å konfigurere oppstrøms-DNS-tjenere.",
"upstream_dns_configured_in_file": "Satt opp i {{path}}",
"test_upstream_btn": "Test oppstrømstilkoblinger",
"upstreams": "Oppstrømstjenere",
@@ -247,14 +249,16 @@
"blocking_ipv6": "IPv6-blokkering",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Last ned .mobileconfig for DNS-over-HTTPS",
"download_mobileconfig_dot": "Last ned .mobileconfig for DNS-over-TLS",
"plain_dns": "Ordinær DNS",
"form_enter_rate_limit": "Skriv inn forespørselsfrekvensgrense",
"rate_limit": "Forespørselsfrekvensgrense",
"edns_enable": "Aktiver EDNS-klientundernett",
"edns_cs_desc": "Hvis det er skrudd på, vil AdGuard Home sende klientenes undernett til DNS-tjenerne.",
"rate_limit_desc": "Antallet forespørsler per sekund som én enkelt klient har lov til å be om (0: ubegrenset)",
"blocking_ipv4_desc": "IP-adressen som det skal svares med for blokkerte A-forespørsler",
"blocking_ipv6_desc": "IP-adressen som det skal svares med for blokkerte AAAA-forespørsler",
"blocking_mode_default": "Standardmodus: Svar med REFUSED når det blokkeres med en adblockoppføring; svar med IP-adressen spesifisert i oppføringen når det blokkeres av en «Hosts»-oppføring",
"blocking_mode_refused": "REFUSED: Svar med REFUSED-koden",
"blocking_mode_nxdomain": "NXDOMAIN: Svar med NXDOMAIN-koden",
"blocking_mode_null_ip": "Null IP: Svar med en 0-IP-adresse (0.0.0.0 for A; :: for AAAA)",
@@ -333,6 +337,7 @@
"encryption_dot": "'DNS-over-TLS'-port",
"encryption_dot_desc": "Dersom denne porten er satt opp, vil AdGuard Home kjøre en 'DNS-over-TLS'-tjener på denne porten.",
"encryption_doq": "'DNS-over-QUIC'-port",
"encryption_doq_desc": "Dersom denne porten er satt opp, vil AdGuard Home kjøre en DNS-over-QUIC-tjener på denne porten. Den er eksperimentell og vil kanskje ikke være pålitelig. I tillegg er det ikke så altfor mange klienter som støtter det for øyeblikket.",
"encryption_certificates": "Sertifikater",
"encryption_certificates_desc": "For å bruke kryptering, må du skrive inn et gyldig SSL-sertifikatkjede for domenet ditt. Du kan få et gratis sertifikat hos <0>{{link}}</0>, eller kjøpe et fra en av de troverdige sertifikatsautoritetene.",
"encryption_certificates_input": "Kopier / lim inn dine PEM-kodede sertifikater her.",
@@ -411,7 +416,6 @@
"dns_privacy": "DNS-privatliv",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Benytt <1>{{address}}</1>-strengen.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Benytt <1>{{address}}</1>-strengen.",
"setup_dns_privacy_3": "<0>Vennligst bemerk at krypterte DNS-protokoller bare er støttet på Android 9. Så du må installere ytterligere programvare for andre operativsystemer.</0><0>Her er en liste over programvare som du kan bruke.</0>",
"setup_dns_privacy_android_1": "Android 9 har innebygd støtte for DNS-over-TLS. For å sette det opp, gå til Innstillinger → Nettverk og internett → Avansert → Privat DNS, og skriv inn domenenavnet ditt der.",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> støtter <1>DNS-over-HTTPS</1> og <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> legger til <1>DNS-over-HTTPS</1>-støtte i Android.",
@@ -524,6 +528,7 @@
"check_reason": "Årsak: {{reason}}",
"check_rule": "Oppføring: {{rule}}",
"check_service": "Tjenestenavn: {{service}}",
"service_name": "Tjenestenavn",
"check_not_found": "Ikke funnet i filterlistene dine",
"client_confirm_block": "Er du sikker på at du vil blokkere klienten «{{ip}}»?",
"client_confirm_unblock": "Er du sikker på at du vil oppheve blokkeringen av klienten «{{ip}}»?",
@@ -558,10 +563,12 @@
"cache_size_desc": "DNS-mellomlagerstørrelse (i bytes)",
"cache_ttl_min_override": "Overstyr minimumslevetiden",
"cache_ttl_max_override": "Overstyr maksimallevetiden",
"enter_cache_size": "Skriv inn mellomlagerstørrelse",
"enter_cache_ttl_min_override": "Skriv inn minimumslevetiden",
"enter_cache_ttl_max_override": "Skriv inn maksimallevetiden",
"cache_ttl_max_override_desc": "Overstyr levetidsverdien (maksimal) som mottas fra oppstrømstjeneren",
"enter_cache_size": "Skriv inn mellomlagerstørrelse (i bytes)",
"enter_cache_ttl_min_override": "Skriv inn minimumslevetiden (i sekunder)",
"enter_cache_ttl_max_override": "Skriv inn maksimallevetiden (i sekunder)",
"cache_ttl_min_override_desc": "Overstyr korte levetidsverdier (i sekunder) som mottas fra oppstrømstjeneren under mellomlagring av DNS-responser",
"cache_ttl_max_override_desc": "Velg en maks-levetidsverdi (i sekunder) for oppføringer i DNS-mellomlageret",
"ttl_cache_validation": "Minimums-mellomlagringslevetidsverdien må være mindre enn eller det samme som maksverdien",
"filter_category_general": "Generelt",
"filter_category_security": "Sikkerhet",
"filter_category_regional": "Regional",
@@ -573,5 +580,8 @@
"setup_config_to_enable_dhcp_server": "Oppsett for å skru på DHCP-tjeneren",
"original_response": "Opprinnelig svar",
"click_to_view_queries": "Klikk for å vise forespørsler",
"port_53_faq_link": "Port 53 er ofte opptatt av «DNSStubListener»- eller «systemd-resolved»-tjenestene. Vennligst les <0>denne instruksjonen</0> om hvordan man løser dette.",
"adg_will_drop_dns_queries": "AdGuard Home vil droppe alle DNS-forespørsler fra denne klienten.",
"client_not_in_allowed_clients": "Klienten er ikke tillatt, fordi den ikke er i «Tillatte klienter»-listen.",
"experimental": "Eksperimentell"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Ustawienia klienta",
"example_upstream_reserved": "możesz określić serwer DNS <0>dla konkretnych domen</0>",
"example_upstream_comment": "Możesz wpisać komentarz",
"upstream_parallel": "Używaj równoległych żądań, aby przyspieszyć rozwiązywanie adresów domen, jednocześnie wysyłając zapytania do wszystkich głównych serwerów DNS",
"parallel_requests": "Równoległe żądania",
"load_balancing": "Równoważenie obciążenia",
@@ -114,7 +115,7 @@
"average_processing_time": "Średni czas przetwarzania",
"average_processing_time_hint": "Średni czas przetwarzania żądania DNS liczony w milisekundach",
"block_domain_use_filters_and_hosts": "Zablokuj domeny za pomocą filtrów i plików host",
"filters_block_toggle_hint": "Możesz skonfigurować reguły blokowania w ustawieniach <a href='#filters'>Filtry</a> ",
"filters_block_toggle_hint": "Możesz skonfigurować reguły blokowania w ustawieniach <a>Filtry</a>.",
"use_adguard_browsing_sec": "Użyj usługi sieciowej Bezpieczne Przeglądanie AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home sprawdzi, czy domena jest na czarnej liście przez serwis internetowy Bezpieczne Przeglądanie. Będzie korzystać z interfejsu API przyjaznego dla prywatności w celu przeprowadzenia kontroli: na serwer wysyłany jest tylko krótki prefiks nazwy domeny SHA256.",
"use_adguard_parental": "Użyj usługi Kontrola Rodzicielska AdGuard",
@@ -132,6 +133,8 @@
"encryption_settings": "Ustawienia szyfrowania",
"dhcp_settings": "Ustawienia DHCP",
"upstream_dns": "Główne serwery DNS",
"upstream_dns_help": "Wpisz adresy serwerów po jednym w każdym wierszu. <a>Dowiedz się więcej </a> o konfigurowaniu głównych serwerów DNS.",
"upstream_dns_configured_in_file": "Skonfigurowano w {{path}}",
"test_upstream_btn": "Test głównych serwerów DNS",
"upstreams": "Główne serwery DNS",
"apply_btn": "Zastosuj",
@@ -185,6 +188,7 @@
"example_upstream_regular": "normalny DNS (przez UDP)",
"example_upstream_dot": "zaszyfrowany <0>DNS-over-TLS</0>",
"example_upstream_doh": "zaszyfrowany <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "zaszyfrowany <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "możesz użyć adresu <0>DNS Stamps</0> dla protokołu <1>DNSCrypt</1> lub <2>DNS-over-HTTPS</2>",
"example_upstream_tcp": "zwykły DNS (przez TCP)",
"all_lists_up_to_date_toast": "Wszystkie listy są już aktualne",
@@ -193,6 +197,8 @@
"dns_test_not_ok_toast": "Serwer \"{{key}}\": nie można go użyć, sprawdź, czy napisałeś go poprawnie",
"unblock": "Odblokuj",
"block": "Zablokuj",
"disallow_this_client": "Odrzuć tego klienta",
"allow_this_client": "Pozwól temu klientowi",
"block_for_this_client_only": "Zablokuj tylko tego klienta",
"unblock_for_this_client_only": "Odblokuj tylko tego klienta",
"time_table_header": "Czas",
@@ -243,14 +249,17 @@
"blocking_ipv6": "Blokowanie IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Pobierz plik .mobileconfig dla DNS-over-HTTPS",
"download_mobileconfig_dot": "Pobierz plik .mobileconfig dla DNS-over-TLS",
"plain_dns": "Zwykły DNS",
"form_enter_rate_limit": "Wpisz limit ilościowy",
"rate_limit": "Limit ilościowy",
"edns_enable": "Włącz podsieć klienta EDNS",
"edns_cs_desc": "Po włączeniu AdGuard Home będzie wysyłał podsieci klientów na serwery DNS.",
"rate_limit_desc": "Liczba żądań na sekundę, które może wykonać pojedynczy klient (ustawienie 0 oznacza nieograniczoną liczbę)",
"blocking_ipv4_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania A",
"blocking_ipv6_desc": "Adres IP, który ma zostać zwrócony w przypadku zablokowanego żądania AAAA",
"blocking_mode_default": "Domyślny: Odpowiedz kodem REFUSED, gdy zostanie zablokowany przez regułę w stylu Adblock; odpowiedz na adres IP określony w regule, gdy zostanie zablokowany przez regułę w stylu /etc/hosts",
"blocking_mode_default": "Domyślna: Odpowiedz z zerowym adresem IP (0.0.0.0 dla A; :: dla AAAA) po zablokowaniu przez regułę Adblock; odpowiedź adresem IP wpisanym w regule, jeśli jest blokowany przez regułę w stylu /etc/hosts",
"blocking_mode_refused": "REFUSED: Odpowiedz kodem REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Odpowiedz kodem NXDOMAIN",
"blocking_mode_null_ip": "Null IP: Odpowiedz z zerowym adresem IP (0.0.0.0 dla A; :: dla AAAA)",
@@ -328,6 +337,8 @@
"encryption_https_desc": "Jeśli port HTTPS jest skonfigurowany, interfejs administratora AdGuard Home będzie dostępny za pośrednictwem protokołu HTTPS i zapewni DNS przez HTTPS w lokalizacji zapytania '/dns-query'.",
"encryption_dot": "Port DNS-over-TLS",
"encryption_dot_desc": "Jeśli ten port jest skonfigurowany, AdGuard Home uruchomi serwer DNS-over-TLS na tym porcie.",
"encryption_doq": "Port DNS-over-QUIC",
"encryption_doq_desc": "Jeśli ten port jest skonfigurowany, AdGuard Home uruchomi serwer DNS-over-QUIC na tym porcie. Jest to funkcja eksperymentalna i może nie być stabilna. Ponadto, w tej chwili nie ma zbyt wielu klientów, którzy go obsługują.",
"encryption_certificates": "Certyfikaty",
"encryption_certificates_desc": "Aby korzystać z szyfrowania, musisz podać prawidłowy łańcuch certyfikatów SSL dla swojej domeny. Możesz uzyskać bezpłatny certyfikat na <0>{{link}}</0> lub możesz go kupić od jednego z zaufanych urzędów certyfikacji.",
"encryption_certificates_input": "Kopiuj/wklej tutaj swoje zakodowane certyfikaty PEM.",
@@ -406,7 +417,8 @@
"dns_privacy": "Prywatny DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Skorzystaj z adresu <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Skorzystaj z adresu <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Należy pamiętać, że szyfrowane protokoły DNS są obsługiwane tylko w systemie Android 9. Musisz zainstalować dodatkowe oprogramowanie dla innych systemów operacyjnych.</0><0>Oto lista oprogramowania, którego możesz użyć.</0>",
"setup_dns_privacy_3": "<0>Oto lista oprogramowania, którego możesz użyć.</0>",
"setup_dns_privacy_4": "Na urządzeniu iOS 14 lub macOS Big Sur możesz pobrać specjalny plik '.mobileconfig', który dodaje serwery <highlight>DNS-over-HTTPS</highlight> lub <highlight>DNS-over-TLS</highlight> do ustawień DNS.",
"setup_dns_privacy_android_1": "System Android 9 obsługuje natywnie DNS-over-TLS. Aby go skonfigurować, przejdź do Ustawienia → Sieć i Internet → Zaawansowane → Prywatny DNS i wpisz tam swoją nazwę domeny.",
"setup_dns_privacy_android_2": "Aplikacja <0>AdGuard dla Androida</0> obsługuje <1>DNS-over-HTTPS</1> i <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "Aplikacja <0>Intra</0> dodaje obsługę <1>DNS-over-HTTPS</1> dla Androida.",
@@ -519,6 +531,7 @@
"check_reason": "Powód: {{reason}}",
"check_rule": "Reguła: {{rule}}",
"check_service": "Nazwa usługi: {{service}}",
"service_name": "Nazwa usługi",
"check_not_found": "Nie znaleziono na Twoich listach filtrów",
"client_confirm_block": "Czy na pewno chcesz zablokować klienta \"{{ip}}\"?",
"client_confirm_unblock": "Czy na pewno chcesz odblokować klienta \"{{ip}}\"?",
@@ -553,10 +566,12 @@
"cache_size_desc": "Rozmiar pamięci podręcznej DNS (w bajtach)",
"cache_ttl_min_override": "Nadpisz minimalną wartość TTL",
"cache_ttl_max_override": "Nadpisz maksymalną wartość TTL",
"enter_cache_size": "Wpisz rozmiar pamięci podręcznej",
"enter_cache_ttl_min_override": "Wpisz minimalną wartość TTL",
"enter_cache_ttl_max_override": "Wpisz maksymalną wartość TTL",
"cache_ttl_max_override_desc": "Nadpisz wartość TTL (maksymalną) otrzymaną od serwera nadrzędnego",
"enter_cache_size": "Wpisz rozmiar pamięci podręcznej (w bajtach)",
"enter_cache_ttl_min_override": "Wpisz minimalną wartość TTL (w sekundach)",
"enter_cache_ttl_max_override": "Wpisz maksymalną wartość TTL (w sekundach)",
"cache_ttl_min_override_desc": "Zastąp wartość TTL (w sekundach) otrzymaną z serwera nadrzędnego podczas buforowania odpowiedzi DNS",
"cache_ttl_max_override_desc": "Ustaw maksymalną wartość TTL (w sekundach) dla wpisów w pamięci podręcznej DNS",
"ttl_cache_validation": "Minimalna pamięć podręczna wartości TTL musi być mniejsza lub równa maksymalnej wartości",
"filter_category_general": "Ogólne",
"filter_category_security": "Bezpieczeństwo",
"filter_category_regional": "Regionalne",
@@ -569,5 +584,7 @@
"original_response": "Oryginalna odpowiedź",
"click_to_view_queries": "Kliknij, aby wyświetlić zapytania",
"port_53_faq_link": "Port 53 jest często zajęty przez usługi \"DNSStubListener\" lub \"systemd-resolved\". Przeczytaj <0>tę instrukcję</0> jak to rozwiązać.",
"adg_will_drop_dns_queries": "AdGuard Home odrzuci zapytanie DNS od tego klienta."
"adg_will_drop_dns_queries": "AdGuard Home odrzuci zapytanie DNS od tego klienta.",
"client_not_in_allowed_clients": "Klient nie jest dozwolony, ponieważ nie ma go na liście „Dozwoleni klienci”.",
"experimental": "Funkcja eksperymentalna"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Configurações do cliente",
"example_upstream_reserved": "Você pode especificar o DNS upstream <0>para o domínio(s) especifico</0>",
"example_upstream_comment": "Você pode especificar o comentário",
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores upstream",
"parallel_requests": "Solicitações paralelas",
"load_balancing": "Balanceamento de carga",
@@ -11,6 +12,8 @@
"save_config": "Salvar configuração",
"enabled_dhcp": "Servidor DHCP ativado",
"disabled_dhcp": "Servidor DHCP desativado",
"unavailable_dhcp": "DHCP não está disponível",
"unavailable_dhcp_desc": "O AdGuard Home não pode executar um servidor DHCP em seu sistema operacional",
"dhcp_title": "Servidor DHCP (experimental)",
"dhcp_description": "Se o seu roteador não fornecer configurações de DHCP, você poderá usar o servidor DHCP integrado do AdGuard.",
"dhcp_enable": "Ativar servidor DHCP",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "Concessões de DHCP estático",
"dhcp_leases_not_found": "Nenhuma concessão DHCP encontrada",
"dhcp_config_saved": "Configurações DHCP salvas com sucesso",
"dhcp_ipv4_settings": "Configurações DHCP IPv4",
"dhcp_ipv6_settings": "Configurações DHCP IPv6",
"form_error_required": "Campo obrigatório",
"form_error_ip4_format": "Formato de endereço IPv4 inválido",
"form_error_ip6_format": "Formato de endereço IPv6 inválido",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Formato do ID de cliente inválido",
"form_error_positive": "Deve ser maior que 0",
"form_error_negative": "Deve ser igual ou superior a 0",
"range_end_error": "Deve ser maior que o início do intervalo",
"dhcp_form_gateway_input": "IP do gateway",
"dhcp_form_subnet_input": "Máscara de sub-rede",
"dhcp_form_range_title": "Faixa de endereços IP",
@@ -67,7 +73,7 @@
"filters": "Filtros",
"filter": "Filtro",
"query_log": "Registro de consultas",
"compact": "Compactar",
"compact": "Compacto",
"nothing_found": "Nada encontrado",
"faq": "FAQ",
"version": "Versão",
@@ -109,7 +115,7 @@
"average_processing_time": "Tempo médio de processamento",
"average_processing_time_hint": "Tempo médio em milissegundos no processamento de uma solicitação DNS",
"block_domain_use_filters_and_hosts": "Bloquear domínios usando arquivos de filtros e hosts",
"filters_block_toggle_hint": "Você pode configurar as regras de bloqueio nas configurações de <a href='#filters'>Filtros</a>.",
"filters_block_toggle_hint": "Você pode configurar as regras de bloqueio nas configurações de <a>Filtros</a>.",
"use_adguard_browsing_sec": "Usar o serviço de segurança da navegação do AdGuard",
"use_adguard_browsing_sec_hint": "O AdGuard Home irá verificar se o domínio está na lista negra do serviço de segurança da navegação. Ele usará a API de pesquisa de privacidade para executar a verificação: apenas um prefixo curto do hash do nome de domínio SHA256 é enviado para o servidor.",
"use_adguard_parental": "Usar o serviço de controle parental do AdGuard",
@@ -127,6 +133,8 @@
"encryption_settings": "Configurações de criptografia",
"dhcp_settings": "Configurações de DHCP",
"upstream_dns": "Servidores DNS upstream",
"upstream_dns_help": "Insira os endereços dos servidores, um por linha. <a>Saber mais</a> sobre a configuração de servidores DNS primários.",
"upstream_dns_configured_in_file": "Configurado em {{path}}",
"test_upstream_btn": "Testar upstreams",
"upstreams": "Upstreams",
"apply_btn": "Aplicar",
@@ -161,8 +169,8 @@
"new_allowlist": "Nova lista branca",
"edit_blocklist": "Editar lista negra",
"edit_allowlist": "Editar lista branca",
"choose_blocklist": "Escolha as listas negras",
"choose_allowlist": "Escolha as listas brancas",
"choose_blocklist": "Escolher as listas negras",
"choose_allowlist": "Escolher as listas brancas",
"enter_valid_blocklist": "Digite uma URL válida para a lista negra.",
"enter_valid_allowlist": "Digite uma URL válida para a lista branca.",
"form_error_url_format": "Formato da URL inválida",
@@ -180,6 +188,7 @@
"example_upstream_regular": "DNS regular (através do UDP)",
"example_upstream_dot": "<0>DNS-sobre-TLS</0> criptografado",
"example_upstream_doh": "<0>DNS-sobre-HTTPS</0> criptografado",
"example_upstream_doq": "<0>DNS-sobre-QUIC</0> criptografado",
"example_upstream_sdns": "Você pode usar <0>DNS Stamps</0>para o <1>DNSCrypt</1>ou usar os resolvedores <2>DNS-sobre-HTTPS</2>",
"example_upstream_tcp": "DNS regular (através do TCP)",
"all_lists_up_to_date_toast": "Todas as listas já estão atualizadas",
@@ -188,6 +197,10 @@
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se você escreveu corretamente",
"unblock": "Desbloquear",
"block": "Bloquear",
"disallow_this_client": "Não permitir este cliente",
"allow_this_client": "Permitir este cliente",
"block_for_this_client_only": "Bloquear apenas para este cliente",
"unblock_for_this_client_only": "Desbloquear apenas para este cliente",
"time_table_header": "Data",
"date": "Data",
"domain_name_table_header": "Nome de domínio",
@@ -236,14 +249,17 @@
"blocking_ipv6": "Bloqueando IPv6",
"dns_over_https": "DNS-sobre-HTTPS",
"dns_over_tls": "DNS-sobre-TLS",
"download_mobileconfig_doh": "BAixar .mobileconfig para DNS-sobre-HTTPS",
"download_mobileconfig_dot": "BAixar .mobileconfig para DNS-sobre-TLS",
"plain_dns": "DNS simples",
"form_enter_rate_limit": "Insira a taxa limite",
"rate_limit": "Taxa limite",
"edns_enable": "Ativar a sub-rede do cliente EDNS",
"edns_cs_desc": "Se ativado, o AdGuard Home estará enviando as sub-redes dos clientes para os servidores DNS.",
"rate_limit_desc": "O número de solicitações por segundo que um único cliente pode fazer (0: ilimitado)",
"blocking_ipv4_desc": "Endereço de IP a ser retornado para uma solicitação bloqueada",
"blocking_ipv6_desc": "Endereço de IP a ser retornado para uma solicitação AAAA bloqueada",
"blocking_mode_default": "Por padrão: Responder com REFUSED quando bloqueado pela regra estilo Adblock e responde com o endereço de IP especificado na regra quando bloqueado pela regra estilo /etc/hosts-style",
"blocking_mode_default": "Padrão: Responder com zero endereço IP (0.0.0.0 para A; :: para AAAA) quando bloqueado pela regra de estilo Adblock; responde com o endereço IP especificado na regra quando bloqueado pela regra /etc/hosts-style",
"blocking_mode_refused": "REFUSED: responder com o código REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Responder com o código NXDOMAIN",
"blocking_mode_null_ip": "IP nulo: Responder com endereço IP zero (0.0.0.0 para A; :: para AAAA)",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Se a porta HTTPS estiver configurada, a interface administrativa do AdGuard Home será acessível via HTTPS e também fornecerá o DNS-sobre-HTTPS no local '/dns-query'.",
"encryption_dot": "Porta DNS-sobre-TLS",
"encryption_dot_desc": "Se essa porta estiver configurada, o AdGuard Home irá executar o servidor DNS-sobre- TSL nesta porta.",
"encryption_doq": "Porta DNS-sobre-QUIC",
"encryption_doq_desc": "Se esta porta estiver configurada, o AdGuard Home executará um servidor DNS-sobre-QUIC nesta porta. É experimental e pode não ser confiável. Além disso, não há muitos clientes que ofereçam suporte no momento.",
"encryption_certificates": "Certificados",
"encryption_certificates_desc": "Para usar criptografia, você precisa fornecer uma cadeia de certificados SSL válida para seu domínio. Você pode obter um certificado gratuito em <0> {{link}}</0> ou pode comprá-lo de uma das autoridades de certificação confiáveis.",
"encryption_certificates_input": "Copie/cole aqui seu certificado codificado em PEM.",
@@ -399,7 +417,8 @@
"dns_privacy": "Privacidade de DNS",
"setup_dns_privacy_1": "<0>DNS-sobre-TLS:</0> Use <1>{{address}}</1> string.",
"setup_dns_privacy_2": "<0>DNS-sobre-HTTPS:</0> Use <1>{{address}}</1> string.",
"setup_dns_privacy_3": "<0>Por favor, note que os protocolos de DNS criptografados são suportados apenas no Android 9. Então, você irá precisa instalar um software adicional em outros sistemas operacionais.</0><0>Aqui está a lista de softwares que você pode usar.</0>",
"setup_dns_privacy_3": "<0>Aqui está uma lista de softwares que você pode usar.</0>",
"setup_dns_privacy_4": "Em um dispositivo iOS 14 ou macOS Big Sur, você pode baixar o arquivo especial '.mobileconfig' que adiciona os servidores <highlight>DNS-sobre-HTTPS</highlight> ou <highlight>DNS-sobre-TLS</highlight> nas configurações de DNS.",
"setup_dns_privacy_android_1": "O Android 9 suporta o DNS-sobre-TLS de forma nativa. Para configurá-lo, vá para Configurações → Rede e internet → Avançado → DNS privado e digite seu nome de domínio lá.",
"setup_dns_privacy_android_2": "O <0>AdGuard para Android</0> suporta <1>DNS-sobre-HTTPS</1> e <1>DNS-sobre-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> adiciona o suporte <1>DNS-sobre-HTTPS</1> para o Android.",
@@ -480,6 +499,7 @@
"whois": "Whois",
"filtering_rules_learn_more": "<0>Saiba mais</0> sobre como criar as suas próprias listas negras de servidores.",
"blocked_by_response": "Bloqueado por CNAME ou IP na resposta",
"blocked_by_cname_or_ip": "Bloqueado por CNAME ou IP",
"try_again": "Tente novamente",
"domain_desc": "Digite o nome do domínio ou wildcard que pretende reescrever.",
"example_rewrite_domain": "reescrever respostas apenas para este nome de domínio.",
@@ -487,14 +507,14 @@
"rewrite_ip_address": "Endereço IP: use esse IP em uma resposta A ou AAAA",
"rewrite_domain_name": "Nome de domínio: adicione um registro CNAME",
"rewrite_A": "<0>A</0>: valor especial, mantenha <0>A</0> nos registros do upstream",
"rewrite_AAAA": "<0>AAAA</0>: valor especial, mantenha <0>AAAA</0> nos registros do upstream",
"rewrite_AAAA": "<0>AAAA</0>: valor especial, mantenha <0>AAAA</0> nos registros do servidor DNS primário",
"disable_ipv6": "Desativar IPv6",
"disable_ipv6_desc": "Se este recurso estiver ativado, todas as consultas de DNS para endereços IPv6 (tipo AAAA) serão ignoradas.",
"fastest_addr": "Endereço de IP mais rápido",
"fastest_addr_desc": "Consulta todos os servidores DNS e retorna o endereço IP mais rápido entre todas as respostas. Isso irá retardar as consultas ao DNS, pois temos que esperar por respostas de todos os servidores DNS, porém melhorando a conectividade em geral.",
"autofix_warning_text": "Se clicar em \"Corrigir\", o AdGuardHome irá configurar o seu sistema para utilizar o servidor DNS do AdGuardHome.",
"autofix_warning_list": "Ele irá realizar estas tarefas: <0>Desativar sistema DNSStubListener</0> <0>Definir endereço do servidor DNS para 127.0.0.1</0> <0>Substituir o alvo simbólico do link /etc/resolv.conf para /run/systemd/resolv.conf</0> <0>Parar DNSStubListener (recarregar serviço resolvido pelo sistema)</0>",
"autofix_warning_result": "Como resultado, todos as solicitações DNS do seu sistema serão processadas pelo AdGuardHome por padrão.",
"autofix_warning_result": "Como resultado, todos as solicitações DNS do seu sistema serão processadas pelo AdGuard Home por padrão.",
"tags_title": "Marcadores",
"tags_desc": "Você pode selecionar as tags que correspondem ao cliente. As tags podem ser incluídas nas regras de filtragem e permitir que você as aplique com mais precisão. <0>Saiba mais</0>",
"form_select_tags": "Selecione as tags do cliente",
@@ -511,6 +531,7 @@
"check_reason": "Motivo: {{reason}}",
"check_rule": "Regra: {{rule}}",
"check_service": "Nome do serviço: {{service}}",
"service_name": "Nome do serviço",
"check_not_found": "Não encontrado em suas listas de filtros",
"client_confirm_block": "Você tem certeza de que deseja bloquear o cliente \"{{ip}}\"?",
"client_confirm_unblock": "Você tem certeza de que deseja desbloquear o cliente \"{{ip}}\"?",
@@ -528,6 +549,7 @@
"dnssec_enable": "Ativar DNSSEC",
"dnssec_enable_desc": "Definir a flag DNSSEC nas consultas de DNS em andamento e verificar o resultado (é necessário um resolvedor DNSSEC ativado)",
"validated_with_dnssec": "Validado com DNSSEC",
"all_queries": "Todas as consultas",
"show_blocked_responses": "Bloqueado",
"show_whitelisted_responses": "Na lista branca",
"show_processed_responses": "Processado",
@@ -544,10 +566,12 @@
"cache_size_desc": "Tamanho do cache do DNS (em bytes)",
"cache_ttl_min_override": "Sobrepor o TTL mínimo",
"cache_ttl_max_override": "Sobrepor o TTL máximo",
"enter_cache_size": "Digite o tamanho do cache",
"enter_cache_ttl_min_override": "Digite o TTL mínimo",
"enter_cache_ttl_max_override": "Digite o TTL máximo",
"cache_ttl_max_override_desc": "Substituição do valor TTL (máximo) recebido do servidor de DNS primário",
"enter_cache_size": "Digite o tamanho do cache (bytes)",
"enter_cache_ttl_min_override": "Digite o TTL máximo (segundos)",
"enter_cache_ttl_max_override": "Digite o TTL máximo (segundos)",
"cache_ttl_min_override_desc": "Prolongue os valores de curta duração (segundos) recebidos do servidor primário ao armazenar em cache as respostas DNS",
"cache_ttl_max_override_desc": "Defina um valor máximo de tempo de vida (segundos) para entradas no cache DNS",
"ttl_cache_validation": "O valor TTL mínimo do cache deve ser menor ou igual ao valor máximo",
"filter_category_general": "Geral",
"filter_category_security": "Segurança",
"filter_category_regional": "Regional",
@@ -556,5 +580,11 @@
"filter_category_security_desc": "Listas especializadas em bloquear domínios de malware, phishing ou fraude",
"filter_category_regional_desc": "Listas focadas em anúncios regionais e servidores de rastreamento",
"filter_category_other_desc": "Outras listas negras",
"click_to_view_queries": "Clique para ver as consultas"
"setup_config_to_enable_dhcp_server": "Configure a configuração para habilitar o servidor DHCP",
"original_response": "Resposta original",
"click_to_view_queries": "Clique para ver as consultas",
"port_53_faq_link": "A porta 53 é frequentemente ocupada por serviços \"DNSStubListener\" ou \"systemd-resolved\". Por favor leia <0>essa instrução</0> para resolver isso.",
"adg_will_drop_dns_queries": "O AdGuard Home descartará todas as consultas DNS deste cliente.",
"client_not_in_allowed_clients": "O cliente não é permitido porque não está na lista \"Clientes permitidos\".",
"experimental": "Experimental"
}

View File

@@ -1,13 +1,19 @@
{
"client_settings": "Definições do cliente",
"example_upstream_reserved": "pode especificar um DNS upstream <0>para domínio(s) especifico(s)</0>",
"example_upstream_comment": "Tu podes especificar o comentário",
"upstream_parallel": "Usar consultas paralelas para acelerar a resolução consultando simultaneamente todos os servidores upstream",
"parallel_requests": "Solicitações paralelas",
"load_balancing": "Balanceamento de carga",
"load_balancing_desc": "Consulta um servidor de cada vez. O AdGuard Home usará o algoritmo aleatório ponderado para escolher o servidor, para que o servidor mais rápido seja usado com mais frequência.",
"bootstrap_dns": "Servidores DNS de inicialização",
"bootstrap_dns_desc": "Servidores DNS de inicialização são usados para resolver endereços IP dos resolvedores DoH/DoT que especifica como upstreams.",
"check_dhcp_servers": "Verificar por servidores DHCP",
"save_config": "Guardar configuração",
"save_config": "Guardar definição",
"enabled_dhcp": "Servidor DHCP activado",
"disabled_dhcp": "Servidor DHCP desactivado",
"unavailable_dhcp": "DHCP não está disponível",
"unavailable_dhcp_desc": "O AdGuard Home não pode executar um servidor DHCP em seu sistema operacional",
"dhcp_title": "Servidor DHCP (experimental)",
"dhcp_description": "Se o seu router não fornecer configurações de DHCP, poderá usar o servidor DHCP integrado do AdGuard.",
"dhcp_enable": "Activar servidor DHCP",
@@ -18,6 +24,8 @@
"dhcp_static_leases": "Concessões de DHCP estático",
"dhcp_leases_not_found": "Nenhuma concessão DHCP encontrada",
"dhcp_config_saved": "Configurações DHCP guardadas com sucesso",
"dhcp_ipv4_settings": "Definições DHCP IPv4",
"dhcp_ipv6_settings": "Definições DHCP IPv6",
"form_error_required": "Campo obrigatório",
"form_error_ip4_format": "Formato de endereço IPv4 inválido",
"form_error_ip6_format": "Formato de endereço IPv6 inválido",
@@ -26,6 +34,7 @@
"form_error_client_id_format": "Formato inválido",
"form_error_positive": "Deve ser maior que 0",
"form_error_negative": "Deve ser igual ou superior a 0",
"range_end_error": "Deve ser maior que o início do intervalo",
"dhcp_form_gateway_input": "IP do gateway",
"dhcp_form_subnet_input": "Máscara de sub-rede",
"dhcp_form_range_title": "Faixa de endereços IP",
@@ -36,6 +45,7 @@
"dhcp_interface_select": "Seleccione a interface DHCP",
"dhcp_hardware_address": "Endereço de hardware",
"dhcp_ip_addresses": "Endereços de IP",
"ip": "IP",
"dhcp_table_hostname": "Nome do servidor",
"dhcp_table_expires": "Expira",
"dhcp_warning": "Se quiser activar o servidor DHCP, verifique se não há outro servidor DHCP activo na sua rede. Caso contrário, a internet pode parar de funcionar noutros dispositivos ligados!",
@@ -47,18 +57,28 @@
"dhcp_new_static_lease": "Nova concessão estática",
"dhcp_static_leases_not_found": "Nenhuma concessão DHCP estática foi encontrada",
"dhcp_add_static_lease": "Adicionar nova concessão estática",
"dhcp_reset": "Tem a certeza de que deseja redefinir a configuração DHCP?",
"dhcp_reset": "Tem a certeza de que deseja repor a definição de DHCP?",
"country": "País",
"city": "Cidade",
"delete_confirm": "Tem a certeza de que deseja excluir \"{{key}}\"?",
"form_enter_hostname": "Insira o hostname",
"error_details": "Detalhes do erro",
"response_details": "Detalhes da resposta",
"request_details": "Detalhes da solicitação",
"client_details": "Detalhes do cliente",
"details": "Detalhes",
"back": "Retroceder",
"dashboard": "Painel",
"settings": "Definições",
"filters": "Filtros",
"filter": "Filtro",
"query_log": "Registo de consultas",
"compact": "Compacto",
"nothing_found": "Nada encontrado",
"faq": "Perguntas frequentes",
"version": "Versão",
"address": "Endereço",
"protocol": "Protocolo",
"on": "LIGADO",
"off": "DESLIGADO",
"copyright": "Copyright",
@@ -95,7 +115,7 @@
"average_processing_time": "Tempo médio de processamento",
"average_processing_time_hint": "Tempo médio em milissegundos no processamento de uma solicitação DNS",
"block_domain_use_filters_and_hosts": "Bloquear domínios usando arquivos de filtros e hosts",
"filters_block_toggle_hint": "Pode configurar as regras de bloqueio nas configurações de <a href='#filters'>Filtros</a>.",
"filters_block_toggle_hint": "Pode configurar as regras de bloqueio nas configurações de <a>Filtros</a>.",
"use_adguard_browsing_sec": "Usar o serviço de segurança da navegação do AdGuard",
"use_adguard_browsing_sec_hint": "O AdGuard Home irá verificar se o domínio está na lista negra do serviço de segurança da navegação. Usará a API de pesquisa de privacidade para executar a verificação: apenas um prefixo curto do hash do nome de domínio SHA256 é enviado para o servidor.",
"use_adguard_parental": "Usar o serviço de controlo parental do AdGuard",
@@ -105,9 +125,16 @@
"no_servers_specified": "Nenhum servidor especificado",
"general_settings": "Definições gerais",
"dns_settings": "Definições de DNS",
"dns_blocklists": "Listas negra de DNS",
"dns_allowlists": "Listas branca de DNS",
"dns_blocklists_desc": "O AdGuard Home bloqueará domínios que correspondam às listas negras.",
"dns_allowlists_desc": "Os domínios das listas branca de DNS serão permitidos mesmo que estejam em qualquer uma das listas negra.",
"custom_filtering_rules": "Regras de filtragem personalizadas",
"encryption_settings": "Configurações de criptografia",
"dhcp_settings": "Configurações de DHCP",
"upstream_dns": "Servidores DNS upstream",
"upstream_dns_help": "Insira os endereços dos servidores, um por linha. <a>Saber mais</a> sobre a definição de servidores DNS primários.",
"upstream_dns_configured_in_file": "Configurado em {{path}}",
"test_upstream_btn": "Testar upstreams",
"upstreams": "Upstreams",
"apply_btn": "Aplicar",
@@ -121,15 +148,33 @@
"enabled_save_search_toast": "Pesquisa segura activada",
"enabled_table_header": "Activados",
"name_table_header": "Nome",
"list_url_table_header": "URL da lista",
"rules_count_table_header": "Total de Regras",
"last_time_updated_table_header": "Última actualização",
"actions_table_header": "Acções",
"request_table_header": "Solicitação",
"edit_table_action": "Editar",
"delete_table_action": "Apagar",
"elapsed": "Tempo decorrido",
"filters_and_hosts_hint": "O AdGuard Home entende regras básicas de bloqueio de anúncios e a sintaxe de arquivos de hosts.",
"no_blocklist_added": "Nenhuma lista negra foi adicionada",
"no_whitelist_added": "Nenhuma lista branca foi adicionada",
"add_blocklist": "Adicionar lista negra",
"add_allowlist": "Adicionar lista branca",
"cancel_btn": "Cancelar",
"enter_name_hint": "Insira o nome",
"enter_url_or_path_hint": "Digite a URL ou o local da lista",
"check_updates_btn": "Verificar actualizações",
"new_blocklist": "Nova lista negra",
"new_allowlist": "Nova lista branca",
"edit_blocklist": "Editar lista negra",
"edit_allowlist": "Editar lista branca",
"choose_blocklist": "Escolher as listas negras",
"choose_allowlist": "Escolher as listas brancas",
"enter_valid_blocklist": "Digite uma URL válida para a lista negra.",
"enter_valid_allowlist": "Digite uma URL válida para a lista branca.",
"form_error_url_format": "Formato da URL inválida",
"form_error_url_or_path_format": "URL ou local da lista inválida",
"custom_filter_rules": "Regras de filtragem personalizadas",
"custom_filter_rules_hint": "Insira uma regra por linha. Pode usar regras de bloqueio de anúncios ou a sintaxe de arquivos de hosts.",
"examples_title": "Exemplos",
@@ -143,18 +188,26 @@
"example_upstream_regular": "dNS regular (através do UDP)",
"example_upstream_dot": "<0>DNS-sobre-TLS</0> criptografado",
"example_upstream_doh": "<0>DNS-sobre-HTTPS</0> criptografado",
"example_upstream_doq": "<0>DNS-sobre-QUIC</0> criptografado",
"example_upstream_sdns": "pode usar <0>DNS Stamps</0>para o <1>DNSCrypt</1>ou usar os resolvedores <2>DNS-sobre-HTTPS</2>",
"example_upstream_tcp": "dNS regular (através do TCP)",
"all_lists_up_to_date_toast": "Todas as listas já estão atualizadas",
"updated_upstream_dns_toast": "A actualizar os servidores DNS upstream",
"dns_test_ok_toast": "Os servidores DNS especificados estão a funcionar correctamente",
"dns_test_not_ok_toast": "O servidor \"{{key}}\": não pôde ser utilizado. Por favor, verifique se o escreveu correctamente",
"unblock": "Desbloquear",
"block": "Bloquear",
"disallow_this_client": "Não permitir este cliente",
"allow_this_client": "Permitir este cliente",
"block_for_this_client_only": "Bloquear apenas para este cliente",
"unblock_for_this_client_only": "Desbloquear apenas para este cliente",
"time_table_header": "Data",
"date": "Data",
"domain_name_table_header": "Nome do domínio",
"domain_or_client": "Domínio ou cliente",
"type_table_header": "Tipo",
"response_table_header": "Resposta",
"response_code": "Código de resposta",
"client_table_header": "Cliente",
"empty_response_status": "Vazio",
"show_all_filter_type": "Mostrar todos",
@@ -173,6 +226,7 @@
"query_log_filtered": "Filtrado por {{filter}}",
"query_log_confirm_clear": "Tem a certeza de que deseja limpar todo o registo de consulta?",
"query_log_cleared": "O registo de consulta foi limpo com sucesso",
"query_log_updated": "O registro da consulta foi actualizado com sucesso",
"query_log_clear": "Limpar registos de consulta",
"query_log_retention": "Retenção de registos de consulta",
"query_log_enable": "Activar registo",
@@ -180,25 +234,45 @@
"query_log_disabled": "O registo de consulta está desactivado e pode ser configurado em <0>definições</0>",
"query_log_strict_search": "Usar aspas duplas para uma pesquisa rigorosa",
"query_log_retention_confirm": "Tem a certeza de que deseja alterar a retenção do registo de consulta? Se diminuir o valor do intervalo, alguns dados serão perdidos",
"dns_config": "Configuração do servidor DNS",
"anonymize_client_ip": "Tornar anônimo o IP do cliente",
"anonymize_client_ip_desc": "Não salva o endereço de IP completo do cliente em registros e estatísticas",
"dns_config": "Definição do servidor DNS",
"dns_cache_config": "Definição de cache DNS",
"dns_cache_config_desc": "Aqui você pode configurar o cache do DNS",
"blocking_mode": "Modo de bloqueio",
"default": "Padrão",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "IP nulo",
"custom_ip": "IP Personalizado",
"blocking_ipv4": "A bloquear IPv4",
"blocking_ipv6": "A bloquear IPv6",
"dns_over_https": "DNS-sobre-HTTPS",
"dns_over_tls": "DNS-sobre-TLS",
"download_mobileconfig_doh": "Transferir .mobileconfig para DNS-sobre-HTTPS",
"download_mobileconfig_dot": "Transferir .mobileconfig para DNS-sobre-TLS",
"plain_dns": "DNS simples",
"form_enter_rate_limit": "Insira o limite de taxa",
"rate_limit": "Limite de taxa",
"edns_enable": "Activar sub-rede do cliente EDNS",
"edns_cs_desc": "Se activado, o AdGuard Home enviará sub-redes dos clientes para os servidores DNS.",
"rate_limit_desc": "O número de solicitações por segundo que um único cliente pode fazer (0: ilimitado)",
"blocking_ipv4_desc": "Endereço IP a ser devolvido para uma solicitação A bloqueada",
"blocking_ipv6_desc": "Endereço IP a ser devolvido para uma solicitação AAAA bloqueada",
"blocking_mode_default": "Padrão: Responder com zero endereço IP (0.0.0.0 para A; :: para AAAA) quando bloqueado pela regra de estilo Adblock; responde com o endereço IP especificado na regra quando bloqueado pela regra /etc/hosts-style",
"blocking_mode_refused": "REFUSED: responder com o código REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Responder com o código NXDOMAIN",
"blocking_mode_null_ip": "IP nulo: Responder com endereço IP zero (0.0.0.0 para A; :: para AAAA)",
"blocking_mode_custom_ip": "IP personalizado: Responder com um endereço IP definido manualmente",
"upstream_dns_client_desc": "Se mantiver esse campo vazio, o AdGuard Home usará os servidores configurados nas <0>Definições de DNS</0>.",
"tracker_source": "Fonte do rastreador",
"source_label": "Fonte",
"found_in_known_domain_db": "Encontrado no banco de dados de domínios conhecido.",
"category_label": "Categoria",
"rule_label": "Regra",
"list_label": "Lista",
"unknown_filter": "Filtro desconhecido {{filterId}}",
"known_tracker": "Rastreador conhecido",
"install_welcome_title": "Bem-vindo ao AdGuard Home!",
"install_welcome_desc": "O AdGuard Home é um servidor de DNS para bloqueio de anúncios e monitorização em toda a rede. A sua finalidade é permitir que controle toda a sua rede e os seus dispositivos sem precisar de ter um programa instalado.",
"install_settings_title": "Interface web de administrador",
@@ -220,13 +294,14 @@
"install_devices_title": "Configure os seus dispositivos",
"install_devices_desc": "Para que o AdGuard Home comece a funcionar, precisa de configurar os seus dispositivos para o poder usar.",
"install_submit_title": "Parabéns!",
"install_submit_desc": "O procedimento de configuração está concluído e está pronto para começar a usar o AdGuard Home.",
"install_submit_desc": "O procedimento de definição está concluído e está pronto para começar a usar o AdGuard Home.",
"install_devices_router": "Router",
"install_devices_router_desc": "Esta configuração cobrirá automaticamente todos os dispositivos ligados ao seu router doméstico e não irá precisar de configurar cada um deles manualmente.",
"install_devices_router_desc": "Esta definição cobrirá automaticamente todos os dispositivos ligados ao seu router doméstico e não irá precisar de configurar cada um deles manualmente.",
"install_devices_address": "O servidor de DNS do AdGuard Home está a capturar os seguintes endereços",
"install_devices_router_list_1": "Abra as configurações do seu router. No navegador insira o IP do router, o padrão é (http://192.168.0.1/ ou http://192.168.1.1/), e o login e a palavra-passe é admin/admin; Se não se lembra da palavra-passe, pode redefinir a palavra-passe rapidamente pressionando um botão no próprio router. Alguns routers têm um aplicação específica que já deve estar instalada no seu computador/telefone.",
"install_devices_router_list_1": "Abra as configurações do seu router. No navegador insira o IP do router, o padrão é (http://192.168.0.1/ ou http://192.168.1.1/), e o login e a palavra-passe é admin/admin; Se não se lembra da palavra-passe, pode repor a palavra-passe rapidamente pressionando um botão no próprio router. Alguns routers têm um aplicação específica que já deve estar instalada no seu computador/telefone.",
"install_devices_router_list_2": "Encontre as configurações de DNS. Procure as letras DNS ao lado de um campo que permite dois ou três conjuntos de números, cada um dividido em quatro grupos de um a três números.",
"install_devices_router_list_3": "Insira aqui seu servidor do AdGuard Home.",
"install_devices_router_list_4": "Você não pode definir um servidor DNS personalizado em alguns tipos de roteadores. Nesse caso, pode ajudar se você configurar o AdGuard Home como um <0>servidor DHCP</0>. Caso contrário, você deve procurar o manual sobre como personalizar os servidores DNS para o seu modelo de roteador específico.",
"install_devices_windows_list_1": "Abra o Painel de Controlo através do Menu Iniciar ou pela Pesquisa do Windows.",
"install_devices_windows_list_2": "Entre na categoria Rede e Internet e depois clique em Central de Rede e Partilha.",
"install_devices_windows_list_3": "No lado esquerdo da janela clique em Alterar as definições do adaptador.",
@@ -252,7 +327,7 @@
"install_saved": "Guardado com sucesso",
"encryption_title": "Encriptação",
"encryption_desc": "Suporta a criptografia (HTTPS/TLS) para DNS e interface de administração web",
"encryption_config_saved": "Configuração de criptografia guardada",
"encryption_config_saved": "Definição de criptografia guardada",
"encryption_server": "Nome do servidor",
"encryption_server_enter": "Insira o seu nome de domínio",
"encryption_server_desc": "Para usar o protocolo HTTPS, precisa de inserir o nome do servidor que corresponde ao seu certificado SSL.",
@@ -262,6 +337,8 @@
"encryption_https_desc": "Se a porta HTTPS estiver configurada, a interface administrativa do AdGuard Home será acessível via HTTPS e também fornecerá o DNS-sobre-HTTPS no local '/dns-query'.",
"encryption_dot": "Porta DNS-sobre-TLS",
"encryption_dot_desc": "Se essa porta estiver configurada, o AdGuard Home irá executar o servidor DNS-sobre- TSL nesta porta.",
"encryption_doq": "Porta DNS-sobre-QUIC",
"encryption_doq_desc": "Se esta porta estiver configurada, o AdGuard Home executará um servidor DNS-sobre-QUIC nesta porta. É experimental e pode não ser confiável. Além disso, não há muitos clientes que ofereçam suporte no momento.",
"encryption_certificates": "Certificados",
"encryption_certificates_desc": "Para usar criptografia, precisa de fornecer uma cadeia de certificados SSL válida para o seu domínio. Pode obter um certificado gratuito em <0> {{link}}</0> ou pode comprá-lo numa das autoridades de certificação confiáveis.",
"encryption_certificates_input": "Copie/cole aqui o seu certificado codificado em PEM.",
@@ -278,14 +355,14 @@
"encryption_subject": "Assunto",
"encryption_issuer": "Emissor",
"encryption_hostnames": "Nomes dos servidores",
"encryption_reset": "Tem a certeza de que deseja redefinir a configuração de criptografia?",
"encryption_reset": "Tem a certeza de que deseja repor a definição de criptografia?",
"topline_expiring_certificate": "O seu certificado SSL está prestes a expirar. Actualize as suas <0>definições de criptografia</0>.",
"topline_expired_certificate": "O seu certificado SSL está expirado. Actualize as suas <0>definições de criptografia</0>.",
"form_error_port_range": "Digite um porta entre 80 e 65535",
"form_error_port_unsafe": "Esta porta não é segura",
"form_error_equal": "Não deve ser igual",
"form_error_password": "As palavras-passe não coincidem",
"reset_settings": "Redefinir configurações",
"reset_settings": "Repor configurações",
"update_announcement": "AdGuard Home {{version}} está disponível!<0>Clique aqui</0> para mais informações.",
"setup_guide": "Guia de instalação",
"dns_addresses": "Endereços DNS",
@@ -295,7 +372,7 @@
"fix": "Corrigido",
"dns_providers": "Aqui está uma <0>lista de provedores de DNS conhecidos</0> para escolher.",
"update_now": "Actualizar agora",
"update_failed": "A atualização automática falhou. Por favor, <a>siga estes passos</a> para actualizar manualmente.",
"update_failed": "A actualização automática falhou. Por favor, <a>siga estes passos</a> para actualizar manualmente.",
"processing_update": "Por favor espere, o AdGuard Home está a actualizar-se",
"clients_title": "Clientes",
"clients_desc": "Configure os dispositivos ligados ao AdGuard",
@@ -322,8 +399,9 @@
"client_updated": "Cliente \"{{key}}\" actualizado com sucesso",
"clients_not_found": "Nenhum cliente foi encontrado",
"client_confirm_delete": "Tem a certeza de que deseja excluir o cliente \"{{key}}\"?",
"list_confirm_delete": "Você tem certeza de que deseja excluir essa lista?",
"auto_clients_title": "Clientes (tempo de execução)",
"auto_clients_desc": "Dados dos clientes que usam o AdGuard Home, que não são armazenados na configuração",
"auto_clients_desc": "Dados dos clientes que usam o AdGuard Home, que não são armazenados na definição",
"access_title": "Configurações de acesso",
"access_desc": "Aqui pode configurar as regras de acesso para o servidores de DNS do AdGuard Home.",
"access_allowed_title": "Clientes permitidos",
@@ -339,12 +417,13 @@
"dns_privacy": "Privacidade de DNS",
"setup_dns_privacy_1": "<0>DNS-sobre-TLS:</0> Use <1>{{address}}</1> string.",
"setup_dns_privacy_2": "<0>DNS-sobre-HTTPS:</0> Use <1>{{address}}</1> string.",
"setup_dns_privacy_3": "<0>Por favor, note que os protocolos de DNS criptografados são suportados apenas no Android 9. Então, irá precisar de instalar um software adicional noutros sistemas operacionais.</0><0>Aqui está a lista de software que pode usar.</0>",
"setup_dns_privacy_3": "<0>Aqui está uma lista de softwares que você pode usar.</0>",
"setup_dns_privacy_4": "Em um dispositivo iOS 14 ou macOS Big Sur, você pode transferir o ficheiro especial '.mobileconfig' que adiciona os servidores <highlight>DNS-sobre-HTTPS</highlight> ou <highlight>DNS-sobre-TLS</highlight> nas definições de DNS.",
"setup_dns_privacy_android_1": "O Android 9 suporta o DNS-sobre-TLS de forma nativa. Para o configurar, vá a Definições → Rede e internet → Avançado → DNS privado e digite o seu nome de domínio.",
"setup_dns_privacy_android_2": "O <0>AdGuard para Android</0> suporta <1>DNS-sobre-HTTPS</1> e <1>DNS-sobre-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> adiciona o suporte <1>DNS-sobre-HTTPS</1> para o Android.",
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> suporta <1>DNS-sobre-HTTPS</1>, mas para o configurar para usar o seu próprio servidor, precisará de gerar um <2>DNS Stamp</2>.",
"setup_dns_privacy_ios_2": "O <0>AdGuard para iOS</0> suporta a configuração do <1>DNS-sobre-HTTPS</1> e <1>DNS-sobre-TLS</1>.",
"setup_dns_privacy_ios_2": "O <0>AdGuard para iOS</0> suporta a definição do <1>DNS-sobre-HTTPS</1> e <1>DNS-sobre-TLS</1>.",
"setup_dns_privacy_other_title": "Outras implementações",
"setup_dns_privacy_other_1": "O próprio AdGuard Home pode ser usado como um cliente DNS seguro em qualquer plataforma.",
"setup_dns_privacy_other_2": "<0>dnsproxy</0> suporta todos os protocolos de DNS seguros conhecidos.",
@@ -359,6 +438,7 @@
"rewrite_confirm_delete": "Tem a certeza de que deseja excluir a reescrita de DNS para \"{{key}}\"?",
"rewrite_desc": "Permite configurar uma resposta personalizada do DNS para um nome de domínio específico.",
"rewrite_applied": "Regra de reescrita aplicada",
"rewrite_hosts_applied": "Reescrito pela regra do arquivo de hosts",
"dns_rewrites": "Reescritas de DNS",
"form_domain": "Inserir domínio",
"form_answer": "Insira o endereço de IP ou nome de domínio",
@@ -380,15 +460,17 @@
"encryption_certificates_source_content": "Colar o conteúdo dos certificados",
"encryption_key_source_path": "Definir um arquivo de chave privada",
"encryption_key_source_content": "Colar o conteúdo da chave privada",
"stats_params": "Configuração de estatísticas",
"config_successfully_saved": "Configuração guardada com sucesso",
"stats_params": "Definição de estatísticas",
"config_successfully_saved": "Definição guardada com sucesso",
"interval_24_hour": "24 horas",
"interval_days": "{{count}} dias",
"interval_days_plural": "{{count}} dias",
"domain": "Domínio",
"answer": "Resposta",
"filter_added_successfully": "O filtro foi adicionado com sucesso",
"statistics_configuration": "Configuração das estatísticas",
"filter_removed_successfully": "A lista foi removida com sucesso",
"filter_updated": "O filtro atualizado com sucesso",
"statistics_configuration": "Definição das estatísticas",
"statistics_retention": "Retenção de estatísticas",
"statistics_retention_desc": "Se diminuir o valor do intervalo, alguns dados serão perdidos",
"statistics_clear": " Limpar estatísticas",
@@ -397,7 +479,7 @@
"statistics_cleared": "As estatísticas foram apagadas com sucesso",
"interval_hours": "{{count}} hora",
"interval_hours_plural": "{{count}} horas",
"filters_configuration": "Configuração dos filtros",
"filters_configuration": "Definição dos filtros",
"filters_enable": "Activar filtros",
"filters_interval": "Intervalo de actualização de filtros",
"disabled": "Desactivado",
@@ -417,12 +499,92 @@
"whois": "Whois",
"filtering_rules_learn_more": "<0>Saiba mais</0>sobre como criar as suas próprias listas negras de servidores.",
"blocked_by_response": "Bloqueado por CNAME ou IP em resposta",
"blocked_by_cname_or_ip": "Bloqueado por CNAME ou IP",
"try_again": "Tente novamente",
"domain_desc": "Insere o nome do domínio para ser reescrito.",
"example_rewrite_domain": "reescrever resposta apenas para este domínio.",
"example_rewrite_wildcard": "reescrever resposta para todos <0>example.org</0> sub-domínios.",
"rewrite_ip_address": "Endereço IP: use esse IP em uma resposta A ou AAAA",
"rewrite_domain_name": "Nome de domínio: adicione um registro CNAME",
"rewrite_A": "<0>A</0>: valor especial, mantenha <0>A</0> nos registros do upstream",
"rewrite_AAAA": "<0>AAAA</0>: valor especial, mantenha <0>AAAA</0> nos registros do servidor DNS primário",
"disable_ipv6": "Desactivar IPv6",
"disable_ipv6_desc": "Se este recurso estiver ativado, todas as consultas de DNS para endereços IPv6 (tipo AAAA) serão ignoradas.",
"fastest_addr": "Endereço de IP mais rápido",
"fastest_addr_desc": "Consulta todos os servidores DNS e retorna o endereço IP mais rápido entre todas as respostas. Isso irá retardar as consultas ao DNS, pois temos que esperar por respostas de todos os servidores DNS, porém melhorando a conectividade em geral.",
"autofix_warning_text": "Se clicar em \"Corrigir\", o AdGuardHome irá configurar o seu sistema para utilizar o servidor DNS do AdGuardHome.",
"autofix_warning_list": "Ele irá realizar estas tarefas: <0>Desactivar sistema DNSStubListener</0> <0>Definir endereço do servidor DNS para 127.0.0.1</0> <0>Substituir o alvo simbólico do link /etc/resolv.conf para /run/systemd/resolv.conf</0> <0>Parar DNSStubListener (recarregar serviço resolvido pelo sistema)</0>",
"autofix_warning_result": "Como resultado, todos as solicitações DNS do seu sistema serão processadas pelo AdGuard Home por padrão.",
"tags_title": "Etiquetas",
"tags_desc": "Você pode selecionar as etiquetas que correspondem ao cliente. As tags podem ser incluídas nas regras de filtragem e permitir que você as aplique com mais precisão. <0>Saiba mais</0>",
"form_select_tags": "Seleccione as tags do cliente",
"check_title": "Verifique a filtragem",
"check_desc": "Verificar se o nome do host está sendo filtrado",
"check": "Verificar",
"form_enter_host": "Insira o hostname",
"filtered_custom_rules": "Filtrado pelas regras de filtragem personalizadas",
"choose_from_list": "Escolher na lista",
"add_custom_list": "Adicionar uma lista personalizada",
"host_whitelisted": "O host está na lista branca",
"check_ip": "Endereços de IP: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"check_reason": "Motivo: {{reason}}",
"check_rule": "Regra: {{rule}}",
"check_service": "Nome do serviço: {{service}}",
"service_name": "Nome do serviço",
"check_not_found": "Não encontrado nas tuas listas de filtros",
"client_confirm_block": "Você tem certeza de que deseja bloquear o cliente \"{{ip}}\"?",
"client_confirm_unblock": "Você tem certeza de que deseja desbloquear o cliente \"{{ip}}\"?",
"client_blocked": "Cliente \"{{ip}}\" foi bloqueado com sucesso",
"client_unblocked": "Cliente \"{{ip}}\" foi desbloqueado com sucesso",
"static_ip": "Endereço de IP estático",
"static_ip_desc": "O AdGuard Home é um servidor, portanto, ele precisa de um endereço de IP estático para funcionar corretamente. Caso contrário, em algum momento, seu roteador poderá atribuir um novo endereço de IP neste dispositivo.",
"set_static_ip": "Definir um endereço de IP estático",
"install_static_ok": "Boas notícias! O endereço de IP estático já está configurado",
"install_static_error": "O AdGuard Home não pode configurar automaticamente para esta interface de rede. Por favor, procure uma instrução sobre como fazer isso manualmente.",
"install_static_configure": "Detectamos que um endereço de IP dinâmico é sendo usado — <0>{{ip}}</0>. Deseja utilizar como seu endereço estático?",
"confirm_static_ip": "O AdGuard Home irá configurar {{ip}} para ser seu endereço IP estático. Deseja continuar?",
"list_updated": "{{count}} lista actualizada",
"list_updated_plural": "{{count}} listas actualizadas",
"dnssec_enable": "Activar DNSSEC",
"dnssec_enable_desc": "Definir a flag DNSSEC nas consultas de DNS em andamento e verificar o resultado (é necessário um resolvedor DNSSEC ativado)",
"validated_with_dnssec": "Validado com DNSSEC",
"all_queries": "Todas as consultas",
"show_blocked_responses": "Bloqueado",
"show_whitelisted_responses": "Lista Branca",
"show_processed_responses": "Processado"
"show_processed_responses": "Processado",
"blocked_safebrowsing": "Bloqueado pela navegação segura",
"blocked_adult_websites": "Sítios adultos bloqueados",
"blocked_threats": "Ameaças bloqueadas",
"allowed": "Permitido",
"filtered": "Filtrado",
"rewritten": "Reescrito",
"safe_search": "Pesquisa segura",
"blocklist": "Lista negra",
"milliseconds_abbreviation": "ms",
"cache_size": "Tamanho do cache",
"cache_size_desc": "Tamanho do cache do DNS (em bytes)",
"cache_ttl_min_override": "Sobrepor o TTL mínimo",
"cache_ttl_max_override": "Sobrepor o TTL máximo",
"enter_cache_size": "Digite o tamanho do cache (bytes)",
"enter_cache_ttl_min_override": "Digite o TTL máximo (segundos)",
"enter_cache_ttl_max_override": "Digite o TTL máximo (segundos)",
"cache_ttl_min_override_desc": "Prolongue os valores de curta duração (segundos) recebidos do servidor primário ao armazenar em cache as respostas DNS",
"cache_ttl_max_override_desc": "Defina um valor máximo de tempo de vida (segundos) para entradas no cache DNS",
"ttl_cache_validation": "O valor TTL mínimo do cache deve ser menor ou igual ao valor máximo",
"filter_category_general": "Geral",
"filter_category_security": "Segurança",
"filter_category_regional": "Regional",
"filter_category_other": "Outro",
"filter_category_general_desc": "Listas que bloqueiam o monitorização e a publicidade na maioria dos dispositivos",
"filter_category_security_desc": "Listas especializadas em bloquear domínios de malware, phishing ou fraude",
"filter_category_regional_desc": "Listas focadas em anúncios regionais e servidores de monitorização",
"filter_category_other_desc": "Outras listas negras",
"setup_config_to_enable_dhcp_server": "Defina a definição para habilitar o servidor DHCP",
"original_response": "Resposta original",
"click_to_view_queries": "Clique para ver as consultas",
"port_53_faq_link": "A porta 53 é frequentemente ocupada por serviços \"DNSStubListener\" ou \"systemd-resolved\". Por favor leia <0>essa instrução</0> para resolver isso.",
"adg_will_drop_dns_queries": "O AdGuard Home descartará todas as consultas DNS deste cliente.",
"client_not_in_allowed_clients": "O cliente não é permitido porque não está na lista \"Clientes permitidos\".",
"experimental": "Experimental"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Setări client",
"example_upstream_reserved": "Puteți preciza un DNS upstream <0>de domeniu(ii) specific(e)</0>",
"example_upstream_comment": "Puteți specifica comentariul",
"upstream_parallel": "Folosiți interogări paralele pentru rezolvări rapide interogând simultan toate serverele în amonte",
"parallel_requests": "Solicitări paralele",
"load_balancing": "Echilibrare-sarcini",
@@ -114,7 +115,7 @@
"average_processing_time": "Timpul mediu de procesare",
"average_processing_time_hint": "Timp mediu în milisecunde la procesarea unei cereri DNS",
"block_domain_use_filters_and_hosts": "Blocați domenii folosind filtre și fișiere hosts",
"filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a href='#filters'> Filtre </a>.",
"filters_block_toggle_hint": "Puteți configura regulile de blocare în setările <a>Filtre</a>.",
"use_adguard_browsing_sec": "Utilizați serviciul Navigarea în Securitate AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home va verifica dacă domeniul este în lista negră a serviciul web de securitate de navigare. Pentru acesta va utiliza un lookup API discret: un prefix scurt al numelui de domeniu SHA256 hash este trimis serverului.",
"use_adguard_parental": "Utilizați Controlul Parental AdGuard",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Blocarea IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Descărcați .mobileconfig pentru DNS-over-HTTPS",
"download_mobileconfig_dot": "Descărcați .mobileconfig pentru DNS-over-TLS",
"plain_dns": "DNS simplu",
"form_enter_rate_limit": "Introduceți limita ratei",
"rate_limit": "Limita ratei",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Numărul de solicitări pe secundă pe care un singur client este permis să le facă (setând-o la 0 înseamnă nelimitat)",
"blocking_ipv4_desc": "Adresa IP de returnat pentru o cerere A de blocare",
"blocking_ipv6_desc": "Adresa IP de returnat pentru o cerere AAAA de blocare",
"blocking_mode_default": "Implicit: Răspunde cu REFUSED când sunt blocate de regulă tip Adblock; răspunde cu adresa IP specificată în regulă când sunt blocate de regula tip /etc/hosts",
"blocking_mode_default": "Implicit: Răspunde cu adresa IP (0.0.0.0 for A; :: pentru AAAA) când sunt blocate de regulă tip Adblock; răspunde cu adresa IP specificată în regulă când sunt blocate de regula tip /etc/hosts",
"blocking_mode_refused": "REFUZAT: Răspunde cu codul REFUZAT",
"blocking_mode_nxdomain": "NXDOMAIN: Răspunde cu codul NXDOMAIN",
"blocking_mode_null_ip": "IP nul: răspunde cu o adresă IP zero (0.0.0.0 pentru A; :: pentru AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "Confidențialitate DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Folosiți stringul <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Folosiți stringul <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Rețineți că protocoalele DNS criptate sunt acceptate numai pe Android 9. Așadar, trebuie să instalați programe suplimentare pentru alte sisteme de operare.</0><0>Iată o listă de software pe care o puteți utiliza.</0>",
"setup_dns_privacy_3": "<0>lată o listă de software pe care le puteți utiliza.</0>",
"setup_dns_privacy_4": "Pe un dispozitiv iOS 14 sau macOS Big Sur puteți descărca fișierul special '.mobileconfig' care adaugă servere <highlight>DNS-over-HTTPS</highlight> sau <highlight>DNS-over-TLS</highlight> la setările DNS.",
"setup_dns_privacy_android_1": "Android 9 acceptă DNS-over-TLS nativ. Pentru a-l configura, accesați Setări → Rețea și internet → Advanced → Private DNS și introduceți numele de domeniu acolo.",
"setup_dns_privacy_android_2": "<0>AdGuard pentru Android</0> acceptă <1>DNS-over-HTTPS</1> și <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> adaugă <1>DNS-over-HTTPS</1> suport pentru Android.",
@@ -527,6 +531,7 @@
"check_reason": "Cauza: {{reason}}",
"check_rule": "Regula: {{rule}}",
"check_service": "Nume servici: {{service}}",
"service_name": "Numele serviciului",
"check_not_found": "Nu se găsește în listele de filtre",
"client_confirm_block": "Sunteți sigur că doriți să blocați clientul \"{{ip}}\"?",
"client_confirm_unblock": "Sunteți sigur că doriți să deblocați clientul \"{{ip}}\"?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Mărime cache DNS (în octeți)",
"cache_ttl_min_override": "Suprascrieți minimum TTL",
"cache_ttl_max_override": "Suprascrieți maximum TTL",
"enter_cache_size": "Introduceți mărime cache",
"enter_cache_ttl_min_override": "Introduceți minimum TTL",
"enter_cache_ttl_max_override": "Introduceți maximum TTL",
"cache_ttl_min_override_desc": "Suprascrie valoarea TTL (minimum) primită de la serverul din amonte",
"cache_ttl_max_override_desc": "Suprascrie valoarea TTL (maximum) primită de la serverul din amonte",
"enter_cache_size": "Introduceți mărimea cache-ului (bytes)",
"enter_cache_ttl_min_override": "Introduceți minimum TTL (secunde)",
"enter_cache_ttl_max_override": "Introduceți maximum TTL (secunde)",
"cache_ttl_min_override_desc": "Extinde valorile timp-de-viață scurte (secunde) primite de la serverul din amonte la stocarea în cache a răspunsurilor DNS",
"cache_ttl_max_override_desc": "Setează o valoare maximă a timpului-de-viață (secunde) pentru intrările din memoria cache DNS",
"ttl_cache_validation": "Valoarea TTL cache minimă trebuie să fie mai mică sau egală cu valoarea maximă",
"filter_category_general": "General",
"filter_category_security": "Securitate",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Clicați pentru a vizualiza interogări",
"port_53_faq_link": "Portul 53 este adesea ocupat de serviciile \"DNSStubListener\" sau \"systemd-resolved\". Vă rugăm să citiți <0>această instrucțiune</0> despre cum să rezolvați aceasta.",
"adg_will_drop_dns_queries": "AdGuard Home va renunța la toate interogările DNS de la acest client.",
"client_not_in_allowed_clients": "Clientul nu este permis deoarece nu este în lista de \"Clienți permiși\".",
"experimental": "Experimental"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Настройки клиентов",
"example_upstream_reserved": "Вы можете указать DNS-сервер <0>для конкретного домена(-ов)</0>",
"example_upstream_comment": "Вы можете указать комментарий",
"upstream_parallel": "Использовать параллельные запросы ко всем серверам одновременно для ускорения обработки запроса",
"parallel_requests": "Параллельные запросы",
"load_balancing": "Распределение нагрузки\n",
@@ -114,7 +115,7 @@
"average_processing_time": "Среднее время обработки запроса",
"average_processing_time_hint": "Среднее время для обработки запроса DNS в миллисекундах",
"block_domain_use_filters_and_hosts": "Блокировать домены с использованием фильтров и файлов хостов",
"filters_block_toggle_hint": "Вы можете настроить правила блокировки в <a href='#filters'> \"Фильтрах\"</a>.",
"filters_block_toggle_hint": "Вы можете настроить правила блокировки в <a>\"Фильтрах\"</a>.",
"use_adguard_browsing_sec": "Включить Безопасную навигацию AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home проверит, включен ли домен в веб-службу безопасности браузера. Он будет использовать API, чтобы выполнить проверку: на сервер отправляется только короткий префикс имени домена SHA256.",
"use_adguard_parental": "Включить модуль Родительского контроля AdGuard ",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Блокировка IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Скачать .mobileconfig для DNS-over-HTTPS",
"download_mobileconfig_dot": "Скачать .mobileconfig для DNS-over-TLS",
"plain_dns": "Нешифрованный DNS",
"form_enter_rate_limit": "Введите rate limit",
"rate_limit": "Rate limit",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Ограничение на количество запросов в секунду для каждого клиента (0 — неограниченно)",
"blocking_ipv4_desc": "IP-адрес, возвращаемый при блокировке A-запроса",
"blocking_ipv6_desc": "IP-адрес, возвращаемый при блокировке AAAA-запроса",
"blocking_mode_default": "Стандартный: Отвечает с REFUSED, когда заблокировано правилом в стиле Adblock; отвечает с IP-адресом, указанным в правиле, когда заблокировано правилом в стиле /etc/hosts",
"blocking_mode_default": "Стандартный: Отвечает с нулевым IP-адресом, (0.0.0.0 для A; :: для AAAA) когда заблокировано правилом в стиле Adblock; отвечает с IP-адресом, указанным в правиле, когда заблокировано правилом в стиле /etc/hosts-style",
"blocking_mode_refused": "REFUSED: Отвечает с кодом REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Отвечает с кодом NXDOMAIN\n",
"blocking_mode_null_ip": "Нулевой IP: Отвечает с нулевым IP-адресом (0.0.0.0 для A; :: для AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "Зашифрованный DNS",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Используйте строку <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Используйте строку <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Обратите внимание, что зашифрованный DNS-протокол поддерживается только на Android 9. Для других операционных систем вам нужно будет установить дополнительное ПО.</0><0>Вот список ПО, которое вы можете использовать.</0>",
"setup_dns_privacy_3": "<0>Вот список ПО, которое вы можете использовать.</0>",
"setup_dns_privacy_4": "На устройствах с iOS 14 и macOS Big Sur вы можете скачать специальный файл '.mobileconfig', который добавляет <highlight>DNS-over-HTTPS</highlight> или <highlight>DNS-over-TLS</highlight> серверы в настройки DNS.",
"setup_dns_privacy_android_1": "Android 9 нативно поддерживает DNS-over-TLS. Для настройки, перейдите в Настройки → Сеть и Интернет → Дополнительно → Персональный DNS сервер, и введите туда ваше доменное имя.",
"setup_dns_privacy_android_2": "<0>AdGuard для Android</0> поддерживает <1>DNS-over-HTTPS</1> и <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> добавляет поддержка <1>DNS-over-HTTPS</1> на Android.",
@@ -527,6 +531,7 @@
"check_reason": "Причина: {{reason}}",
"check_rule": "Правило: {{rule}}",
"check_service": "Название сервиса: {{service}}",
"service_name": "Имя сервиса",
"check_not_found": "Не найдено в вашем списке фильтров",
"client_confirm_block": "Вы уверены, что хотите заблокировать клиента \"{{ip}}\"?",
"client_confirm_unblock": "Вы уверены, что хотите разблокировать клиента \"{{ip}}\"?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Размера кеша DNS (в байтах)",
"cache_ttl_min_override": "Переопределить минимальный TTL (в секундах)",
"cache_ttl_max_override": "Переопределить максимальный TTL (в секундах)",
"enter_cache_size": "Введите размер кеша",
"enter_cache_ttl_min_override": "Введите минимальный TTL",
"enter_cache_ttl_max_override": "Введите максимальный TTL",
"cache_ttl_min_override_desc": "Переопределить TTL-значение (минимальное), полученное с upstream-сервера",
"cache_ttl_max_override_desc": "Переопределить TTL-значение (максимальное), полученное с upstream-сервера",
"enter_cache_size": "Введите размер кеша (в байтах)",
"enter_cache_ttl_min_override": "Введите минимальный TTL (в секундах)",
"enter_cache_ttl_max_override": "Введите максимальный TTL (в секундах)",
"cache_ttl_min_override_desc": "Расширить короткие TTL-значения (в секундах), полученные с upstream-сервера при кешировании DNS-ответов",
"cache_ttl_max_override_desc": "Установить максимальное TTL-значение (в секундах) для записей в DNS-кэше",
"ttl_cache_validation": "Минимальное значение TTL кеша должно быть меньше или равно максимальному значению",
"filter_category_general": "Общие",
"filter_category_security": "Безопасность",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Нажмите, чтобы просмотреть запросы",
"port_53_faq_link": "Порт 53 часто занят службами \"DNSStubListener\" или \"systemd-resolved\". Ознакомьтесь с <0>инструкцией</0> о том, как это разрешить.",
"adg_will_drop_dns_queries": "AdGuard Home AdGuard Home сбросит все DNS-запросы от этого клиента.",
"client_not_in_allowed_clients": "Клиент не разрешён, так как его нет в списке \"Разрешённых клиентов\".",
"experimental": "Экспериментальный"
}

View File

@@ -1,14 +1,19 @@
{
"client_settings": "අනුග්‍රාහක සැකසුම්",
"check_dhcp_servers": "DHCP සේවාදායකයන් සඳහා පරීක්ෂා කරන්න",
"parallel_requests": "සමාන්තර ඉල්ලීම්",
"load_balancing": "ධාරිතාව තුලනය",
"check_dhcp_servers": "ග.ධා.වි.කෙ. සේවාදායකයන් සඳහා පරීක්ෂා කරන්න",
"save_config": "වින්‍යාසය සුරකින්න",
"enabled_dhcp": "DHCP සේවාදායකය සබල කර ඇත",
"disabled_dhcp": "DHCP සේවාදායකය අබල කර ඇත",
"enabled_dhcp": "ග.ධා.වි.කෙ. සේවාදායකය සබල කර ඇත",
"disabled_dhcp": "ග.ධා.වි.කෙ. සේවාදායකය අබල කර ඇත",
"unavailable_dhcp_desc": "ඇඩ්ගාර්ඩ් හෝම් හට ඔබගේ මෙහෙයුම් පද්ධතියේ ග.ධා.වි.කෙ. සේවාදායකයක් ධාවනය කළ නොහැක",
"dhcp_title": "ග.ධා.වි.කෙ. සේවාදායකය (පර්යේෂණාත්මක!)",
"dhcp_description": "ඔබගේ මාර්ගකාරකය ග.ධා.වි.කෙ. (DHCP) සැකසුම් ලබා නොදෙන්නේ නම්, ඔබට AdGuardHome හි ඇති ග.ධා.වි.කෙ. සේවාදායකය භාවිතා කළ හැකිය.",
"dhcp_enable": "DHCP සේවාදායකය සබල කරන්න",
"dhcp_disable": "DHCP සේවාදායකය අබල කරන්න",
"dhcp_config_saved": "DHCP වින්‍යාසය සාර්ථකව සුරකින ලදි",
"dhcp_description": "ඔබගේ මාර්ගකාරකය ග.ධා.වි.කෙ. (DHCP) සැකසුම් ලබා නොදෙන්නේ නම්, ඔබට ඇඩ්ගාර්ඩ් හි ඇති ග.ධා.වි.කෙ. සේවාදායකය භාවිතා කළ හැකිය.",
"dhcp_enable": "ග.ධා.වි.කෙ. සේවාදායකය සබල කරන්න",
"dhcp_disable": "ග.ධා.වි.කෙ. සේවාදායකය අබල කරන්න",
"dhcp_config_saved": "ග.ධා.වි.කෙ. වින්‍යාසය සාර්ථකව සුරකින ලදි",
"dhcp_ipv4_settings": "ග.ධා.වි.කෙ. IPv4 සැකසුම්",
"dhcp_ipv6_settings": "ග.ධා.වි.කෙ. IPv6 සැකසුම්",
"form_error_required": "අවශ්‍ය ක්ෂේත්‍රයකි",
"form_error_ip4_format": "වලංගු නොවන IPv4 ආකෘතියකි",
"form_error_ip6_format": "වලංගු නොවන IPv6 ආකෘතියකි",
@@ -20,17 +25,17 @@
"dhcp_form_range_title": "අ.ජා. කෙ. (IP) ලිපින පරාසය",
"dhcp_form_range_start": "පරාසය ආරම්භය",
"dhcp_form_range_end": "පරාසය අවසානය",
"dhcp_interface_select": "ග.ධා.වි.කෙ. (DHCP) අතුරුමුහුණත තෝරන්න",
"dhcp_interface_select": "ග.ධා.වි.කෙ. අතුරුමුහුණත තෝරන්න",
"dhcp_hardware_address": "දෘඩාංග ලිපිනය",
"dhcp_ip_addresses": "අ.ජා. කෙ. (IP) ලිපින",
"ip": "අ.ජා. කෙ. (IP)",
"dhcp_table_hostname": "ධාරක නාමය",
"dhcp_table_expires": "කල් ඉකුත් වීම",
"dhcp_warning": "ඔබට කෙසේ හෝ ග.ධා.වි.කෙ. (DHCP) සේවාදායකය සබල කිරීමට අවශ්‍ය නම්, ඔබේ ජාලයේ වෙනත් ක්‍රියාකාරී ග.ධා.වි.කෙ. සේවාදායකයක් නොමැති බව තහවුරු කරගන්න. එසේ නොමැති නම්, එය සම්බන්ධිත උපාංග සඳහා අන්තර්ජාලය බිඳ දැමිය හැකිය!",
"dhcp_error": "ජාලයේ තවත් ග.ධා.වි.කෙ. (DHCP) සේවාදායකයක් තිබේද යන්න අපට තීරණය කළ නොහැකි විය.",
"dhcp_static_ip_error": "ග.ධා.වි.කෙ. (DHCP) සේවාදායකය භාවිතා කිරීම සඳහා ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනයක් සැකසිය යුතුය. මෙම ජාල අතුරුමුහුණත ස්ථිතික අ.ජා. කෙ. ලිපිනයක් භාවිතයෙන් වින්‍යාසගත කර තිබේද යන්න තීරණය කිරීමට අප අසමත් විය. කරුණාකර ස්ථිතික අ.ජා. කෙ. ලිපිනයක් අතින් සකසන්න.",
"dhcp_dynamic_ip_found": "ඔබේ පද්ධතිය <0>{{interfaceName}}</0> අතුරු මුහුණත සඳහා ගතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපින වින්‍යාසය භාවිතා කරයි. ග.ධා.වි.කෙ. (DHCP) සේවාදායකය භාවිතා කිරීම සඳහා ස්ථිතික අ.ජා. කෙ. ලිපිනයක් සැකසිය යුතුය. ඔබගේ වර්තමාන අ.ජා. කෙ. ලිපිනය <0>{{ipAddress}}</0> වේ. ඔබ ග.ධා.වි.කෙ. සබල කරන්න බොත්තම එබුවහොත් අපි ස්වයංක්‍රීයව මෙම අ.ජා. කෙ. ලිපිනය ස්ථිතික ලෙස සකසන්නෙමු.",
"dhcp_reset": "ග.ධා.වි.කෙ. (DHCP) වින්‍යාසය යළි පිහිටුවීමට අවශ්‍ය බව ඔබට විශ්වාස ද?",
"dhcp_warning": "ඔබට කෙසේ හෝ ග.ධා.වි.කෙ. සේවාදායකය සබල කිරීමට අවශ්‍ය නම්, ඔබේ ජාලයේ වෙනත් ක්‍රියාකාරී ග.ධා.වි.කෙ. සේවාදායකයක් නොමැති බව තහවුරු කරගන්න. එසේ නොමැති නම්, එය සම්බන්ධිත උපාංග සඳහා අන්තර්ජාලය බිඳ දැමිය හැකිය!",
"dhcp_error": "ජාලයේ තවත් ග.ධා.වි.කෙ. සේවාදායකයක් තිබේද යන්න අපට තීරණය කළ නොහැකි විය.",
"dhcp_static_ip_error": "ග.ධා.වි.කෙ. සේවාදායකය භාවිතා කිරීම සඳහා ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනයක් සැකසිය යුතුය. මෙම ජාල අතුරුමුහුණත ස්ථිතික අ.ජා. කෙ. ලිපිනයක් භාවිතයෙන් වින්‍යාසගත කර තිබේද යන්න තීරණය කිරීමට අප අසමත් විය. කරුණාකර ස්ථිතික අ.ජා. කෙ. ලිපිනයක් අතින් සකසන්න.",
"dhcp_dynamic_ip_found": "ඔබේ පද්ධතිය <0>{{interfaceName}}</0> අතුරු මුහුණත සඳහා ගතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපින වින්‍යාසය භාවිතා කරයි. ග.ධා.වි.කෙ. සේවාදායකය භාවිතා කිරීම සඳහා ස්ථිතික අ.ජා. කෙ. ලිපිනයක් සැකසිය යුතුය. ඔබගේ වර්තමාන අ.ජා. කෙ. ලිපිනය <0>{{ipAddress}}</0> වේ. ඔබ ග.ධා.වි.කෙ. සබල කරන්න බොත්තම එබුවහොත් අපි ස්වයංක්‍රීයව මෙම අ.ජා. කෙ. ලිපිනය ස්ථිතික ලෙස සකසන්නෙමු.",
"dhcp_reset": "ග.ධා.වි.කෙ. වින්‍යාසය යළි පිහිටුවීමට අවශ්‍ය බව ඔබට විශ්වාස ද?",
"country": "රට",
"city": "නගරය",
"delete_confirm": "\"{{key}}\" මකා දැමීමට අවශ්‍ය බව ඔබට විශ්වාසද?",
@@ -46,6 +51,7 @@
"filters": "පෙරහන්",
"filter": "පෙරහන",
"query_log": "විමසුම් ලොගය",
"compact": "සංක්ෂිප්ත",
"nothing_found": "කිසිවක් සොයාගත නොහැක",
"faq": "නිති අසන පැණ",
"version": "අනුවාදය",
@@ -74,32 +80,38 @@
"requests_count": "ඉල්ලීම් ගණන",
"top_blocked_domains": "ජනප්‍රිය අවහිර කළ වසම්",
"top_clients": "ජනප්‍රිය අනුග්‍රාහකයන්",
"general_statistics": "පොදු සංඛ්යාලේඛන",
"number_of_dns_query_blocked_24_hours": "දැන්වීම් වාරණ පෙරහන් සහ ධාරක වාරණ ලැයිස්තු මගින් අවහිර කරන ලද DNS ඉල්ලීම් ගණන",
"number_of_dns_query_blocked_24_hours_by_sec": "AdGuard browsing security ඒකකය මගින් අවහිර කරන ලද DNS ඉල්ලීම් ගණන",
"general_statistics": "පොදු සංඛ්යාලේඛන",
"number_of_dns_query_blocked_24_hours": "දැන්වීම් වාරණ පෙරහන් සහ ධාරක වාරණ ලැයිස්තු මගින් අවහිර කරන ලද ව.නා.ප. ඉල්ලීම් ගණන",
"number_of_dns_query_blocked_24_hours_by_sec": "AdGuard browsing security ඒකකය මගින් අවහිර කරන ලද ව.නා.ප. ඉල්ලීම් ගණන",
"number_of_dns_query_blocked_24_hours_adult": "අවහිර කළ වැඩිහිටි වෙබ් අඩවි ගණන",
"enforced_save_search": "ආරක්ෂිත සෙවීම බලාත්මක කරන ලද",
"number_of_dns_query_to_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්‍ර සඳහා DNS ඉල්ලීම් ගණන",
"number_of_dns_query_to_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්‍ර සඳහා ව.නා.ප. ඉල්ලීම් ගණන",
"average_processing_time": "සාමාන්‍ය සැකසුම් කාලය",
"average_processing_time_hint": "DNS ඉල්ලීමක් සැකසීමේ සාමාන්‍ය කාලය මිලි තත්පර වලින්",
"average_processing_time_hint": "ව.නා.ප. ඉල්ලීමක් සැකසීමේ සාමාන්‍ය කාලය මිලි තත්පර වලින්",
"block_domain_use_filters_and_hosts": "පෙරහන් සහ ධාරක ගොනු භාවිතා කරමින් වසම් අවහිර කරන්න",
"filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති <a href='#filters'>පෙරහන්</a> තුළ පිහිටුවිය හැකිය.",
"use_adguard_browsing_sec": "AdGuard browsing security web service භාවිතා කරන්න",
"filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති <a>පෙරහන්</a> තුළ පිහිටුවිය හැකිය.",
"use_adguard_browsing_sec": "AdGuard browsing security වෙබ් සේවාව භාවිතා කරන්න",
"use_adguard_parental": "AdGuard parental control වෙබ් සේවාව භාවිතා කරන්න",
"use_adguard_parental_hint": "වසමේ වැඩිහිටියන්ට අදාල කරුණු අඩංගු දැයි AdGuard Home විසින් පරීක්ෂා කරනු ඇත. එය browsing security වෙබ් සේවාව මෙන් රහස්‍යතා හිතකාමී API භාවිතා කරයි.",
"use_adguard_parental_hint": "වසමේ වැඩිහිටියන්ට අදාල කරුණු අඩංගු දැයි ඇඩ්ගාර්ඩ් හෝම් විසින් පරීක්ෂා කරනු ඇත. එය browsing security වෙබ් සේවාව මෙන් රහස්‍යතා හිතකාමී යෙ.ක්‍ර. අ.මු. (API) භාවිතා කරයි.",
"enforce_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කරන්න",
"enforce_save_search_hint": "AdGuard Home හට පහත සෙවුම් යන්ත්‍ර තුළ ආරක්ෂිත සෙවීම බලාත්මක කළ හැකිය: Google, Youtube, Bing, DuckDuckGo සහ Yandex.",
"enforce_save_search_hint": "ඇඩ්ගාර්ඩ් හෝම් හට පහත සෙවුම් යන්ත්‍ර තුළ ආරක්ෂිත සෙවීම බලාත්මක කළ හැකිය: ගූගල්, යූටියුබ්, බින්ග්, ඩක්ඩක්ගෝ, යාන්ඩෙක්ස් සහ පික්සාබේ.",
"no_servers_specified": "සේවාදායක කිසිවක් නිශ්චිතව දක්වා නැත",
"general_settings": "පොදු සැකසුම්",
"dns_settings": "DNS සැකසුම්",
"dns_blocklists": "DNS අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තු",
"dns_allowlists": "DNS අවසර දීමේ ලැයිස්තු",
"dns_allowlists_desc": "DNS අවසර දීමේ ලැයිස්තුවල වසම් ිසියම් අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුව අඩංගු වුවද එය න‌ොසලකා හැර අවසර දෙනු ලැබේ.",
"dns_blocklists_desc": "ඇඩ්ගාර්ඩ් හෝම් ිසි් අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තු වලට ගැලපෙන වසම් අවහිර කරනු ඇත.",
"dns_allowlists_desc": "අවසර දීමේ ව.නා.ප. ලැයිස්තුවල වසම් කිසියම් අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුවක අඩංගු වුවද එය නොසලකා හැර අවසර දෙනු ලැබේ.",
"custom_filtering_rules": "අභිරුචි පෙරීමේ නීති",
"encryption_settings": "සංකේතාංකන සැකසුම්",
"dhcp_settings": "DHCP සැකසුම්",
"upstream_dns": "Upstream ව.නා.ප. සේවාදායකයන්",
"upstream_dns_help": "පේළියකට එක් සේවාදායක ලිපිනය බැගින් ඇතුළත් කරන්න. upstream ව.නා.ප. (DNS) \n සේවාදායකයන් වින්‍යාසගත කිරීම ගැන <a>තව දැනගන්න</a>.",
"apply_btn": "යොදන්න",
"disabled_filtering_toast": "පෙරීම අබල කර ඇත",
"enabled_filtering_toast": "පෙරීම සබල කර ඇත",
"disabled_safe_browsing_toast": "ආරක්ෂිත සෙවීම අබල කර ඇත",
"enabled_safe_browsing_toast": "ආරක්ෂිත සෙවීම සබල කර ඇත",
"disabled_parental_toast": "Parental control අබල කර ඇත",
"enabled_parental_toast": "Parental control සබල කර ඇත",
"disabled_safe_search_toast": "ආරක්ෂිත සෙවීම අබල කර ඇත",
@@ -113,6 +125,8 @@
"request_table_header": "ඉල්ලීම",
"edit_table_action": "සංස්කරණය කරන්න",
"delete_table_action": "මකන්න",
"elapsed": "ගත වූූූ කාලය",
"filters_and_hosts_hint": "ඇඩ්ගාර්ඩ් හෝම් මූලික දැන්වීම් වාරණ නීති සහ ධාරක ගොනු පද ගැලපුම් තේරුම් ගනී.",
"no_blocklist_added": "අවහිර කිරීමේ ලැයිස්තු එකතු කර නැත",
"no_whitelist_added": "අවසර දීමේ ලැයිස්තු එකතු කර නැත",
"add_blocklist": "අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුවක් එකතු කරන්න",
@@ -125,28 +139,36 @@
"new_allowlist": "නව අවසර දීමේ ලැයිස්තුව",
"edit_blocklist": "අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුව සංස්කරණය කරන්න",
"edit_allowlist": "අවසර දීමේ ලැයිස්තුව සංස්කරණය කරන්න",
"choose_blocklist": "අවහිර කීරීමේ ලැයිස්තුවක් තෝරන්න",
"choose_allowlist": "අනවහිර කීරීමේ ලැයිස්තුවක් තෝරන්න",
"enter_valid_blocklist": "අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුවට වලංගු URL ලිපිනයක් ඇතුළත් කරන්න.",
"enter_valid_allowlist": "අවසර දීමේ ලැයිස්තුවට වලංගු URL ලිපිනයක් ඇතුළත් කරන්න.",
"form_error_url_format": "වලංගු නොවන URL ආකෘතියකි",
"form_error_url_or_path_format": "ලැයිස්තුවක වලංගු නොවන URL හෝ ස්ථීර මාර්ගයකි",
"custom_filter_rules": "අභිරුචි පෙරීමේ නීති",
"custom_filter_rules_hint": "පේළියකට එක් නීතියක් බැගින් ඇතුළත් කරන්න. ඔබට දැන්වීම් අවහිර කිරීමේ නීති හෝ ධාරක ගොනු පද ගැලපුම් භාවිතා කළ හැකිය.",
"examples_title": "උදාහරණ",
"example_meaning_filter_block": "example.org වසමට සහ එහි සියලුම උප වසම් වලට පිවිසීම අවහිර කරන්න",
"example_meaning_filter_whitelist": "example.org වසමට සහ එහි සියලුම උප වසම් වලට ප්‍රවේශය අවහිර නොකරන්න",
"example_meaning_host_block": "AdGuard Home දැන් example.org වසම සඳහා 127.0.0.1 ලිපිනය ලබා දෙනු ඇත (නමුත් එහි උප ලිපින නොවේ).",
"example_meaning_filter_block": "example.org වසමට සහ එහි සියලුම උප වසම් වලට පිවිසීම අවහිර කරයි",
"example_meaning_filter_whitelist": "example.org වසමට සහ එහි සියලුම උප වසම් වලට ප්‍රවේශය අවහිර නොකරයි",
"example_meaning_host_block": "ඇඩ්ගාර්ඩ් හෝම් දැන් example.org වසම සඳහා 127.0.0.1 ලිපිනය ලබා දෙනු ඇත (නමුත් එහි උප ලිපින නොවේ).",
"example_comment": "! මෙතැන අදහස් දැක්වීමක්",
"example_comment_meaning": "විස්තර කිරීමක්",
"example_comment_meaning": "විස්තර කිරීමක්",
"example_comment_hash": "# එසේම අදහස් දැක්වීමක්",
"example_regex_meaning": "නිශ්චිතව දක්වා ඇති නිත්‍ය වාක්‍යවිධියට ගැලපෙන වසම් වෙත පිවිසීම අවහිර කරන්න",
"example_regex_meaning": "නිශ්චිතව දක්වා ඇති නිත්‍ය වාක්‍යවිධියට ගැලපෙන වසම් වෙත පිවිසීම අවහිර කරයි",
"example_upstream_regular": "සාමාන්‍ය DNS (UDP හරහා)",
"example_upstream_dot": "සංකේතාංකනය කළ <0>DNS-over-TLS</0>",
"example_upstream_doh": "සංකේතාංකනය කළ <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "සංකේතාංකනය කළ <0>DNS-over-QUIC</0>",
"example_upstream_tcp": "සාමාන්‍ය DNS (TCP හරහා)",
"all_lists_up_to_date_toast": "සියලුම ලැයිස්තු දැනටමත් යාවත්කාලීනයි",
"dns_test_ok_toast": "සඳහන් කළ DNS සේවාදායකයන් නිවැරදිව ක්‍රියා කරයි",
"dns_test_not_ok_toast": "සේවාදායක \"{{key}}\": භාවිතා කළ නොහැකි විය, කරුණාකර ඔබ එය නිවැරදිව ලියා ඇත්දැයි පරීක්ෂා කරන්න",
"unblock": "අනවහිර කරන්න",
"block": "අවහිර කරන්න",
"dns_test_ok_toast": "සඳහන් කළ ව.නා.ප. සේවාදායකයන් නිවැරදිව ක්‍රියා කරයි",
"dns_test_not_ok_toast": "සේවාදායක \"{{key}}\": භාවිතා කළ නොහැකි විය, කරුණාකර ඔබ එය නිවැරදිව ලියා ඇත්දැයි පරීක්ෂා කරන්න",
"unblock": "අනවහිර",
"block": "අවහිර",
"disallow_this_client": "මෙම අනුග්‍රාහකයට අවසර නොදෙන්න",
"allow_this_client": "මෙම අනුග්‍රාහකයට අවසර දෙන්න",
"block_for_this_client_only": "මෙම අනුග්‍රාහකයට පමණක් අවහිර කරන්න",
"unblock_for_this_client_only": "මෙම අනුග්‍රාහකයට පමණක් අනවහිර කරන්න",
"time_table_header": "වේලාව",
"date": "දිනය",
"domain_name_table_header": "වසම් නාමය",
@@ -177,11 +199,14 @@
"query_log_strict_search": "ඉතා නිවැරදිව සෙවීම සඳහා ද්විත්ව උද්ධෘතය භාවිතා කරන්න",
"query_log_retention_confirm": "විමසුම් ලොගය රඳවා තබා ගැනීම වෙනස් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද? ඔබ කාල පරතරයෙහි අගය අඩු කළහොත් සමහර දත්ත නැති වී යනු ඇත",
"anonymize_client_ip": "අනුග්‍රාහකයෙහි අ.ජා. කෙ. (IP) නිර්නාමික කරන්න",
"dns_config": "DNS සේවාදායක වින්‍යාසය",
"anonymize_client_ip_desc": "ලොග සහ සංඛ්‍යාලේඛන තුළ අනුග්‍රාහකයේ සම්පූර්ණ අ.ජා. කෙ. ලිපිනය සුරකීමෙන් වලකින්න",
"dns_config": "ව.නා.ප. සේවාදායක වින්‍යාසය",
"blocking_mode": "අවහිර කරන ආකාරය",
"default": "සුපුරුදු",
"nxdomain": "නොපවතින වසම",
"null_ip": "අභිශූන්‍යය අ.ජා. කෙ. (IP)",
"custom_ip": "අභිරුචි අ.ජා. කෙ. (IP)",
"refused": "REFUSED",
"null_ip": "අභිශූන්‍යය අ.ජා. කෙ.",
"custom_ip": "අභිරුචි අ.ජා. කෙ.",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"form_enter_rate_limit": "අනුපාත සීමාව ඇතුළත් කරන්න",
@@ -189,26 +214,31 @@
"edns_enable": "EDNS අනුග්‍රාහක අනුජාලය සබල කරන්න",
"blocking_ipv4_desc": "අවහිර කළ A ඉල්ලීමක් සඳහා ආපසු එවිය යුතු අ.ජා. කෙ. (IP) ලිපිනය",
"blocking_ipv6_desc": "අවහිර කළ AAAA ඉල්ලීමක් සඳහා ආපසු එවිය යුතු අ.ජා. කෙ. (IP) ලිපිනය",
"blocking_mode_default": "පොදු: දැන්වීම් අවහිර කරන ආකාරයේ නීතියක් මගින් අවහිර කළ විට REFUSED සමඟ ප්‍රතිචාර දක්වයි; /etc/host-style ආකාරයේ නීතියක් මගින් අවහිර කළ විට නීතියේ දක්වා ඇති අ.ජා. කෙ. ලිපිනය සමඟ ප්‍රතිචාර දක්වයි",
"blocking_mode_refused": "REFUSED: REFUSED කේතය සමඟ ප්‍රතිචාර දක්වයි",
"blocking_mode_nxdomain": "නොපවතින වසම (NXDOMAIN): NXDOMAIN කේතය සමඟ ප්‍රතිචාර දක්වයි",
"blocking_mode_null_ip": "අභිශූන්‍යය අන්තර්ජා කෙටුම්පත: ශුන්‍ය අ.ජා. කෙ. (IP) ලිපිනය සමඟ ප්‍රතිචාර දක්වයි (A සඳහා 0.0.0.0; AAAA සඳහා ::)",
"blocking_mode_custom_ip": "අභිරුචි අන්තර්ජාල කෙටුම්පත: අතින් සැකසූ අ.ජා. කෙ. (IP) ලිපිනයක් සමඟ ප්‍රතිචාර දක්වයි",
"upstream_dns_client_desc": "ඔබ මෙම ක්ෂේත්‍රය හිස්ව තබා ගන්නේ නම්, AdGuard Home විසින් <0>DNS සැකසුම්</0> හි වින්‍යාසගත කර ඇති සේවාදායකයන් භාවිතා කරනු ඇත.",
"blocking_mode_null_ip": "අභිශූන්‍යය අ.ජා. කෙ. : ශුන්‍ය අ.ජා. කෙ. ලිපිනය සමඟ ප්‍රතිචාර දක්වයි (A සඳහා 0.0.0.0; AAAA සඳහා ::)",
"blocking_mode_custom_ip": "අභිරුචි අන්තර්ජාල කෙටුම්පත: අතින් සැකසූ අ.ජා. කෙ. ලිපිනයක් සමඟ ප්‍රතිචාර දක්වයි",
"upstream_dns_client_desc": "ඔබ මෙම ක්ෂේත්‍රය හිස්ව තබා ගන්නේ නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් <0>DNS සැකසුම්</0> හි වින්‍යාසගත කර ඇති සේවාදායකයන් භාවිතා කරනු ඇත.",
"tracker_source": "ලුහුබැඳීම් මූලාශ්‍රය",
"source_label": "මූලාශ්‍රය",
"found_in_known_domain_db": "දැනුවත් වසම් දත්ත ගබඩාවේ හමු විය.",
"category_label": "ප්‍රවර්ගය",
"rule_label": "නීතිය",
"list_label": "ලැයිස්තුව",
"unknown_filter": "{{filterId}} නොදන්නා පෙරහනකි",
"known_tracker": "දන්නා ලුහුබැඳීමක්",
"install_welcome_title": "AdGuard Home වෙත සාදරයෙන් පිළිගනිමු!",
"install_welcome_desc": "AdGuard Home යනු ජාලය පුරා ඇති දැන්වීම් සහ ලුහුබැඳීම අවහිර කරන DNS සේවාදායකි. ඔබගේ මුළු ජාලය සහ සියලුම උපාංග පාලනය කිරීමට ඉඩ සලසා දීම එහි පරමාර්ථය යි, එයට අනුග්‍රාහක පාර්ශවීය වැඩසටහනක් භාවිතා කිරීම අවශ්‍ය නොවේ.",
"known_tracker": "දැනුවත් ලුහුබැඳීමක්",
"install_welcome_title": "ඇඩ්ගාර්ඩ් හෝම් වෙත සාදරයෙන් පිළිගනිමු!",
"install_welcome_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු ජාලය පුරා ඇති දැන්වීම් සහ ලුහුබැඳීම අවහිර කරන ව.නා.ප. සේවාදායකි. ඔබගේ මුළු ජාලය සහ සියලුම උපාංග පාලනය කිරීමට ඉඩ සලසා දීම එහි පරමාර්ථය යි, එයට අනුග්‍රාහක පාර්ශවීය වැඩසටහනක් භාවිතා කිරීම අවශ්‍ය නොවේ.",
"install_settings_title": "පරිපාලක වෙබ් අතුරු මුහුණත",
"install_settings_listen": "සවන් දෙන අතුරු මුහුණත",
"install_settings_port": "කවුළුව",
"form_error_port": "වලංගු කවුළුවක අගයක් ඇතුළත් කරන්න",
"install_settings_dns": "DNS සේවාදායකය",
"install_settings_dns": "ව.නා.ප. සේවාදායකය",
"install_settings_dns_desc": "පහත ලිපිනයන්හි ව.නා.ප. සේවාදායකය භාවිතා කිරීම සඳහා ඔබගේ උපාංග හෝ රවුටරය වින්‍යාසගත කිරීමට අවශ්‍ය වනු ඇත:",
"install_settings_all_interfaces": "සියලුම අතුරුමුහුණත්",
"install_auth_title": "සත්‍යාපනය",
"install_auth_desc": "ඔබගේ AdGuard Home පරිපාලක වෙබ් අතුරු මුහුණතට මුරපද සත්‍යාපනය වින්‍යාසගත කිරීම අතිශයින් නිර්දේශ කෙරේ. එය ඔබගේ ස්ථානීය ජාල‌ය‌ෙ‌න් පමණක් ප්‍රවේශ විය හැකි වුවද, එය තව දුරටත් සීමා රහිත ප්‍රවේශයකින් ආරක්ෂා කර ගැනීම වැදගත් ය.",
"install_auth_desc": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් පරිපාලක වෙබ් අතුරු මුහුණතට මුරපද සත්‍යාපනය වින්‍යාසගත කිරීම අතිශයින් නිර්දේශ කෙරේ. එය ඔබගේ ස්ථානීය ජාල‌යන් පමණක් ප්‍රවේශ විය හැකි වුවද, එය තව දුරටත් සීමා රහිත ප්‍රවේශයකින් ආරක්ෂා කර ගැනීම වැදගත් ය.",
"install_auth_username": "පරිශීලක නාමය",
"install_auth_password": "මුරපදය",
"install_auth_confirm": "මුරපදය තහවුරු කරන්න",
@@ -216,47 +246,51 @@
"install_auth_password_enter": "මුරපදය ඇතුළත් කරන්න",
"install_step": "පියවර",
"install_devices_title": "ඔබගේ උපාංග වින්‍යාසගත කරන්න",
"install_devices_desc": "AdGuard Home භාවිතා කිරීම ආරම්භයට, ඔබගේ උපාංග එය පරිශ්‍රීලනයට වින්‍යාසගත කිරීම අවශ්‍ය වේ.",
"install_devices_desc": "ඇඩ්ගාර්ඩ් හෝම් භාවිතා කිරීම ආරම්භයට, ඔබගේ උපාංග එය පරිශ්‍රීලනයට වින්‍යාසගත කිරීම අවශ්‍ය වේ.",
"install_submit_title": "සුභ පැතුම්!",
"install_submit_desc": "පිහිටුවීමේ ක්‍රියා පටිපාටිය අවසන් වී ඇති අතර ඔබ AdGuard Home භාවිතය ආරම්භ කිරීමට සූදානම්ය.",
"install_submit_desc": "පිහිටුවීමේ ක්‍රියා පටිපාටිය අවසන් වී ඇති අතර ඔබ ඇඩ්ගාර්ඩ් හෝම් භාවිතය ආරම්භ කිරීමට සූදානම්ය.",
"install_devices_router": "මාර්ගකාරකය",
"install_devices_router_desc": "මෙම පිහිටුම ඔබගේ නිවසේ මාර්ගකාරකයට සම්බන්ධ සියලුම උපාංග ස්වයංක්‍රීයව ආවරණය කරන අතර ඔබට ඒවා අතින් වින්‍යාසගත කිරීමට අවශ්‍ය නොවනු ඇත.",
"install_devices_router_list_3": "ඔබAdGuard Home සේවාදායක ලිපින එහි ඇතුළත් කරන්න.",
"install_devices_router_list_4": "ඔබට සමහර වර්ගයේ රවුටර වල අභිරුචි ව.නා.ප. (DNS) සේවාදායකයක් සැකසිය නොහැක. මෙම අවස්ථාවේදී AdGuard Home <0>ග.ධා.වි.කෙ. (DHCP) සේවාදායකයක්</0> ලෙස පිහිටුවන්නේ නම් එය උපකාර වනු ඇත. එසේ නොමැතිනම්, ඔබග‌ේ විශේෂිත මාර්ගකාරක මාදිළිය සඳහා වූ ව.නා.ප. සේවාදායකයන් රිසිකරණය කරන්නේ කෙසේද යන්න පිළිබඳ අත්පොත සෙවිය යුතුය.",
"install_devices_router_list_1": "ඔබේ මාර්ගකාරකය සඳහා වූ මනාපයන් විවෘත කරන්න. සාමාන්‍යයෙන්, එය ඔබගේ බ්‍රව්සරයෙන් URL එකක් හරහා (http://192.168.0.1/ හෝ http://192.168.1.1/ වැනි) පිවිසිය හැකිය. මුරපදය ඇතුළත් කිරීමට ඔබෙන් ඉල්ලා සිටිය හැකිය. ඔබට එය මතක නැතිනම්, බොහෝ විට මාර්ගකාරකයේ බොත්තමක් එබීමෙන් මුරපදය නැවත සැකසිය හැක. සමහර මාර්ගකාරක සඳහා විශේෂිත යෙදුමක් අවශ්‍ය වන අතර, එය දැනටමත් ඔබේ පරිගණකයේ/දුරකථනයේ ස්ථාපනය කර තිබිය යුතුය.",
"install_devices_router_list_2": "ග.ධා.වි.කෙ. (DHCP)/ ව.නා.ප. (DNS) සැකසුම් සොයා ගන්න. ඉලක්කම් කට්ටල දෙකකට හෝ තුනකට ඉඩ දෙන ක්ෂේත්‍රයක් අසල ඇති ව.නා.ප. අක්ෂර සොයන්න, සෑම එකක්ම ඉලක්කම් එකේ සිට තුන දක්වා කාණ්ඩ හතරකට බෙදා ඇත.",
"install_devices_router_list_3": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින එහි ඇතුළත් කරන්න.",
"install_devices_router_list_4": "ඔබට සමහර වර්ගයේ රවුටර වල අභිරුචි ව.නා.ප. (DNS) සේවාදායකයක් සැකසිය නොහැක. මෙම අවස්ථාවේදී ඇඩ්ගාර්ඩ් හෝම් <0>ග.ධා.වි.කෙ. සේවාදායකයක්</0> ලෙස පිහිටුවන්නේ නම් එය උපකාර වනු ඇත. එසේ නොමැතිනම්, ඔබගේ විශේෂිත මාර්ගකාරක මාදිළිය සඳහා වූ ව.නා.ප. සේවාදායකයන් රිසිකරණය කරන්නේ කෙසේද යන්න පිළිබඳ අත්පොත සෙවිය යුතුය.",
"install_devices_windows_list_1": "ආරම්භක මෙනුව හෝ වින්ඩෝස් සෙවුම හරහා පාලක පැනලය විවෘත කරන්න.",
"install_devices_windows_list_2": "ජාල සහ අන්තර්ජාල ප්‍රවර්ගයට ගොස් පසුව ජාල සහ බෙදාගැනීමේ මධ්‍යස්ථානය වෙත යන්න.",
"install_devices_windows_list_3": "උපයුක්තක‌‌‌යෙහි සැකසුම් වෙනස් කිරීම තිරයේ වම් පසින් සොයාගෙන එය මත ක්ලික් කරන්න.",
"install_devices_windows_list_4": "ඔබගේ ක්‍රියාකාරී සම්බන්ධතාවය තෝරන්න, එය මත දකුණු-ක්ලික් කර ගුණාංග තෝරන්න.",
"install_devices_windows_list_5": "ලැයිස්තුවේ ඇති අන්තර්ජාල කෙටුම්පත් අනුවාදය 4 (TCP/IP) සොයාගෙන එය තෝරා ඉන්පසු ගුණාංග මත නැවත ක්ලික් කරන්න.",
"install_devices_windows_list_6": "'පහත දැක්වෙන DNS සේවාදායක ලිපින භාවිතා කරන්න' යන්න තෝරා ඔබගේ AdGuard Home සේවාදායක ලිපින ඇතුළත් කරන්න.",
"install_devices_windows_list_6": "'පහත සඳහන් ව.නා.ප. සේවාදායක ලිපින භාවිතා කරන්න' යන්න තෝරා ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින ඇතුළත් කරන්න.",
"install_devices_macos_list_1": "ඇපල් අයිකනය මත ක්ලික් කර පද්ධති මනාපයන් වෙත යන්න.",
"install_devices_macos_list_2": "ජාලය මත ක්ලික් කරන්න.",
"install_devices_macos_list_3": "ඔබගේ ලැයිස්තුවේ පළමු සම්බන්ධතාවය තෝරා උසස් මත ක්ලික් කරන්න.",
"install_devices_macos_list_4": "DNS තීරුව තෝරා ඔබගේ AdGuard Home සේවාදායක ලිපින ඇතුළත් කරන්න.",
"install_devices_macos_list_4": "ව.නා.ප. (DNS) තීරුව තෝරා ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින ඇතුළත් කරන්න.",
"install_devices_android_list_1": "ඇන්ඩ්‍රොයිඩ් මෙනුවෙහි මුල් තිරයෙන්, සැකසීම් මත තට්ටු කරන්න.",
"install_devices_android_list_2": "මෙනුවේ Wi-Fi මත තට්ටු කරන්න. පවතින සියලුම ජාල ලැයිස්තුගත කර ඇති තිරය පෙන්වනු ඇත (ජංගම සම්බන්ධතාවය සඳහා අභිරුචි DNS සැකසිය නොහැක).",
"install_devices_android_list_2": "මෙනුවේ වයි-ෆයි මත තට්ටු කරන්න. පවතින සියලුම ජාල ලැයිස්තුගත කර ඇති තිරය පෙන්වනු ඇත (ජංගම සම්බන්ධතාවය සඳහා අභිරුචි ව.නා.ප. සැකසිය නොහැක).",
"install_devices_android_list_3": "ඔබ සම්බන්ධ වී ඇති ජාලය මත දිගු වේලාවක් ඔබන්න, ඉන්පසුව ජාලය වෙනස් කිරීම මත තට්ටු කරන්න.",
"install_devices_android_list_4": "ඔබට සමහර උපාංගවල වැඩිදුර සැකසුම් බැලීමට \"උසස්\" සඳහා වූ කොටුව සලකුණු කිරීමට අවශ්‍ය විය හැකිය. එමෙන්ම ඔබගේ ඇන්ඩ්‍රොයිඩ් DNS සැකසුම් වෙනස් කිරීමට, අ.ජා. කෙ. (IP) සැකසුම් ග.ධා.වි.කෙ. (DHCP) සිට ස්ථිතික වෙත මාරු කළ යුතුය.",
"install_devices_android_list_5": "DNS 1 සහ DNS 2 පිහිටුවීම් අගයන් ඔබගේ AdGuard Home සේවාදායක ලිපින වලට වෙනස් කරන්න.",
"install_devices_android_list_4": "ඔබට සමහර උපාංගවල වැඩිදුර සැකසුම් බැලීමට \"උසස්\" සඳහා වූ කොටුව සලකුණු කිරීමට අවශ්‍ය විය හැකිය. එමෙන්ම ඔබගේ ඇන්ඩ්‍රොයිඩ් ව.නා.ප. (DNS) සැකසුම් වෙනස් කිරීමට අ.ජා. කෙ. (IP) සැකසුම්, ග.ධා.වි.කෙ. (DHCP) සිට ස්ථිතික වෙත මාරු කළ යුතුය.",
"install_devices_android_list_5": "ව.නා.ප. 1 සහ ව.නා.ප. 2 පිහිටුවීම් අගයන් ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින වලට වෙනස් කරන්න.",
"install_devices_ios_list_1": "මුල් තිරයේ සිට, සැකසුම් මත තට්ටු කරන්න.",
"install_devices_ios_list_2": "වම්පස මෙනුවෙහි Wi-Fi තෝරන්න (ජංගම දුරකථන සඳහා DNS වින්‍යාසගත කිරීමට නොහැකිය).",
"install_devices_ios_list_2": "වම්පස මෙනුවෙහි වයි-ෆයි තෝරන්න (ජංගම දුරකථන සඳහා ව.නා.ප. වින්‍යාසගත කිරීමට නොහැකිය).",
"install_devices_ios_list_3": "දැනට ක්‍රියාකාරී ජාලයයහෙි නම මත තට්ටු කරන්න.",
"install_devices_ios_list_4": "DNS ක්ෂේත්‍රය තුළ ඔබගේ AdGuard Home සේවාදායක ලිපින ඇතුළත් කරන්න.",
"install_devices_ios_list_4": "ව.නා.ප. (DNS) ක්ෂේත්‍රය තුළ ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින ඇතුළත් කරන්න.",
"get_started": "ආරම්භ කර ගන්න",
"next": "ඊළඟ",
"open_dashboard": "උපකරණ පුවරුව විවෘත කරන්න",
"install_saved": "සාර්ථකව සුරකින ලදි",
"encryption_title": "සංකේතාංකනය",
"encryption_desc": "ගුප්තකේතනය (HTTPS/TLS) සඳහා DNS සහ පරිපාලක වෙබ් අතුරු මුහුණත සහය දක්වයි",
"encryption_desc": "ගුප්තකේතනය (HTTPS/TLS) සඳහා ව.නා.ප. සහ පරිපාලක වෙබ් අතුරු මුහුණත සහය දක්වයි",
"encryption_config_saved": "සංකේතාංකන වින්‍යාසය සුරකින ලදි",
"encryption_server": "සේවාදායක‌‌‌‌යේ නම",
"encryption_server_enter": "ඔබගේ වසම් නාමය ඇතුළත් කරන්න",
"encryption_redirect": "ස්වයංක්‍රීයව HTTPS වෙත හරවා යවන්න",
"encryption_redirect_desc": "සබල කර ඇත්නම්, AdGuard Home ඔබව ස්වයංක්‍රීයව HTTP සිට HTTPS ලිපින වෙත හරවා යවනු ඇත.",
"encryption_redirect_desc": "සබල කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් ඔබව ස්වයංක්‍රීයව HTTP සිට HTTPS ලිපින වෙත හරවා යවනු ඇත.",
"encryption_https": "HTTPS කවුළුව",
"encryption_https_desc": "HTTPS කවුළුව වින්‍යාසගත කර ඇත්නම්, AdGuard Home පරිපාලක අතුරුමුහුණත HTTPS හරහා ප්‍රවේශ විය හැකි අතර එය '/ dns-query' ස්ථානයේ DNS-over-HTTPS ද ලබා දෙනු ඇත.",
"encryption_https_desc": "HTTPS කවුළුව වින්‍යාසගත කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් පරිපාලක අතුරුමුහුණත HTTPS හරහා ප්‍රවේශ විය හැකි අතර එය '/dns-query' ස්ථානයේ DNS-over-HTTPS ද ලබා දෙනු ඇත.",
"encryption_dot": "DNS-over-TLS කවුළුව",
"encryption_dot_desc": "මෙම කවුළුව වින්‍යාසගත කර ඇත්නම්, AdGuard Home විසින් මෙම කවුළුව හරහා DNS-over-TLS සේවාදායකයක් ක්‍රියාත්මක කරනු ඇත.",
"encryption_dot_desc": "මෙම කවුළුව වින්‍යාසගත කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් මෙම කවුළුව හරහා DNS-over-TLS සේවාදායකයක් ක්‍රියාත්මක කරනු ඇත.",
"encryption_doq": "DNS-over-QUIC කවුළුව",
"encryption_doq_desc": "මෙම කවුළුව වින්‍යාසගත කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් මෙම කවුළුව හරහා DNS-over-QUIC සේවාදායකයක් ක්‍රියාත්මක කරනු ඇත. එය පර්යේෂණාත්මක වන අතර විශ්වාසදායක නොවිය හැකිය. එසේම, මේ වන විට එයට සහාය දක්වන බොහෝ අනුග්‍රාහකයින් නොමැත.",
"encryption_certificates": "සහතික",
"encryption_certificates_input": "ඔබගේ PEM-කේතාංකනය කළ සහතික පිටපත් කර මෙහි අලවන්න.",
"encryption_status": "තත්ත්වය",
@@ -264,7 +298,7 @@
"encryption_key": "පුද්ගලික යතුර",
"encryption_key_input": "ඔබගේ සහතිකය සඳහා PEM-කේතාංකනය කළ පුද්ගලික යතුර පිටපත් කර මෙහි අලවන්න.",
"encryption_enable": "සංකේතාංකනය සබල කරන්න (HTTPS, DNS-over-HTTPS සහ DNS-over-TLS)",
"encryption_enable_desc": "සංකේතාංකනය සබල කර ඇත්නම්, AdGuard Home පරිපාලක අතුරුමුහුණත HTTPS හරහා ක්‍රියා කරනු ඇති අතර DNS සේවාදායකය DNS-over-HTTPS සහ DNS-over-TLS හරහා ලැබෙන ඉල්ලීම් සඳහා සවන් දෙනු ඇත.",
"encryption_enable_desc": "සංකේතාංකනය සබල කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් පරිපාලක අතුරුමුහුණත HTTPS හරහා ක්‍රියා කරනු ඇති අතර ව.නා.ප. සේවාදායකය DNS-over-HTTPS සහ DNS-over-TLS හරහා ලැබෙන ඉල්ලීම් සඳහා සවන් දෙනු ඇත.",
"encryption_key_valid": "මෙය වලංගු {{type}} පුද්ගලික යතුරකි",
"encryption_key_invalid": "මෙය වලංගු නොවන {{type}} පුද්ගලික යතුරකි",
"encryption_subject": "මාතෘකාව",
@@ -278,18 +312,19 @@
"form_error_equal": "සමාන නොවිය යුතුය",
"form_error_password": "මුරපදය නොගැලපුුුුුුණි",
"reset_settings": "සැකසුම් යළි පිහිටුවන්න",
"update_announcement": "AdGuard Home {{version}} දැන් ලබා ගත හැකිය! වැඩි විස්තර සඳහා <0>මෙහි ක්ලික් කරන්න</0>.",
"update_announcement": "ඇඩ්ගාර්ඩ් හෝම් {{version}} දැන් ලබා ගත හැකිය! වැඩි විස්තර සඳහා <0>මෙහි ක්ලික් කරන්න</0>.",
"setup_guide": "පිහිටුවීමේ මාර්ගෝපදේශය",
"dns_addresses": "DNS ලිපින",
"dns_start": "DNS සේවාදායකය ආරම්භ වෙමින් පවතී",
"dns_start": "ව.නා.ප. සේවාදායකය ආරම්භ වෙමින් පවතී",
"dns_status_error": "ව.නා.ප. සේවාදායකයේ තත්වය පරීක්ෂා කිරීමේදී දෝෂයකි",
"down": "පහත",
"fix": "නිරාකරණය කරන්න",
"dns_providers": "මෙහි තෝරා ගැනීමට <0>දන්නා DNS සපයන්නන්ගේ ලැයිස්තුවක්</0> ඇත.",
"dns_providers": "මෙහි තෝරා ගැනීමට <0>දැනුවත් ව.නා.ප. සපයන්නන්ගේ ලැයිස්තුවක්</0> ඇත.",
"update_now": "දැන් \tයාවත්කාල කරන්න",
"update_failed": "ස්වයංක්‍රීය යාවත්කාල කිරීම අසාර්ථක විය. අතින් යාවත්කාල කිරීමට කරුණාකර <a>පියවර අනුගමනය කරන්න</a>.",
"processing_update": "කරුණාකර රැඳී සිටින්න, AdGuard Home යාවත්කාලීන වෙමින් පවතී",
"processing_update": "කරුණාකර රැඳී සිටින්න, ඇඩ්ගාර්ඩ් හෝම් යාවත්කාලීන වෙමින් පවතී",
"clients_title": "අනුග්‍රාහකයන්",
"clients_desc": "AdGuard Home වෙත සම්බන්ධ කර ඇති උපාංග වින්‍යාසගත කරන්න",
"clients_desc": "ඇඩ්ගාර්ඩ් හෝම් වෙත සම්බන්ධ කර ඇති උපාංග වින්‍යාසගත කරන්න",
"settings_global": "ගෝලීය",
"settings_custom": "අභිරුචි",
"table_client": "අනුග්‍රාහකය",
@@ -300,7 +335,7 @@
"client_edit": "අනුග්‍රාහකය සංස්කරණය කරන්න",
"client_identifier": "හඳුන්වනය",
"ip_address": "අ.ජා. කෙ. (IP) ලිපිනය",
"client_identifier_desc": "අනුග්‍රාහකයන් අ.ජා. කෙ. (IP) ලිපිනයක් හෝ මා.ප්‍ර.පා. (MAC) ලිපිනයක් මගින් හඳුනාගත හැකිය. මා.ප්‍ර.පා. හඳුන්වනයක් ලෙස භාවිතා කළ හැක්කේ AdGuard Home ද <0>DHCP සේවාදායකයක්</0> නම් පමණක් බව කරුණාවෙන් සලකන්න. ",
"client_identifier_desc": "අනුග්‍රාහකයන් අ.ජා. කෙ. (IP) ලිපිනයක් හෝ මා.ප්‍ර.පා. (MAC) ලිපිනයක් මගින් හඳුනාගත හැකිය. මා.ප්‍ර.පා. හඳුන්වනයක් ලෙස භාවිතා කළ හැක්කේ ඇඩ්ගාර්ඩ් හෝම් ද <0>DHCP සේවාදායකයක්</0> නම් පමණක් බව කරුණාවෙන් සලකන්න. ",
"form_enter_ip": "අ.ජා. කෙ. (IP) ඇතුළත් කරන්න",
"form_enter_mac": "MAC ඇතුළත් කරන්න",
"form_enter_id": "හඳුන්වනය ඇතුළත් කරන්න",
@@ -313,30 +348,32 @@
"client_updated": "\"{{key}}\" අනුග්‍රාහකය සාර්ථකව යාවත්කාල කරන ලදි",
"client_confirm_delete": "\"{{key}}\" අනුග්‍රාහකය ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?",
"list_confirm_delete": "මෙම ලැයිස්තුව ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාස ද?",
"auto_clients_desc": "AdGuard Home භාවිතා කරන අනුග්‍රාහකයන්‌ග‌ේ දත්ත, නමුත් වින්‍යාසය තුළ ගබඩා කර නොමැති",
"auto_clients_desc": "ඇඩ්ගාර්ඩ් හෝම් භාවිතා කරන අනුග්‍රාහකයන්‌ග දත්ත, නමුත් වින්‍යාසය තුළ ගබඩා කර නොමැති",
"access_title": "ප්‍රවේශවීමට සැකසුම්",
"access_desc": "මෙහිදී ඔබට AdGuard Home DNS සේවාදායකය සඳහා ප්‍රවේශ වී‌‌‌‌මේ නීති වින්‍යාසගත කළ හැකිය.",
"access_desc": "මෙහිදී ඔබට ඇඩ්ගාර්ඩ් හෝම් ව.නා.ප. සේවාදායකය සඳහා ප්‍රවේශ වී‌‌‌‌මේ නීති වින්‍යාසගත කළ හැකිය.",
"access_allowed_title": "අවසර ලත් අනුග්‍රාහකයන්",
"access_allowed_desc": "CIDR හෝ අ.ජා. කෙ. (IP) ලිපින ලැයිස්තුවක් වින්‍යාසගත කර ඇත්නම්, AdGuard Home විසින් එම අ.ජා. කෙ. ලිපින වලින් පමණක් ඉල්ලීම් පිළිගනු ඇත.",
"access_allowed_desc": "CIDR හෝ අ.ජා. කෙ. ලිපින ලැයිස්තුවක් වින්‍යාසගත කර ඇත්නම්, AdGuard Home විසින් එම අ.ජා. කෙ. ලිපින වලින් පමණක් ඉල්ලීම් පිළිගනු ඇත.",
"access_disallowed_title": "අවසර නොලත් අනුග්‍රාහකයන්",
"access_disallowed_desc": "CIDR හෝ අ.ජා. කෙ. (IP) ලිපින ලැයිස්තුවක් වින්‍යාසගත කර ඇත්නම්, AdGuard Home විසින් එම අ.ජා. කෙ. ලිපින වලින් ඉල්ලීම් අත්හරිනු ඇත.",
"access_disallowed_desc": "CIDR හෝ අ.ජා. කෙ. ලිපින ලැයිස්තුවක් වින්‍යාසගත කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් එම අ.ජා. කෙ. ලිපින වලින් ඉල්ලීම් අත්හරිනු ඇත.",
"access_blocked_title": "අවහිර කළ වසම්",
"access_settings_saved": "ප්‍රවේශ වීමේ සැකසුම් සාර්ථකව සුරකින ලදි",
"updates_checked": "යාවත්කාලීන කිරීම් සාර්ථකව පරික්ෂා කර ඇත",
"updates_version_equal": "AdGuard Home යාවත්කාලීනයි",
"updates_version_equal": "ඇඩ්ගාර්ඩ් හෝම් යාවත්කාලීනයි",
"check_updates_now": "යාවත්කාල කිරීම සඳහා දැන් පරීක්ෂා කරන්න",
"dns_privacy": "DNS රහස්‍යතා",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> තන්තුව භාවිතා කරයි.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> තන්තුව භාවිතා කරයි.",
"setup_dns_privacy_3": "<0>සංකේතාංකන ව.නා.ප. (DNS) කෙටුම්පත් සඳහා සහය දක්වන්නේ ඇන්ඩ්‍රොයිඩ් 9 පමණක් බව කරුණාවෙන් සලකන්න. එබැවින් ඔබ වෙනත් මෙහෙයුම් පද්ධති සඳහා අතිරේක මෘදුකාංග ස්ථාපනය කළ යුතුය.</0><0> ඔබට භාවිතා කළ හැකි මෘදුකාංග ලැයිස්තුවක් පහත දැක්‌වේ.</0>",
"setup_dns_privacy_android_2": "<1>DNS-over-HTTPS</1> සහ <1>DNS-over-TLS</1> සඳහා <0>AdGuard for Android</0> සහය දක්වයි.",
"setup_dns_privacy_ios_2": "<1>DNS-over-HTTPS</1> සහ <1>DNS-over-TLS</1> පිහිටුවීම් සඳහා <0>AdGuard for iOS</0> සහය දක්වයි.",
"setup_dns_privacy_other_2": "<0>dnsproxy</0> දන්නා සියලුම ආරක්ෂිත DNS කෙටුම්පත් සඳහා සහය දක්වයි.",
"setup_dns_privacy_other_3": "<1>DNS-over-HTTPS</1> සඳහා <0>dnscrypt-පෙරකලාසිය</0> සහය දක්වයි.",
"setup_dns_privacy_other_4": "<1>DNS-over-HTTPS</1> සඳහා <0>මොසිල්ලා ෆයර්ෆොක්ස්</0> සහය දක්වයි.",
"setup_dns_notice": "ඔබට <1>DNS-over-HTTPS</1> හෝ <1>DNS-over-TLS</1> භාවිතා කිරීම සඳහා AdGuard Home සැකසුම් තුළ <0>සංකේතාංකනය වින්‍යාසගත</0> කිරීමට අවශ්‍ය වේ.",
"setup_dns_notice": "ඔබට <1>DNS-over-HTTPS</1> හෝ <1>DNS-over-TLS</1> භාවිතා කිරීම සඳහා ඇඩ්ගාර්ඩ් හෝම් සැකසුම් තුළ <0>සංකේතාංකනය වින්‍යාසගත</0> කිරීමට අවශ්‍ය වේ.",
"rewrite_add": "DNS නැවත ලිවීමක් එකතු කරන්න",
"rewrite_confirm_delete": "\"{{key}}\" සඳහා DNS නැවත ලිවීම ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?",
"rewrite_desc": "විශේෂිත වසම් නාමයක් සඳහා අභිරුචි ව.නා.ප. ප්‍රතිචාර පහසුවෙන් වින්‍යාසගත කිරීමට ඉඩ දෙයි.",
"rewrite_applied": "නැවත ලිවීමේ නීතිය යොදා ඇත",
"rewrite_hosts_applied": "ධාරක ගොනු නීතිය මගින් නැවත ලියා ඇත",
"dns_rewrites": "DNS නැවත ලිවීම්",
"form_domain": "වසම ඇතුළත් කරන්න",
"form_answer": "අ.ජා. කෙ. (IP) ලිපිනය ‌හෝ වසම ඇතුළත් කරන්න ",
@@ -350,8 +387,8 @@
"blocked_services_saved": "අවහිර කළ සේවාවන් සාර්ථකව සුරකින ලදි",
"blocked_services_global": "ගෝලීය අවහිර කළ සේවාවන් භාවිතා කරන්න",
"blocked_service": "අවහිර කළ සේවාව",
"block_all": "සියල්ල අවහිර කරන්න",
"unblock_all": "සියල්ල අනවහිර කරන්න",
"block_all": "සියල්ල අවහිර",
"unblock_all": "සියල්ල අනවහිර",
"encryption_certificate_path": "සහතිකයේ මාර්ගය",
"encryption_private_key_path": "පුද්ගලික යතුරෙහි මාර්ගය",
"encryption_certificates_source_path": "සහතික ගොනු‌ව‌ෙහි මාර්ගය සකසන්න",
@@ -394,14 +431,16 @@
"network": "ජාලය",
"descr": "විස්තරය",
"whois": "Whois",
"blocked_by_response": "ප්‍රතිචාරය අන්වර්ථ නාමයක් (CNAME) හෝ අ.ජා. කෙ. (IP) මගින් අවහිර කර ඇත",
"blocked_by_response": "ප්‍රතිචාරය අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
"blocked_by_cname_or_ip": "අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
"try_again": "නැවත උත්සහා කරන්න",
"example_rewrite_domain": "මෙම වසම් නාමය සඳහා පමණක් ප්‍රතිචාර නැවත ලියන්න.",
"example_rewrite_wildcard": "<0>example.org</0> සහ එහි සියලුම උප වසම් සඳහා ප්‍රතිචාර නැවත ලියන්න.",
"example_rewrite_wildcard": "<0>example.org</0> සහ එහි සියලුම උප වසම් සඳහා ප්‍රතිචාර නැවත ලියයි.",
"rewrite_domain_name": "වසම් නාමය: අන්. නා. (CNAME) වාර්තාවක් එක් කරන්න",
"disable_ipv6": "IPv6 අබල කරන්න",
"disable_ipv6_desc": "මෙම අංගය සක්‍රීය කර ඇත්නම්, IPv6 ලිපින සඳහා වන සියලුම DNS විමසුම් (AAAA වර්ගය) අතහැර දමනු ලැබේ.",
"disable_ipv6_desc": "මෙම අංගය සක්‍රීය කර ඇත්නම්, IPv6 ලිපින සඳහා වන සියලුම ව.නා.ප. විමසුම් (AAAA වර්ගය) අතහැර දමනු ලැබේ.",
"fastest_addr": "වේගවත්ම අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය",
"autofix_warning_text": "ඔබ \"නිරාකරණය කරන්න\" මත ක්ලික් කළහොත්, AdGuard Home ඔබගේ පද්ධතිය AdGuard Home DNS සේවාදායකය භාවිතා කිරීමට වින්‍යාසගත කරනු ඇත.",
"autofix_warning_text": "ඔබ \"නිරාකරණය කරන්න\" බොත්තම එබුවහොත්, ඔබගේ පද්ධතිය ඇඩ්ගාර්ඩ් හෝම් ව.නා.ප. සේවාදායකය භාවිතා කිරීමට වින්‍යාසගත කරනු ඇත.",
"tags_title": "හැඳුනුම් සංකේත",
"tags_desc": "අනුග්‍රාහකයට අනුරූප වන හැඳුනුම් සංකේත ඔබට තෝරා ගත හැකිය. පෙරහන් නීති වලට හැඳුනුම් සංකේත ඇතුළත් කළ හැකි අතර ඒවා වඩාත් නිවැරදිව යෙදීමට ඔබට ඉඩ සලසයි. <0>වැඩිදුර ඉගෙන ගන්න</0>",
"form_select_tags": "අනුග්‍රාහක හැඳුනුම් සංකේත",
@@ -409,8 +448,11 @@
"check": "පරීක්ෂා කරන්න",
"form_enter_host": "ධාරක නාමයක් ඇතුළත් කරන්න",
"filtered_custom_rules": "අභිරුචි පෙරීමේ නීති මගින් පෙරහන් කරන ලදි",
"choose_from_list": "ලැයිස්තුවෙන් තෝරන්න",
"add_custom_list": "අභිරුචි ලැයිස්තුවක් එකතු කරන්න",
"host_whitelisted": "ධාරකය සුදු ලැයිස්තු ගත කර ඇත",
"check_ip": "අ.ජා. කෙ. (IP) ලිපින: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"check_cname": "අන්. නාමය (CNAME): {{cname}}",
"check_reason": "හේතුව: {{reason}}",
"check_rule": "නීතිය: {{rule}}",
"check_service": "සේවාවෙහි නම: {{service}}",
@@ -420,17 +462,19 @@
"client_blocked": "අනුග්‍රාහකය \"{{ip}}\" සාර්ථකව අවහිර කරන ලදි",
"client_unblocked": "අනුග්‍රාහකය \"{{ip}}\" සාර්ථකව අනවහිර කරන ලදි",
"static_ip": "ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනය",
"static_ip_desc": "AdGuard Home යනු සේවාදායකයක් බැවින් එය නිසි ලෙස ක්‍රියා කිරීමට ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනයක් අවශ්‍ය වේ. එසේ නොමැතිනම්, යම් අවස්ථාවක දී ඔබගේ මාර්ගකාරකය මෙම උපාංගයට වෙනත් අ.ජා. කෙ. ලිපිනයක් ලබා දිය හැකිය.",
"static_ip_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු සේවාදායකයක් බැවින් එය නිසි ලෙස ක්‍රියා කිරීමට ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනයක් අවශ්‍ය වේ. එසේ නොමැතිනම්, යම් අවස්ථාවක දී ඔබගේ මාර්ගකාරකය මෙම උපාංගයට වෙනත් අ.ජා. කෙ. ලිපිනයක් ලබා දිය හැකිය.",
"set_static_ip": "ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනයක් සකසන්න",
"install_static_ok": "සුභ තොරතුරක්! ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය දැනටමත් වින්‍යාසගත කර ඇත",
"install_static_error": "මෙම ජාල අතුරුමුහුණත සඳහා AdGuard Home හට එය ස්වයංක්‍රීයව වින්‍යාසගත කළ නොහැක. කරුණාකර මෙය අතින් කරන්නේ කෙසේද යන්න පිළිබඳ උපදෙස් සොයා ගන්න.",
"install_static_error": "මෙම ජාල අතුරුමුහුණත සඳහා ඇඩ්ගාර්ඩ් හෝම් හට එය ස්වයංක්‍රීයව වින්‍යාසගත කළ නොහැක. කරුණාකර මෙය අතින් කරන්නේ කෙසේද යන්න පිළිබඳ උපදෙස් සොයා ගන්න.",
"install_static_configure": "ගතික අ.ජා. කෙ. (IP) ලිපිනයක් භාවිතා කරන බව අපි අනාවරණය කර ‌ග‌ෙන ඇත්තෙමු - <0>{{ip}}</0>. එය ඔබගේ ස්ථිතික ලිපිනය ලෙස භාවිතා කිරීමට අවශ්‍යද?",
"confirm_static_ip": "AdGuard Home ඔබේ ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනය ලෙස {{ip}} වින්‍යාසගත කරනු ඇත. ඔබට ඉදිරියට යාමට අවශ්‍යද?",
"confirm_static_ip": "ඇඩ්ගාර්ඩ් හෝම් ඔබේ ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනය ලෙස {{ip}} වින්‍යාසගත කරනු ඇත. ඔබට ඉදිරියට යාමට අවශ්‍යද?",
"list_updated": "{{count}} ලැයිස්තුව යාවත්කාලීන කරන ලදි",
"list_updated_plural": "ලැයිස්තු {{count}} ක් යාවත්කාලීන කරන ලදි",
"dnssec_enable": "DNSSEC සබල කරන්න",
"validated_with_dnssec": "DNSSEC සමඟ තහවුරු කර ඇත",
"all_queries": "සියලුම විමසුම්",
"show_blocked_responses": "අවහිර කර ඇත",
"show_whitelisted_responses": "සුදු ලැයිස්තුගත කර ඇත",
"blocked_safebrowsing": "ආරක්ෂිත සෙවීම මගින් අවහිර කරන ලද",
"blocked_adult_websites": "අවහිර කළ වැඩිහිටි වෙබ් අඩවි",
"blocked_threats": "අවහිර කළ තර්ජන",
@@ -439,5 +483,21 @@
"rewritten": "නැවත ලියන ලද",
"safe_search": "ආරක්ෂිත සෙවීම",
"blocklist": "අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුව",
"milliseconds_abbreviation": "මිලි තත්."
"milliseconds_abbreviation": "මිලි තත්.",
"enter_cache_ttl_min_override": "අවම පව. කා. (TTL) ඇතුළත් කරන්න",
"enter_cache_ttl_max_override": "උපරිම පව. කා. (TTL) ඇතුළත් කරන්න",
"filter_category_general": "පොදු",
"filter_category_security": "ආරක්ෂණ",
"filter_category_regional": "ප්‍රාදේශ්‍රීය",
"filter_category_other": "වෙනත්",
"filter_category_general_desc": "බොහෝ උපාංගවල ලුහුබැඳීම් සහ දැන්වීම් අවහිර කරන ලැයිස්තු",
"filter_category_security_desc": "අනිෂ්ට මෘදුකාංග, තතුබෑම් හෝ වංචනික වසම් අවහිර කිරීමට විශේෂ වූ ලැයිස්තු",
"filter_category_regional_desc": "ප්‍රාදේශ්‍රීය දැන්වීම් සහ ලුහුබැඳීමේ සේවාදායකයන් කෙරෙහි අවධානය යොමු කරන ලැයිස්තු",
"filter_category_other_desc": "වෙනත් අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තු",
"setup_config_to_enable_dhcp_server": "ග.ධා.වි.කෙ. සේවාදායකය සක්‍රීය කිරීම සඳහා වින්‍යාසය පිහිටුවන්න",
"original_response": "මුල් ප්‍රතිචාරය",
"click_to_view_queries": "විමසුම් බැලීමට ඔබන්න",
"port_53_faq_link": "53 කවුළුව බොහෝ විට \"DNSStubListener\" හෝ \"systemd-resolved\" සේවාවන් භාවිතයට ගනු ලැබේ. කරුණාකර මෙය විසඳන්නේ කෙසේද යන්න පිළිබඳ <0>මෙම උපදෙස්</0> කියවන්න.",
"adg_will_drop_dns_queries": "ඇඩ්ගාර්ඩ් හෝම් විසින් මෙම අනුග්‍රාහකයේ සියලුම ව.නා.ප. විමසුම් අතහැර දමනු ඇත.",
"experimental": "පරීක්ෂණාත්මක"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Nastavenie klienta",
"example_upstream_reserved": "Môžete zadať DNS upstream <0>pre konkrétnu doménu (domény)</0>",
"example_upstream_comment": "Môžete napísať komentár",
"upstream_parallel": "Používať paralelné dopyty na zrýchlenie súčasným dopytovaním všetkých serverov",
"parallel_requests": "Paralelné dopyty",
"load_balancing": "Vyrovnávanie záťaže",
@@ -114,7 +115,7 @@
"average_processing_time": "Priemerný čas spracovania",
"average_processing_time_hint": "Priemerný čas spracovania DNS dopytu v milisekundách",
"block_domain_use_filters_and_hosts": "Blokovať domény pomocou filtrov a zoznamov adries",
"filters_block_toggle_hint": "Pravidlá blokovania môžete nastaviť v nastaveniach <a href='#filters'>Filtre</a>.",
"filters_block_toggle_hint": "Pravidlá blokovania môžete nastaviť v nastaveniach <a>Filtre</a>.",
"use_adguard_browsing_sec": "Použiť AdGuard službu Bezpečného prehliadania",
"use_adguard_browsing_sec_hint": "AdGuard Home skontroluje, či je doména na čiernej listine službou Bezpečného prehliadania. Použije API vyhľadávania priateľské k ochrane súkromia na vykonanie kontroly: na server je poslaná iba krátka predpona názvu domény SHA256 hash.",
"use_adguard_parental": "Použiť AdGuard službu Rodičovská kontrola",
@@ -248,14 +249,17 @@
"blocking_ipv6": "Blokovanie IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Prevziať .mobileconfig pre DNS-over-HTTPS",
"download_mobileconfig_dot": "Prevziať .mobileconfig pre DNS-over-TLS",
"plain_dns": "Obyčajné DNS",
"form_enter_rate_limit": "Zadajte rýchlostný limit",
"rate_limit": "Rýchlostný limit",
"edns_enable": "Povoliť klientsku podsiete EDNS",
"edns_cs_desc": "Ak je zapnuté, program AdGuard Home bude odosielať podsiete klientov na DNS servery.",
"rate_limit_desc": "Počet požiadaviek za sekundu, ktoré môže jeden klient vykonať (nastavenie na hodnotu 0 znamená neobmedzene)",
"blocking_ipv4_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti A",
"blocking_ipv6_desc": "IP adresa, ktorá sa má vrátiť v prípade blokovanej žiadosti AAAA",
"blocking_mode_default": "Predvolená hodnota: Odpovedať pomocou REFUSED, ak je blokovaný pravidlom v štýle Adblock; odpovedať pomocou IP adresy určenej v pravidle, ak je blokovaná pravidlom v štýle /etc/hosts",
"blocking_mode_default": "Predvolené: Odpovedať nulovou adresou IP (0,0.0.0 pre A; :: pre AAAA), keď je blokovaná pravidlom v štýle Adblock; odpovedať IP adresou uvedenou v pravidle, k je blokovaná pravidlom v štýle /etc/hosts",
"blocking_mode_refused": "REFUSED: Odpovedať kódom REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Odpovedať kódom NXDOMAIN",
"blocking_mode_null_ip": "Null IP: Odpoveď s nulovou IP adresou (0.0.0.0 pre A; :: pre AAAA)",
@@ -413,7 +417,8 @@
"dns_privacy": "DNS súkromie",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Použiť <1>{{address}}</1> reťazec.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Použiť <1>{{address}}</1> reťazec.",
"setup_dns_privacy_3": "<0>Upozorňujeme, že šifrované protokoly DNS sú podporované iba v systéme Android 9. Preto je potrebné nainštalovať ďalší softvér pre iné operačné systémy.</0><0>Tu je zoznam softvéru, ktorý môžete používať.</0>",
"setup_dns_privacy_3": "<0>Tu je zoznam softvéru, ktorý môžete použiť.</0>",
"setup_dns_privacy_4": "Na zariadení so systémom iOS 14 alebo macOS Big Sur si môžete stiahnuť špeciálny súbor „.mobileconfig“, ktorý do nastavení DNS pridáva servery <highlight> DNS-over-HTTPS </highlight> alebo <highlight> DNS-over-TLS </highlight>.",
"setup_dns_privacy_android_1": "Android 9 podporuje DNS-over-TLS natívne. Ak ho chcete konfigurovať, prejdite na Nastavenia → Sieť a internet → Pokročilé → Súkromné DNS a zadajte tam meno Vašej domény.",
"setup_dns_privacy_android_2": "<0>AdGuard pre Android</0> podporuje <1>DNS-over-HTTPS</1> a <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> pridáva <1>DNS-over-HTTPS</1> podporu pre Android.",
@@ -526,6 +531,7 @@
"check_reason": "Dôvod: {{reason}}",
"check_rule": "Pravidlo: {{rule}}",
"check_service": "Meno služby: {{service}}",
"service_name": "Názov služby",
"check_not_found": "Nenašlo sa vo Vašom zozname filtrov",
"client_confirm_block": "Naozaj chcete zablokovať klienta \"{{ip}}\"?",
"client_confirm_unblock": "Naozaj chcete odblokovať klienta \"{{ip}}\"?",
@@ -560,10 +566,11 @@
"cache_size_desc": "Veľkosť DNS cache (v bajtoch)",
"cache_ttl_min_override": "Prepísať minimálne TTL",
"cache_ttl_max_override": "Prepísať maximálne TTL",
"enter_cache_size": "Zadať veľkosť cache",
"enter_cache_ttl_min_override": "Zadať minimálne TTL",
"enter_cache_ttl_max_override": "Zadať maximálne TTL",
"cache_ttl_max_override_desc": "Prepíše hodnotu TTL (maximálnu) prijatú z upstream servera",
"enter_cache_size": "Zadať veľkosť cache (v bajtoch)",
"enter_cache_ttl_min_override": "Zadať minimálne TTL (v sekundách)",
"enter_cache_ttl_max_override": "Zadať maximálne TTL (v sekundách)",
"cache_ttl_min_override_desc": "Predĺži krátke hodnoty TTL (v sekundách) prijaté od servera typu upstream pri ukladaní odpovedí DNS do cache pamäte",
"cache_ttl_max_override_desc": "Nastaví maximálnu hodnotu TTL (v sekundách) pre záznamy v DNS cache pamäti",
"ttl_cache_validation": "Minimálna hodnota TTL cache musí byť menšia alebo rovná maximálnej hodnote",
"filter_category_general": "Všeobecné",
"filter_category_security": "Bezpečnosť",
@@ -578,5 +585,6 @@
"click_to_view_queries": "Kliknite pre zobrazenie dopytov",
"port_53_faq_link": "Port 53 je často obsadený službami \"DNSStubListener\" alebo \"systemd-resolved\". Prečítajte si <0>tento návod</0> o tom, ako to vyriešiť.",
"adg_will_drop_dns_queries": "AdGuard Home zruší všetky DNS dopyty od tohto klienta.",
"client_not_in_allowed_clients": "Klient nemá povolenie, pretože sa nenachádza v zozname „Povolení klienti“.",
"experimental": "Experimentálne"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Nastavitve odjemalca",
"example_upstream_reserved": "lahko določite nazgornji DNS <0>za določene domene</0>",
"example_upstream_comment": "Lahko določite komentar",
"upstream_parallel": "Uporabite vzporedne zahteve za pospešitev reševanja s hkratnim poizvedovanjem vseh gorvodnih strežnikov",
"parallel_requests": "Vzporedne zahteve",
"load_balancing": "Uravnavanje obremenitve",
@@ -114,7 +115,7 @@
"average_processing_time": "Povprečni čas obdelave",
"average_processing_time_hint": "Povprečni čas v milisekundah pri obdelavi zahteve DNS",
"block_domain_use_filters_and_hosts": "Onemogoči domene s filtri in gostiteljskimi datotekami",
"filters_block_toggle_hint": "Pravila zaviranja lahko nastavite v nastavitvah <a href='#filters'>Filtri</a>.",
"filters_block_toggle_hint": "Pravila zaviranja lahko nastavite v nastavitvah <a>Filtri</a>.",
"use_adguard_browsing_sec": "Uporabi AdGuardovo spletno storitev 'Varnost brskanja'",
"use_adguard_browsing_sec_hint": "AdGuard Home bo preveril s spletno storitivijo 'Varnost brskanja', ali je domena na seznamu nedovoljenih. Za preverjanje bo uporabila za zasebnost prijazno API povezavo: strežniku se pošlje le kratka predpona imena domene SHA256 hash.",
"use_adguard_parental": "Uporabi AdGuardovo spletno storitev 'Starševski nadzor'",
@@ -248,6 +249,8 @@
"blocking_ipv6": "Onemogočanje IPv6",
"dns_over_https": "DNS-prek-HTTPS",
"dns_over_tls": "DNS-prek-TLS",
"download_mobileconfig_doh": "Prenos .mobileconfig za DNS-preko-HTTPS",
"download_mobileconfig_dot": "Prenos .mobileconfig za DNS-preko-TLS",
"plain_dns": "Navadni DNS",
"form_enter_rate_limit": "Vnesite omejitev hitrosti",
"rate_limit": "Omejitev hitrosti",
@@ -256,7 +259,7 @@
"rate_limit_desc": "Število zahtev na sekundo, ki jih sme narediti posamezen odjemalec (nastavitev na 0 pomeni neomejeno)",
"blocking_ipv4_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo A",
"blocking_ipv6_desc": "IP naslov, ki mora biti vrnjen za onemogočeno zahtevo AAAA",
"blocking_mode_default": "Privzeto: odziv z REFUSED, kadar je onemogočen s slogom pravila zaviranja oglasov; odziv z navedenim naslovom IP v pravilu, kadar je onemogočen s pravilom /etc/gostitelji",
"blocking_mode_default": "Privzeto: odgovori z ničelnim naslovom IP (0.0.0.0 za A; :: za AAAA), ko je onemogočen s pravilom v slogu Adblocka; odgovor z naslovom IP, določenim v pravilu, ko je onemogočen s pravilom /etc/hosts",
"blocking_mode_refused": "REFUSED: Odziv s kodo REFUSED",
"blocking_mode_nxdomain": "NXDOMAIN: Odziv s kodo NXDOMAIN",
"blocking_mode_null_ip": "Prazen IP: Odziv z ničelnim naslovom IP (0.0.0.0 za A; :: za AAAA)",
@@ -414,7 +417,8 @@
"dns_privacy": "Zasebnost DNS",
"setup_dns_privacy_1": "<0>DNS-prek-TLS:</0> Uporabite niz <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-prek-HTTPS:</0> Uporabite niz <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Upoštevajte, da so šifrirani protokoli DNS podprti samo v sistemu Android 9. Zato morate namestiti dodatni program za druge operacijske sisteme.</0><0>Tu je seznam programov, ki jih lahko uporabite..</0>",
"setup_dns_privacy_3": "<0>Tu je seznam programov, ki jo lahko uporabite.</0>",
"setup_dns_privacy_4": "Na napravo iOS 14 ali macOS Big Sur lahko prenesete posebno datoteko '.mobileconfig', ki v nastavitve DNS doda strežnike <highlight>DNS-preko-HTTPS</highlight> ali <highlight>DNS-preko-TLS</highlight>.",
"setup_dns_privacy_android_1": "Android 9 izvirno podpira DNS-prek-TLS. Če ga želite konfigurirati, pojdite v Nastavitve → Omrežje in internet → Napredno → Zasebni DNS, in tam vnesite svoje ime domene.",
"setup_dns_privacy_android_2": "<0>AdGuard za Android</0> podpira <1>DNS-prek-HTTPS</1> in <1>DNS-prek-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> doda podporo <1>DNS-prek-HTTPS</1> za Android.",
@@ -527,6 +531,7 @@
"check_reason": "Razlog: {{reason}}",
"check_rule": "Pravilo: {{rule}}",
"check_service": "Ime storitve: {{service}}",
"service_name": "Ime storitve",
"check_not_found": "Ni najdeno na vašem seznamu filtrov",
"client_confirm_block": "Ali ste prepričani, da želite onemogočiti odjemalca \"{{ip}}\"?",
"client_confirm_unblock": "Ali ste prepričani, da želite omogočiti odjemalca \"{{ip}}\"?",
@@ -561,11 +566,11 @@
"cache_size_desc": "Velikost predpomnilnika DNS (v bajtih)",
"cache_ttl_min_override": "Preglasi najmanjši TTL",
"cache_ttl_max_override": "Preglasi največji TTL",
"enter_cache_size": "Vnesite velikost predpomnilnika",
"enter_cache_ttl_min_override": "Vnesite najmanjši TTL",
"enter_cache_ttl_max_override": "Vnesite največji TTL",
"cache_ttl_min_override_desc": "Vrednost preglasovanja TTL (najmanjša), prejeta od zgornjega strežnika",
"cache_ttl_max_override_desc": "Vrednost preglasovanja TTL (največja), prejeta od zgornjega strežnika",
"enter_cache_size": "Vnesite velikost predpomnilnika (v bajtih)",
"enter_cache_ttl_min_override": "Vnesite najmanjši TTL (v sekundah)",
"enter_cache_ttl_max_override": "Vnesite največji TTL (v sekundah)",
"cache_ttl_min_override_desc": "Razširite kratke vrednosti časa v živo (v sekundah), ki jih prejme strežnik za predpomnjenje, ko predpomni odzive DNS",
"cache_ttl_max_override_desc": "Nastavi največjo vrednost časa v živo (v sekundah) za vnose v predpomnilnik DNS",
"ttl_cache_validation": "Najmanjša vrednost predpomnilnika TTL mora biti manjša ali enaka največji vrednosti",
"filter_category_general": "Splošno",
"filter_category_security": "Varnost",
@@ -580,5 +585,6 @@
"click_to_view_queries": "Kliknite za prikaz poizvedb",
"port_53_faq_link": "Vrata 53 pogosto zasedajo storitve 'DNSStubListener' ali 'Sistemsko razrešene storitve'. Preberite <0>to navodilo</0> o tem, kako to rešiti.",
"adg_will_drop_dns_queries": "AdGuard Home bo izpustil vse poizvedbe DNS iz tega odjemalca.",
"client_not_in_allowed_clients": "Odjemalec ni dovoljen, ker ga ni na seznamu \"Dovoljeni odjemalci\".",
"experimental": "Eksperimentalno"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "Postavke klijenta",
"example_upstream_reserved": "možete odrediti DNS upstream <0>za određene domene</0>",
"example_upstream_comment": "Možete upisati komentar",
"upstream_parallel": "Koristite paralelne zahteve da ubrzate rešavanje istovremenim zahtevanjem svih servera",
"parallel_requests": "Paralelni zahtevi",
"load_balancing": "Load-balancing",
@@ -114,7 +115,7 @@
"average_processing_time": "Prosečno vreme obrade",
"average_processing_time_hint": "Prosečno vreme u milisekundama za obradu DNS zahteva",
"block_domain_use_filters_and_hosts": "Blokiraj domene koristeći filtere i hosts datoteke",
"filters_block_toggle_hint": "Možete postaviti pravila blokiranja u <a href='#filters'>Filters</a> postavkama.",
"filters_block_toggle_hint": "Možete postaviti pravila blokiranja u <a>Filters</a> postavkama.",
"use_adguard_browsing_sec": "Koristi AdGuard-ovu uslugu bezbednog pregledanja",
"use_adguard_browsing_sec_hint": "AdGuard Home će proveriti da li je domen blokiran od strane usluge za bezbednosno pregledanje. Koristiće prijateljski API privatni pregled da izvrši proveru. Samo će se kratak prefiks domena SHA256 hash poslati na server.",
"use_adguard_parental": "Koristi AdGuard-ovu uslugu roditeljske kontrole",
@@ -132,6 +133,8 @@
"encryption_settings": "Postavke šifrovanja",
"dhcp_settings": "DHCP postavke",
"upstream_dns": "Upstream DNS serveri",
"upstream_dns_help": "Unesite adrese servera, jednu po redu. <a>Saznajte više</a> o konfigurisanju upstream DNS servera.",
"upstream_dns_configured_in_file": "Konfiguriši u {{path}}",
"test_upstream_btn": "Testiraj upstreams",
"upstreams": "Upstreams",
"apply_btn": "Primeni",
@@ -185,6 +188,7 @@
"example_upstream_regular": "uobičajeno DNS (preko UDP)",
"example_upstream_dot": "šifrovano <0>DNS-over-TLS</0>",
"example_upstream_doh": "šifrovano <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "šifrovano <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "možete koristiti <0>DNS brojeve</0> za <1>DNSCrypt</1> ili <2>DNS-over-HTTPS</2>",
"example_upstream_tcp": "uobičajeni DNS (preko TCP)",
"all_lists_up_to_date_toast": "Sve liste su već ažurirane",
@@ -193,6 +197,10 @@
"dns_test_not_ok_toast": "Server \"{{key}}\": se ne može koristiti. Proverite da li ste ga ispravno uneli",
"unblock": "Odblokiraj",
"block": "Blokiraj",
"disallow_this_client": "Zabrani ovaj klijent",
"allow_this_client": "Dozvoli ovaj klijent",
"block_for_this_client_only": "Blokiraj samo za ovaj klijent",
"unblock_for_this_client_only": "Odblokiraj samo za ovaj klijent",
"time_table_header": "Vreme",
"date": "Datum",
"domain_name_table_header": "Ime domena",
@@ -234,20 +242,25 @@
"blocking_mode": "Način blokiranja",
"default": "Podrazumevano",
"nxdomain": "NXDOMAIN",
"refused": "Odbijeno",
"null_ip": "Null IP",
"custom_ip": "Prilagođeni IP",
"blocking_ipv4": "Blokiranje IPv4",
"blocking_ipv6": "Blokiranje IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "Preuzimanja",
"download_mobileconfig_dot": "Preuzmi .mobileconfig za DNS-over-TLS",
"plain_dns": "Plain DNS",
"form_enter_rate_limit": "Unesite ograničenje brzine",
"rate_limit": "Ograničenje brzine",
"edns_enable": "Uključi EDNS Client Subnet",
"edns_cs_desc": "Ako je uključeno, AdGuard Home će slati klijente na DNS servere.",
"rate_limit_desc": "Broj zahteva po sekundi koje pojedinačni klijent dozvoljava (0: neograničeno)",
"blocking_ipv4_desc": "IP adresa koja će biti vraćena za blokirane zahteve",
"blocking_ipv6_desc": "IP adresa koja će biti vraćena za blokirane AAAA zahteve",
"blocking_mode_default": "Podrazumevano: Odgovara sa REFUSED kada je blokirano od Adblock-style pravila; odgovara sa IP adresom koja je određena u pravilu kada je blokiran od /etc/hosts-style pravila",
"blocking_mode_refused": "Odbijeno: Odgovor sa kodom odbijanja",
"blocking_mode_nxdomain": "NXDOMAIN: Odgovara sa NXDOMAIN kodom",
"blocking_mode_null_ip": "Null IP: Odgovara sa zero IP adresom (0.0.0.0 za A; :: za AAAA)",
"blocking_mode_custom_ip": "Prilagođeni IP: Odgovara sa ručno podešenom IP adresom",
@@ -324,6 +337,8 @@
"encryption_https_desc": "Ako je HTTPS port konfigurisan, AdGuard Home administratorskom okruženju će se moći pristupati preko HTTPS, a to će takođe omogućiti DNS-over-HTTPS na '/dns-query' lokaciji.",
"encryption_dot": "DNS-over-TLS port",
"encryption_dot_desc": "Ako je ovaj port konfigurisan, AdGuard Home će pokretati DNS-over-TLS server na ovom portu.",
"encryption_doq": "DNS-over-QUIC port",
"encryption_doq_desc": "Ako je ovaj port konfigurisan, AdGuard Home će pokrenuti DNS-over-QUIC server na tom portu. To je eksperiment i možda neće biti stabilno. Takođe, u ovom trenutku ne postoji puno klijenata koji ovo podržavaju.",
"encryption_certificates": "Sertifikati",
"encryption_certificates_desc": "Da biste koristili šifrovanje, morate obezbediti važeći lanac SSL sertifikata za vaš domen. Besplatan sertifikat možete nabaviti na <0>{{link}}</0> ili ga možete kupiti od nekog od pouzdanih izdavalaca sertifikata.",
"encryption_certificates_input": "Kopirajte/nalepite vaše PEM-kodirane sertifikate ovde.",
@@ -402,7 +417,8 @@
"dns_privacy": "DNS privatnost",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> koristi <1>{{address}}</1> string.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> koristi <1>{{address}}</1> string.",
"setup_dns_privacy_3": "<0>Imajte na umu da su protokoli šifrovanog DNS-a podržani samo od Androida 9. Biće potrebno da instalirate dodatni softver za druge operativne sisteme.</0><0>Ovde je spisak softvera koje možete koristiti.</0>",
"setup_dns_privacy_3": "<0>Ovde je lista softvera koje možete koristiti.</0>",
"setup_dns_privacy_4": "Na iOS 14 ili macOS Big Sur uređaju možete preuzeti posebnu '.mobileconfig' datotteku koja dodaje <highlight>DNS-over-HTTPS</highlight> ili <highlight>DNS-over-TLS</highlight> servere u DNS postavke.",
"setup_dns_privacy_android_1": "Android 9 podržava DNS-over-TLS. Za konfiguraciju, idite u postavke → mreža i internet → Napredno → Privatni DNS i tamo unesite ime vašeg domena.",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> podržava <1>DNS-over-HTTPS</1> i <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> dodaje <1>DNS-over-HTTPS</1> podršku za Android.",
@@ -515,6 +531,7 @@
"check_reason": "Razlog: {{reason}}",
"check_rule": "Pravilo: {{rule}}",
"check_service": "Ime usluge: {{service}}",
"service_name": "Ime usluge",
"check_not_found": "Nije pronađeno na vašoj listi filtera",
"client_confirm_block": "Jeste li sigurni da želite da blokirate klijent \"{{ip}}\"?",
"client_confirm_unblock": "Jeste li sigurni da želite da odblokirate klijent \"{{ip}}\"?",
@@ -552,7 +569,9 @@
"enter_cache_size": "Unesite veličinu predmemorije",
"enter_cache_ttl_min_override": "Unesite najmanji TTL",
"enter_cache_ttl_max_override": "Unesite najveći TTL",
"cache_ttl_min_override_desc": "Prepiši TTL vrednost (minimum) dobijen od apstrim servera. Ova vrednost ne može biti veća od 3600 (1 sat)",
"cache_ttl_max_override_desc": "Prepiši TTL vrednost (maksimum) dobijen od apstrim servera",
"ttl_cache_validation": "Minimalna TTL vrednost mora biti manja ili jednaka najvišij vrednosti",
"filter_category_general": "Opšte",
"filter_category_security": "Bezbednost",
"filter_category_regional": "Region",
@@ -564,5 +583,8 @@
"setup_config_to_enable_dhcp_server": "Podesite konfiguraciju kako biste omogućili DHCP server",
"original_response": "Izvorni odgovor",
"click_to_view_queries": "Kliknite da pogledate zahteve",
"port_53_faq_link": "Port 53 je najčešće zauzet od \"DNSStubListener\" ili \"systemd-resolved\" usluga. Pročitajte <0>ovo uputstvo</0> kako da to rešite."
"port_53_faq_link": "Port 53 je najčešće zauzet od \"DNSStubListener\" ili \"systemd-resolved\" usluga. Pročitajte <0>ovo uputstvo</0> kako da to rešite.",
"adg_will_drop_dns_queries": "AdGuard Home će odbacivati sve DNS unose od ovog klijenta.",
"client_not_in_allowed_clients": "Klijent nije dozvoljen zato što se ne nalazi na spisku dozvoljenih klijenata.",
"experimental": "Eksperimentalno"
}

View File

@@ -90,7 +90,7 @@
"average_processing_time": "Genomsnittlig processtid",
"average_processing_time_hint": "Genomsnittlig processtid i millisekunder för DNS-förfrågning",
"block_domain_use_filters_and_hosts": "Blockera domäner med filter- och värdfiler",
"filters_block_toggle_hint": "Du kan ställa in egna blockerings regler i <a href='#filters'>Filterinställningar</a>.",
"filters_block_toggle_hint": "Du kan ställa in egna blockerings regler i <a>Filterinställningar</a>.",
"use_adguard_browsing_sec": "Amvänd AdGuards webbservice för surfsäkerhet",
"use_adguard_browsing_sec_hint": "AdGuard Home kommer att kontrollera om en domän är svartlistad i webbservicens surfsäkerhet. Med en integritetsvänlig metod görs en API-lookup för att kontrollera : endast en kort prefix i domännamnet SHA256 hash skickas till servern.",
"use_adguard_parental": "Använda AdGuards webbservice för färäldrakontroll",
@@ -314,7 +314,6 @@
"dns_privacy": "DNS-Integritet",
"setup_dns_privacy_1": "<0>DNS-över-TLS:</0> Använd: <1>{{address}}</1>",
"setup_dns_privacy_2": "<0>DNS-över-HTTPS:</0> Använd: <1>{{address}}</1>",
"setup_dns_privacy_3": "<0>Notera att krypterade DNS-protokoll endast stöds på Android 9. Du behöver därför installera ytterligare mjukvara för andra operativsystem.</0><0>Här är en lista över program du kan använda.</0>",
"setup_dns_privacy_android_1": "Android 9 har inbyggt stöd för DNS-över-TLS. Konfigurera och uppge domännamn under Inställningar → Nätverk & Internet → Avancerat → Privat DNS.",
"setup_dns_privacy_android_2": "<0>AdGuard för Android</0> stödjer <1>DNS-över-HTTPS</1> samt <1>DNS-över-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> lägger till stöd för <1>DNS-ÖVER-HTTPS</1> till Android.",

View File

@@ -95,7 +95,7 @@
"average_processing_time": "เวลาประมวลผลโดยเฉลี่ย",
"average_processing_time_hint": "เวลาเฉลี่ยเป็นมิลลิวินาทีในการประมวลผลคำขอ DNS",
"block_domain_use_filters_and_hosts": "ปิดกั้นโดเมนโดยใช้ตัวกรองและไฟล์โฮสต์",
"filters_block_toggle_hint": "คุณสามารถตั้งค่ากฎการปิดกั้นในการตั้งค่า<a href='#filters'>ตัวกรอง</a>",
"filters_block_toggle_hint": "คุณสามารถตั้งค่ากฎการปิดกั้นในการตั้งค่า<a>ตัวกรอง</a>",
"use_adguard_browsing_sec": "ใช้บริการเว็บการรักษาความปลอดภัยการเรียกดู AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home จะตรวจสอบว่าโดเมนอยู่ในรายการที่ไม่อนุญาตโดยเว็บเซอร์วิสความปลอดภัยการสืบค้นหรือไม่ จะใช้ API การค้นหาที่เป็นมิตรกับข้อมูลส่วนบุคคลเพื่อทำการตรวจสอบ: มีการส่งคำนำหน้าสั้น ๆ ของชื่อโดเมน SHA256 แฮชไปยังเซิร์ฟเวอร์",
"use_adguard_parental": "ใช้บริการเว็บการควบคุมโดยผู้ปกครองของ AdGuard",
@@ -193,7 +193,6 @@
"edns_cs_desc": "หากเปิดใช้งาน AdGuard Home จะส่งซับเน็ตของไคลเอนต์ไปยังเซิร์ฟเวอร์ DNS",
"blocking_ipv4_desc": "ที่อยู่ IP ที่จะส่งคืนสำหรับคำขอที่ถูกปิดกั้น",
"blocking_ipv6_desc": "ที่อยู่ IP ที่จะส่งคืนสำหรับคำขอ AAAA ที่ถูกปิดกั้น",
"blocking_mode_default": "เริ่มต้น: ตอบสนองด้วย REFUSED เมื่อถูกปิดกั้นโดยกฎสไตล์ปิดกั้นโฆษณา; ตอบกลับด้วยที่อยู่ IP ที่ระบุในกฎเมื่อถูกปิดกั้นโดยกฎ /etc/hosts-hosts",
"blocking_mode_nxdomain": "NXDOMAIN: ตอบสนองด้วยรหัส NXDOMAIN",
"blocking_mode_null_ip": "Null IP: ตอบกลับด้วยที่อยู่เลขศูนย์ IP (0.0.0.0 สำหรับ A; :: สำหรับ AAAA)",
"blocking_mode_custom_ip": "IP ที่กำหนดเอง: ตอบกลับด้วยที่อยู่ IP ที่ตั้งค่าด้วยตนเอง",

View File

@@ -1,6 +1,7 @@
{
"client_settings": "İstemci ayarları",
"example_upstream_reserved": "<0>Belirli alan adları için</0> DNS üst sunucusu tanımlayabilirsiniz.",
"example_upstream_comment": "Bir yorum belirtebilirsiniz",
"upstream_parallel": "Tüm üst sunucuları eş zamanlı sorgulayarak çözümü hızlandırmak için paralel sorguları kullan",
"parallel_requests": "Paralel istekler",
"bootstrap_dns": "DNS Önyükleme sunucuları",
@@ -86,7 +87,7 @@
"refresh_statics": "İstatistikleri yenile",
"dns_query": "DNS Sorguları",
"blocked_by": "<0>Filtreler tarafından engellendi</0>",
"stats_malware_phishing": "Zararlı yazılım/kimlik hırsızlığı engellendi",
"stats_malware_phishing": "Kötü amaçlı yazılım/kimlik avı engellendi",
"stats_adult": "Yetişkin içerikli site engellendi",
"stats_query_domain": "En fazla sorgulanan alan adları",
"for_last_24_hours": "son 24 saat içindekiler",
@@ -109,7 +110,7 @@
"average_processing_time": "Ortalama işlem süresi",
"average_processing_time_hint": "Bir DNS isteğinin mili saniye cinsinden ortalama işlem süresi",
"block_domain_use_filters_and_hosts": "Filtreleri ve hosts listelerini kullanarak alan adlarını engelle",
"filters_block_toggle_hint": "<a href='#filters'>Filtreler</a> sayfasından engelleme kurallarını ayarlayabilirsiniz.",
"filters_block_toggle_hint": "<a>Filtreler</a> sayfasından engelleme kurallarını ayarlayabilirsiniz.",
"use_adguard_browsing_sec": "AdGuard gezinti koruması web hizmetini kullan",
"use_adguard_browsing_sec_hint": "AdGuard Home, alan adının gezinti koruması web hizmetinde kara listede olup olmadığını kontrol edecek. Kontrol işlemi gizlilik dostu API kullanılarak yapılacak: yalnızca alan adının kısa bir ön eki SHA256 ile şifrelenip sunucuya gönderilecek.",
"use_adguard_parental": "AdGuard ebeveyn kontrolü web hizmetini kullan",
@@ -127,6 +128,8 @@
"encryption_settings": "Şifreleme ayarları",
"dhcp_settings": "DHCP ayarları",
"upstream_dns": "Üst DNS sunucusu",
"upstream_dns_help": "Her satıra bir sunucu adresi girin. Üst DNS sunucularını yapılandırma hakkında <a>daha fazla bilgi edinin</a>.",
"upstream_dns_configured_in_file": "{{path}} içinde yapılandırıldı",
"test_upstream_btn": "Üst sunucuyu test et",
"upstreams": "Upstreams",
"apply_btn": "Uygula",
@@ -178,8 +181,9 @@
"example_comment_hash": "# Bir yorum daha ekledim",
"example_regex_meaning": "belirtilen düzenli ifadelerle eşleşen alan adlarına erişimi engelle",
"example_upstream_regular": "normal DNS (UDP üzerinden)",
"example_upstream_dot": "<0>DNS-over-TLS</0> şifrelemesi",
"example_upstream_doh": "<0>DNS-over-HTTPS</0> şifrelemesi",
"example_upstream_dot": "şifrelenmiş <0>DNS-over-TLS</0>",
"example_upstream_doh": "şifrelenmiş <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "şifrelenmiş <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "<1>DNSCrypt</1> veya <2>DNS-over-HTTPS</2> çözücüleri için <0>DNS Damgaları</0> kullanabilirsiniz.",
"example_upstream_tcp": "normal DNS (TCP üzerinden)",
"all_lists_up_to_date_toast": "Tüm listeler zaten güncel",
@@ -237,13 +241,16 @@
"blocking_ipv4": "IPv4 engelleme",
"blocking_ipv6": "IPv6 engelleme",
"dns_over_https": "DNS üzerinden HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "DNS-over-HTTPS için .mobileconfig dosyasını indir",
"download_mobileconfig_dot": "DNS-over-TLS için .mobileconfig dosyasını indir",
"form_enter_rate_limit": "Sıklık limitini girin",
"rate_limit": "Sıklık limiti",
"edns_enable": "EDNS İstemci Alt Ağını Etkinleştir",
"edns_cs_desc": "Etkinleştirilirse, AdGuard Home, istemcilerin alt ağlarını DNS sunucularına gönderir.",
"blocking_ipv4_desc": "Engellenen bir A isteği için geri döndürülecek IP adresi",
"blocking_ipv6_desc": "Engellenen bir AAAA isteği için geri döndürülecek IP adresi",
"blocking_mode_default": "Varsayılan: Reklam Engelleme tarzı kural tarafından engellendiğinde REDDEDİLDİ ile yanıt verin; /etc/hosts-style kuralı tarafından engellendiğinde kuralda belirtilen IP adresiyle yanıt verin",
"blocking_mode_default": "Varsayılan: Reklam engelleme stili kuralı tarafından engellendiğinde sıfır IP adresiyle (A için 0.0.0.0; AAAA için) yanıt verin; /etc/hosts-style kuralı tarafından engellendiğinde, kuralda belirtilen IP adresiyle yanıt verin",
"blocking_mode_refused": "REFUSED: REFUSED kod ile yanıt verin",
"blocking_mode_nxdomain": "NXDOMAIN: NXDOMAIN koduyla yanıt",
"blocking_mode_null_ip": "Boş IP: Sıfır IP adresiyle yanıt verin (A için 0.0.0.0; :: AAAA için)",
@@ -319,8 +326,10 @@
"encryption_redirect_desc": "Etkinleştirirseniz AdGuard Home sizi HTTP yerine HTTPS adreslerine yönlendirir.",
"encryption_https": "HTTPS bağlantı noktası",
"encryption_https_desc": "Eğer HTTPS portu yapılandırılmışsa, AdGuard Home yönetici arayüzü HTTPS ile ulaşılabilir olacak, ayrıca '/dns-query' üzerinden DNS-over-HTTPS hizmeti de çalışacak.",
"encryption_dot": "DNS-over-TLS portu",
"encryption_dot": "DNS-over-TLS bağlantı noktası",
"encryption_dot_desc": "Eğer bu portu yapılandırırsanız AdGuard Home bu port üzerinden DNS-over-TLS sunucusu çalıştıracak.",
"encryption_doq": "DNS-over-QUIC bağlantı noktası",
"encryption_doq_desc": "Bu bağlantı noktası yapılandırılırsa, AdGuard Home bu bağlantı noktasında DNS-over-QUIC sunucusu çalıştıracaktır. Deneysel ve güvenilir olmayabilir. Ayrıca, şu anda bunu destekleyen çok fazla istemci yok.",
"encryption_certificates": "Sertifikalar",
"encryption_certificates_desc": "Şifrelemeyi kullanmak için alan adınız için geçerli bir SSL sertifika zinciri temin etmeniz gerekir. <0>{{link}}</0> adresinden ücretsiz temin edebilirsiniz veya güvenilir Sertifika Otoritelerinden satın alabilirsiniz.",
"encryption_certificates_input": "PEM formatındaki sertifikalarınızı buraya yapıştırın.",
@@ -329,7 +338,7 @@
"encryption_key": "Özel anahtar",
"encryption_key_input": "Sertifikanızın PEM formatı özel anahtarını buraya yapıştırın.",
"encryption_enable": "Şifrelemeyi etkinleştir (HTTPS, DNS-over-HTTPS ve DNS-over-TLS)",
"encryption_enable_desc": "Şifrelemeyi etkinleştirirseniz AdGuard Home yönetici arayüzü HTTPS ile çalışacak, ayrıca DNS sunucusu DNS-over-HTTPS ve DNS-over-TLS üzerinden gelen istekleri dinleyecektir.",
"encryption_enable_desc": "Şifrelemeyi etkinleştirirseniz, AdGuard Home yönetici arayüzü HTTPS üzerinden çalışır ve DNS sunucusu DNS-over-HTTPS ve DNS-over-TLS üzerinden gelen istekleri dinler.",
"encryption_chain_valid": "Sertifika zinciri geçerli",
"encryption_chain_invalid": "Sertifika zinciri geçersiz",
"encryption_key_valid": "Bu geçerli bir {{type}} özel anahtar",
@@ -396,9 +405,8 @@
"updates_version_equal": "AdGuard Home yazılımı günceldir",
"check_updates_now": "Güncellemeleri şimdi denetle",
"dns_privacy": "DNS Gizliliği",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Kullanımı <1>{{address}}</1> string.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Kullanımı <1>{{address}}</1> string.",
"setup_dns_privacy_3": "<0>Lütfen şifrelenmiş DNS protokollerinin yalnızca Android 9'da desteklendiğini unutmayın. Bu yüzden diğer işletim sistemleri için ek yazılım yüklemeniz gerekir..</0><0>İşte kullanabileceğiniz yazılımların bir listesi.</0>",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> <1>{{address}}</1> dizesini kullan.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> <1>{{address}}</1> dizesini kullan.",
"setup_dns_privacy_android_1": "Android 9 aslen DNS-over-TLS desteklemektedir. Yapılandırmak için, Ayarlar → Ağ ve internet → Gelişmiş → Özel DNS seçeneğine gidin ve alan adınızı buraya girin.",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0>, <1>DNS-over-HTTPS</1> ve <1>DNS-over-TLS</1> desteklemektedir.",
"setup_dns_privacy_android_3": "<0>Intra</0> Android'e <1>DNS-over-HTTPS</1> desteğini ekler.",
@@ -474,6 +482,7 @@
"location": "Konum",
"orgname": "Organizasyon adı",
"netname": "Ağ adı",
"network": "Ağ",
"descr": "Açıklama",
"whois": "Whois",
"filtering_rules_learn_more": "Ana makinelere dair kendi kara listelerinizi oluşturmakla alakalı <0>daha fazla bilgi edinin</0>.",
@@ -487,7 +496,7 @@
"disable_ipv6": "IPv6'yı Devre Dışı Bırak",
"disable_ipv6_desc": "Bu özelliği etkinleştirirseniz, IPv6 adresleri (AAAA tipi) için gönderilen tüm DNS istekleri cevapsız bırakılacaktır.",
"fastest_addr": "En hızlı IP adresi",
"fastest_addr_desc": "Tüm DNS sunucularını sorgulayın ve tüm yanıtlar arasından en hızlı IP adresini döndürün",
"fastest_addr_desc": "Tüm DNS sunucularını sorgulayın ve tüm yanıtlar arasından en hızlı IP adresini döndürün. Bu, tüm DNS sunucularından yanıt beklememiz gerektiğinden DNS sorgularını yavaşlatacak ancak genel bağlantıyı iyileştirecektir.",
"autofix_warning_text": "\"Düzelt\" i tıklatırsanız, AdGuardHome sisteminizi AdGuardHome DNS sunucusunu kullanacak şekilde yapılandırır.",
"autofix_warning_list": "Bu görevleri gerçekleştirecektir: <0> sistemi DNSStubListener'ı devre dışı bırakma </0> <0> DNS sunucu adresini 127.0.0.1 olarak ayarlayın </0> <0> /etc/resolv.conf / / run / systemd sembolik bağlantı hedefini değiştirin /resolve/resolv.conf </0> <0> durdur DNSStubListener (sistemde yeniden çözülmüş hizmeti yeniden yükle) </0>",
"autofix_warning_result": "Sonuç olarak, sisteminizden gelen tüm DNS istekleri varsayılan olarak AdGuardHome tarafından işlenir.",
@@ -507,6 +516,7 @@
"check_reason": "Sebep: {{reason}}",
"check_rule": "Kural: {{rule}}",
"check_service": "Hizmet adı: {{service}}",
"service_name": "Servis adı",
"check_not_found": "Filtre listelerinizde bulunamadı",
"client_confirm_block": "\"{{ip}}\" istemcisini engellemek istediğinizden emin misiniz?",
"client_confirm_unblock": "\"{{ip}}\" istemcisinin engellemesini kaldırmak istediğinizden emin misiniz?",
@@ -539,15 +549,17 @@
"cache_size_desc": "DNS önbelleği boyutu (byte cinsinden)",
"cache_ttl_min_override": "Minimum TTL'yi değiştir",
"cache_ttl_max_override": "Maksimum TTL'yi değiştir",
"enter_cache_size": "Önbellek boyutunu girin",
"enter_cache_ttl_min_override": "Minimum TTL değerini girin",
"enter_cache_ttl_max_override": "Maksimum TTL değerini girin",
"cache_ttl_max_override_desc": "Üst sunucudan alınan (maksimum) TTL değerini değiştirin",
"enter_cache_size": "Önbellek boyutunu girin (byte)",
"enter_cache_ttl_min_override": "Minimum TTL değerini girin (saniye)",
"enter_cache_ttl_max_override": "Maksimum TTL değerini girin (saniye)",
"cache_ttl_min_override_desc": "DNS yanıtlarını önbelleğe alırken üst sunucusundan alınan kullanım süresi değerini (saniye) uzatın",
"cache_ttl_max_override_desc": "DNS önbelleğindeki girişler için maksimum kullanım süresi değerini (saniye) ayarlayın",
"ttl_cache_validation": "Minimum önbellek TTL değeri, maksimum değerden küçük veya bu değere eşit olmalıdır",
"filter_category_general": "Genel",
"filter_category_security": "Güvenlik",
"filter_category_regional": "Bölgesel",
"filter_category_other": "Diğer",
"filter_category_general_desc": "Çoğu cihazda izlemeyi ve reklamları engelleyen listeler",
"filter_category_security_desc": "Kötü amaçlı yazılım, kimlik avı veya dolandırıcılık alanlarını engelleme konusunda özelleştirilmiş listeler",
"filter_category_other_desc": "Diğer engelleme listeleri",
"setup_config_to_enable_dhcp_server": "DHCP sunucusunu etkinleştirmek için kurulum yapılandırması",

View File

@@ -114,7 +114,7 @@
"average_processing_time": "Thời gian xử lý trung bình",
"average_processing_time_hint": "Thời gian trung bình cho một yêu cầu DNS tính bằng mili giây",
"block_domain_use_filters_and_hosts": "Chặn tên miền sử dụng các bộ lọc và file hosts",
"filters_block_toggle_hint": "Bạn có thể thiết lập quy tắc chặn tại cài đặt <a href='#filters'>Bộ lọc</a>.",
"filters_block_toggle_hint": "Bạn có thể thiết lập quy tắc chặn tại cài đặt <a>Bộ lọc</a>.",
"use_adguard_browsing_sec": "Sử dụng dịch vụ bảo vệ duyệt web AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home sẽ kiểm tra tên miền với dịch vụ bảo vệ duyệt web. Tính năng sử dụng một API thân thiện với quyền riêng tư: chỉ một phần ngắn tiền tố mã băm SHA256 được gửi đến máy chủ",
"use_adguard_parental": "Sử dụng dịch vụ quản lý của phụ huynh AdGuard",
@@ -401,7 +401,6 @@
"dns_privacy": "DNS Riêng Tư",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> Sử dụng chuỗi <1>{{address}}</1>.",
"setup_dns_privacy_3": "<0>Xin lưu ý rằng các giao thức DNS được mã hóa chỉ được hỗ trợ trên Android 9. Vì vậy, bạn cần cài đặt phần mềm bổ sung cho các hệ điều hành khác.</0><0>Đây là danh sách các phần mềm bạn có thể sử dụng.</0>",
"setup_dns_privacy_android_1": "Android 9 hỗ trợ DNS trên TLS nguyên bản. Để định cấu hình, hãy đi tới Cài đặt → Mạng & internet → Nâng cao → DNS Riêng Tư và nhập tên miền của bạn vào đó.",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> hỗ trợ <1>DNS-over-HTTPS</1> và <1>DNS-over-TLS</1>.",
"setup_dns_privacy_android_3": "<0>Intra</0> thêm <1>DNS-over-HTTPS</1> hỗ trợ cho Android.",
@@ -546,10 +545,6 @@
"milliseconds_abbreviation": "ms",
"cache_size": "Kích thước cache",
"cache_size_desc": "Kích thước cache DNS (bytes)",
"enter_cache_size": "Nhập kích thước cache",
"enter_cache_ttl_min_override": "Nhập TTL tối thiểu",
"enter_cache_ttl_max_override": "Nhập TTL tối đa",
"cache_ttl_max_override_desc": "Ghi đè giá trị TTL (tối đa) nhận được từ máy chủ ngược dòng",
"filter_category_general": "Chung",
"filter_category_security": "Bảo mật",
"filter_category_regional": "Khu vực",

View File

@@ -1,6 +1,7 @@
{
"client_settings": "客户端设置",
"example_upstream_reserved": "您可以将上游DNS 服务器<0>指定为特定域名</0>",
"example_upstream_comment": "您可以指定注解",
"upstream_parallel": "通过同时查询所有上游服务器,使用并行请求以加速解析",
"parallel_requests": "并行请求",
"load_balancing": "负载均衡",
@@ -88,7 +89,7 @@
"enabled_protection": "保护已启用",
"disable_protection": "禁用保护",
"disabled_protection": "保护已禁用",
"refresh_statics": "刷新状态",
"refresh_statics": "刷新统计数据",
"dns_query": "DNS查询",
"blocked_by": "<0>已被过滤器拦截</0>",
"stats_malware_phishing": "被拦截的恶意/钓鱼网站",
@@ -114,7 +115,7 @@
"average_processing_time": "平均处理时间",
"average_processing_time_hint": "处理 DNS 请求的平均时间(毫秒)",
"block_domain_use_filters_and_hosts": "使用过滤器和 Hosts 文件以拦截指定域名",
"filters_block_toggle_hint": "你可以在 <a href='#filters'>过滤器</a> 设置中添加过滤规则。",
"filters_block_toggle_hint": "你可以在 <a>过滤器</a> 设置中添加过滤规则。",
"use_adguard_browsing_sec": "使用 AdGuard【浏览安全】网页服务",
"use_adguard_browsing_sec_hint": "AdGuard Home 将检查域名是否被浏览安全服务列入黑名单。它将使用隐私性强的检索 API 来执行检查,只有域名的 SHA256 的短前缀会被发送到服务器。",
"use_adguard_parental": "使用 AdGuard 【家长控制】服务",
@@ -198,10 +199,10 @@
"block": "拦截",
"disallow_this_client": "不允许这个客户端",
"allow_this_client": "允许这个客户端",
"block_for_this_client_only": "仅拦截这个客户端",
"block_for_this_client_only": "仅对此客户端拦截",
"unblock_for_this_client_only": "仅解除对此客户端的拦截",
"time_table_header": "时间",
"date": "日",
"date": "日",
"domain_name_table_header": "域名",
"domain_or_client": "域名或客户端",
"type_table_header": "类型",
@@ -248,6 +249,8 @@
"blocking_ipv6": "拦截 IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "下载适用于 DNS-over-HTTPS 的 .mobileconfig",
"download_mobileconfig_dot": "下载适用于 DNS-over-TLS 的 .mobileconfig",
"plain_dns": "无加密DNS",
"form_enter_rate_limit": "输入限制速率",
"rate_limit": "速度限制",
@@ -256,7 +259,7 @@
"rate_limit_desc": "每个客户端每秒钟查询次数的限制 (设置为 0 意味着不限制)",
"blocking_ipv4_desc": "拦截 A 记录请求返回的 IP 地址",
"blocking_ipv6_desc": "拦截 AAAA 记录请求返回的 IP 地址",
"blocking_mode_default": "默认被Adblock规则拦截时以REFUSED码响应;被/etc/hosts规则拦截时返回规则中指定IP",
"blocking_mode_default": "默认:被 Adblock 规则拦截时反应为零 IP 地址A记录0.0.0.0AAAA记录::;被/etc/hosts 规则拦截时反应为规则中指定 IP 地址",
"blocking_mode_refused": "REFUSED以 REFUSED 码响应请求",
"blocking_mode_nxdomain": "NXDOMAIN以NXDOMAIN码响应",
"blocking_mode_null_ip": "空IP以零IP地址响应(A记录 0.0.0.0AAAA记录 ::)",
@@ -313,7 +316,7 @@
"install_devices_android_list_2": "点击菜单上的 ”无线局域网“ 选项。在屏幕上将列出所有可用的网络(蜂窝移动网络不支持修改 DNS )。",
"install_devices_android_list_3": "长按当前已连接的网络,然后点击 ”修改网络设置“ 。",
"install_devices_android_list_4": "在某些设备上,您可能需要选中 ”高级“ 复选框以查看进一步的设置。您可能需要调整您安卓设备的 DNS 设置,或是需要将 IP 设置从 DHCP 切换到静态。",
"install_devices_android_list_5": "将 \"DNS 1 / 主 DNS\"DNS 2 / 副 DNS“ 的值改为您的 AdGuard Home 服务器地址。",
"install_devices_android_list_5": "将 DNS 1 和 DNS 2 的值改为您的 AdGuard Home 服务器地址。",
"install_devices_ios_list_1": "从主屏幕中点击 ”设置“ 。",
"install_devices_ios_list_2": "从左侧目录中选择 ”无线局域网“(移动数据网络环境下不支持修改 DNS )。",
"install_devices_ios_list_3": "点击当前已连接网络的名称。",
@@ -414,7 +417,8 @@
"dns_privacy": "DNS 隐私",
"setup_dns_privacy_1": "<0>DNS-over-TLS:</0> 使用 <1>{{address}}</1> 字符串。",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS:</0> 使用 <1>{{address}}</1> 字符串。",
"setup_dns_privacy_3": "<0>请注意,加密的 DNS 协议仅适用于 Android 9。所以您需要为其他操作系统上安装额外的软件。</0><0>以下是您可以使用软件的列表</0>",
"setup_dns_privacy_3": "<0>以下是您可以使用软件的列表</0>",
"setup_dns_privacy_4": "在 iOS 14 或 macOS Big Sur 设备上,您可以下载特定的 '.mobileconfig' 文件。此文件将<highlight>DNS-over-HTTPS</highlight> 或 <highlight>DNS-over-TLS</highlight> 服务器添加于 DNS 设置。",
"setup_dns_privacy_android_1": "Android 9 原生支持 DNS-over-TLS。 要进行配置,请转到 设置 → 网络和互联网 → 高级 → 私有 DNS然后在那里输入您的域名。",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> 支持 <1>DNS-over-HTTPS</1> 和 <1>DNS-over-TLS</1>。",
"setup_dns_privacy_android_3": "<0>Intra</0> 为 Android 提供了 <1>DNS-over-HTTPS</1> 的支持。",
@@ -527,6 +531,7 @@
"check_reason": "原因:{{reason}}",
"check_rule": "规则:{{rule}}",
"check_service": "服务名称:{{service}}",
"service_name": "服务名称",
"check_not_found": "未在您的筛选列表中找到",
"client_confirm_block": "您确定要阻止客户端\"{{ip}}\"?",
"client_confirm_unblock": "您确定要解除对客户端\"{{ip}}\"的封锁吗?",
@@ -561,11 +566,11 @@
"cache_size_desc": "DNS缓存大小 (单位:字节)",
"cache_ttl_min_override": "覆盖最小TTL值",
"cache_ttl_max_override": "覆盖最大TTL值",
"enter_cache_size": "输入缓存大小",
"enter_cache_ttl_min_override": "输入最小TTL",
"enter_cache_ttl_max_override": "输入最大TTL",
"cache_ttl_min_override_desc": "覆盖从上游服务器接收到的 TTL 值 (最小值)",
"cache_ttl_max_override_desc": "覆盖从上游服务器接收到的TTL值(最大)",
"enter_cache_size": "输入缓存大小(字节)",
"enter_cache_ttl_min_override": "输入最小 TTL 值(秒)",
"enter_cache_ttl_max_override": "输入最大 TTL 值(秒)",
"cache_ttl_min_override_desc": "缓存 DNS 响应时,延长从上游服务器接收到的 TTL 值 ()",
"cache_ttl_max_override_desc": "设定 DNS 缓存条目的最大 TTL 值(秒)",
"ttl_cache_validation": "最小缓存TTL值必须小于或等于最大值",
"filter_category_general": "常规",
"filter_category_security": "安全",
@@ -580,5 +585,6 @@
"click_to_view_queries": "点击查看查询",
"port_53_faq_link": "53端口常被DNSStubListener或systemdn解析的服务占用。请阅读<0>这份关于如何解决这一问题的说明</0>",
"adg_will_drop_dns_queries": "AdGuard Home 会终止所有来自此客户端的DNS查询。",
"client_not_in_allowed_clients": "此客户端不被允许,因为它不在“允许的客户端”列表中。",
"experimental": "实验性的"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "用戶端設定",
"example_upstream_reserved": "您可以<0>指定網域</0>使用特定 DNS 查詢",
"example_upstream_comment": "您可以指定註解",
"upstream_parallel": "使用平行查詢,同時查詢所有上游伺服器來來加速解析結果",
"parallel_requests": "平行處理",
"load_balancing": "負載平衝",
@@ -114,7 +115,7 @@
"average_processing_time": "平均的處理時間",
"average_processing_time_hint": "處理 DNS 請求的平均時間(毫秒)",
"block_domain_use_filters_and_hosts": "使用過濾器與 hosts 檔案阻擋網域查詢",
"filters_block_toggle_hint": "您可在<a href='#filters'>過濾器</a>設定中設定封鎖規則。",
"filters_block_toggle_hint": "您可在<a>過濾器</a>設定中設定封鎖規則。",
"use_adguard_browsing_sec": "使用 AdGuard 瀏覽安全網路服務",
"use_adguard_browsing_sec_hint": "AdGuard Home 將檢查查詢網域是否在瀏覽安全服務黑名單內。它使用尊重個人隱私的 API 來進行檢查:會先透過 SHA256 將網域編碼後取簡短前置字串傳送到伺服器核對。",
"use_adguard_parental": "使用 AdGuard 家長監護功能",
@@ -132,6 +133,8 @@
"encryption_settings": "加密設定",
"dhcp_settings": "DHCP 設定",
"upstream_dns": "上游 DNS 伺服器",
"upstream_dns_help": "每行輸入一個伺服器位址。<a>了解更多</a>有關配置上遊 DNS 伺服器的內容",
"upstream_dns_configured_in_file": "被配置在 {{path}}",
"test_upstream_btn": "測試上游 DNS",
"upstreams": "上游",
"apply_btn": "套用",
@@ -194,6 +197,10 @@
"dns_test_not_ok_toast": "設定中的 \"{{key}}\" DNS 出現錯誤,請檢察拼字",
"unblock": "解除封鎖",
"block": "封鎖",
"disallow_this_client": "不允許此用戶端",
"allow_this_client": "允許此用戶端",
"block_for_this_client_only": "僅為此用戶端封鎖",
"unblock_for_this_client_only": "僅為此用戶端解除封鎖",
"time_table_header": "時間",
"date": "日期",
"domain_name_table_header": "域名",
@@ -235,12 +242,15 @@
"blocking_mode": "封鎖模式",
"default": "預設",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null IP",
"custom_ip": "自訂 IP 位址",
"blocking_ipv4": "封鎖 IPv4",
"blocking_ipv6": "封鎖 IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "下載適用於 DNS-over-HTTPS 的 .mobileconfig",
"download_mobileconfig_dot": "下載適用於 DNS-over-TLS 的 .mobileconfig",
"plain_dns": "一般未加密 DNS",
"form_enter_rate_limit": "輸入速率限制",
"rate_limit": "速率限制",
@@ -249,7 +259,8 @@
"rate_limit_desc": "限制單一裝置每秒發出的查詢次數(設定為 0 即表示無限制)",
"blocking_ipv4_desc": "回覆指定 IPv4 位址給被封鎖的網域的 A 紀錄查詢",
"blocking_ipv6_desc": "回覆指定 IPv6 位址給被封鎖的網域的 AAAA 紀錄查詢",
"blocking_mode_default": "預設:符合「adblock 樣式」的規則將回應 REFUSED而「hosts 檔案」則回應設定的 IP 位址",
"blocking_mode_default": "預設:被 Adblock 規則封鎖時回應零值的 IP 位址A 紀錄回應 0.0.0.0 AAAA 紀錄回應 ::);被 /etc/hosts 規則封鎖時回應規則中指定 IP 位址",
"blocking_mode_refused": "REFUSED以 REFUSED 碼回應",
"blocking_mode_nxdomain": "NXDOMAIN回應 NXDOMAIN 狀態碼",
"blocking_mode_null_ip": "Null IP回應零值的 IP 位址A 紀錄回應 0.0.0.0 AAAA 紀錄回應 ::",
"blocking_mode_custom_ip": "自訂 IP 位址:回應一個自訂的 IP 位址",
@@ -406,7 +417,8 @@
"dns_privacy": "DNS 隱私",
"setup_dns_privacy_1": "<0>DNS-over-TLS</0>使用 <1>{{address}}</1>。",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS</0>使用 <1>{{address}}</1>。",
"setup_dns_privacy_3": "<0>注意:加密 DNS 僅適用於 Android 9 或以上,除此之外您可能需要安裝其他軟體。</0><0>這些是您可以使用軟體清單</0>",
"setup_dns_privacy_3": "<0>以下是您可以使用軟體的列表</0>",
"setup_dns_privacy_4": "在 iOS 14 或 macOS Big Sur 裝置上,您可以下載特定的 '.mobileconfig' 檔案。此檔案將<highlight>DNS-over-HTTPS</highlight> 或 <highlight>DNS-over-TLS</highlight> 伺服器添加至 DNS 設定。",
"setup_dns_privacy_android_1": "Android 9 原生支援 DNS-over-TLS。前網「設定」→「網路 & 網際網路」→「進階」→「私人 DNS」設定。",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> 支援 <1>DNS-over-HTTPS</1> 與 <1>DNS-over-TLS</1>。",
"setup_dns_privacy_android_3": "<0>Intra</0> 對 Android 新增支援 <1>DNS-over-HTTPS</1>。",
@@ -519,6 +531,7 @@
"check_reason": "原因:{{reason}}",
"check_rule": "規則:{{rule}}",
"check_service": "服務名稱:{{service}}",
"service_name": "服務名稱",
"check_not_found": "未在您的過濾清單中找到",
"client_confirm_block": "您確定要封鎖「{{ip}}」用戶端?",
"client_confirm_unblock": "您確定要將「{{ip}}」解除封鎖嗎?",
@@ -553,11 +566,12 @@
"cache_size_desc": "DNS 快取大小bytes",
"cache_ttl_min_override": "覆寫最小 TTL 值",
"cache_ttl_max_override": "覆寫最大 TTL 值",
"enter_cache_size": "輸入快取大小",
"enter_cache_ttl_min_override": "輸入最小 TTL 值",
"enter_cache_ttl_max_override": "輸入最大 TTL 值",
"cache_ttl_min_override_desc": "從上游查詢結果中修改 TTL 值(最小",
"cache_ttl_max_override_desc": "從上游查詢結果中修改 TTL 最大值",
"enter_cache_size": "輸入快取大小bytes",
"enter_cache_ttl_min_override": "輸入最小 TTL 值(秒)",
"enter_cache_ttl_max_override": "輸入最大 TTL 值(秒)",
"cache_ttl_min_override_desc": "快取 DNS 回應時,延長從上遊伺服器收到的 TTL 值 (秒",
"cache_ttl_max_override_desc": "設定 DNS 快取條目的最大 TTL 值(秒)",
"ttl_cache_validation": "最小快取 TTL 值必須小於或等於最大值",
"filter_category_general": "一般",
"filter_category_security": "安全性",
"filter_category_regional": "區域性",
@@ -570,5 +584,7 @@
"original_response": "原始回應",
"click_to_view_queries": "按一下以檢視查詢結果",
"port_53_faq_link": "連接埠 53 經常被「DNSStubListener」或「systemd-resolved」服務佔用。請閱讀下列有關解決<0>這個問題</0>的說明",
"adg_will_drop_dns_queries": "AdGuard Home 將要終止所有來自此用戶端的 DNS 查詢。",
"client_not_in_allowed_clients": "此用戶端不被允許,它不在\"允許的用戶端\"列表中。",
"experimental": "實驗性"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "用戶端設定",
"example_upstream_reserved": "您可明確指定<0>用於特定的網域</0>之 DNS 上游",
"example_upstream_comment": "您可明確指定註解",
"upstream_parallel": "透過同時地查詢所有上游的伺服器,使用並行的查詢以加速解析網域",
"parallel_requests": "並行的請求",
"load_balancing": "負載平衡",
@@ -114,7 +115,7 @@
"average_processing_time": "平均的處理時間",
"average_processing_time_hint": "在處理一項 DNS 請求時以毫秒ms計的平均時間",
"block_domain_use_filters_and_hosts": "透過過濾器和主機檔案封鎖網域",
"filters_block_toggle_hint": "您可在<a href='#filters'>過濾器</a>設定中設置封鎖規則。",
"filters_block_toggle_hint": "您可在<a>過濾器</a>設定中設置封鎖規則。",
"use_adguard_browsing_sec": "使用 AdGuard 瀏覽安全網路服務",
"use_adguard_browsing_sec_hint": "AdGuard Home 將檢查網域是否被瀏覽安全網路服務列入黑名單。它將使用友好的隱私查找應用程式介面API以執行檢查僅域名 SHA256 雜湊的短前綴被傳送到伺服器。",
"use_adguard_parental": "使用 AdGuard 家長監控之網路服務",
@@ -210,7 +211,7 @@
"client_table_header": "用戶端",
"empty_response_status": "空無的",
"show_all_filter_type": "顯示全部",
"show_filtered_type": "顯示過濾的",
"show_filtered_type": "顯示過濾的",
"no_logs_found": "無已發現之記錄",
"refresh_btn": "重新整理",
"previous_btn": "上一頁",
@@ -248,6 +249,8 @@
"blocking_ipv6": "封鎖 IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"download_mobileconfig_doh": "下載用於 DNS-over-HTTPS 的 .mobileconfig",
"download_mobileconfig_dot": "下載用於 DNS-over-TLS 的 .mobileconfig",
"plain_dns": "一般的 DNS",
"form_enter_rate_limit": "輸入速率限制",
"rate_limit": "速率限制",
@@ -256,12 +259,12 @@
"rate_limit_desc": "單一的用戶端被允許傳送的每秒請求之數量(設定它為 0 表示無限制的)",
"blocking_ipv4_desc": "要被返回給已封鎖的 A 請求之 IP 位址",
"blocking_ipv6_desc": "要被返回給已封鎖的 AAAA 請求之 IP 位址",
"blocking_mode_default": "預設:當被廣告封鎖樣式的規則封鎖時,以 REFUSED 回覆;當被 /etc/hosts 樣式的規則封鎖時,以在該規則中之已明確指定的 IP 位址回覆",
"blocking_mode_default": "預設:當被廣告封鎖樣式的規則封鎖時,以零值 IP 位址0.0.0.0 供 A:: 供 AAAA回覆;當被 /etc/hosts 樣式的規則封鎖時,以在該規則中之已明確指定的 IP 位址回覆",
"blocking_mode_refused": "已拒絕REFUSED以 REFUSED 碼回覆",
"blocking_mode_nxdomain": "不存在的網域NXDOMAIN以 NXDOMAIN 碼回覆",
"blocking_mode_null_ip": "無效的 IP以零值 IP 位址0.0.0.0 供 A:: 供 AAAA回覆",
"blocking_mode_custom_ip": "自訂的 IP以一組手動地被設定的 IP 位址回覆",
"upstream_dns_client_desc": "如果您將欄位留空AdGuard Home 將使用在 <0>DNS 設定</0>中被配置的伺服器。",
"upstream_dns_client_desc": "如果您將欄位留空AdGuard Home 將使用在 <0>DNS 設定</0>中被配置的伺服器。",
"tracker_source": "追蹤器來源",
"source_label": "來源",
"found_in_known_domain_db": "在已知的域名資料庫中被發現。",
@@ -301,12 +304,12 @@
"install_devices_router_list_4": "您無法於某些類型的路由器上設定自訂的 DNS 伺服器。在這種情況下,如果您設置 AdGuard Home 作為 <0>DHCP 伺服器</0>,其可能有所幫助。否則,您應搜尋有關如何為您的特定路由器型號自訂 DNS 伺服器之用法說明。",
"install_devices_windows_list_1": "通過開始功能表或 Windows 搜尋,開啟控制台。",
"install_devices_windows_list_2": "去網路和網際網路類別,然後去網路和共用中心。",
"install_devices_windows_list_3": "於畫面之左側上找到變更介面卡設定並於它上點擊。",
"install_devices_windows_list_4": "選擇您現行的連線,於它上點擊滑鼠右鍵,然後選擇內容。",
"install_devices_windows_list_5": "在清單中找到網際網路通訊協定第 4 版TCP/IPv4選擇它然後再次內容點擊。",
"install_devices_windows_list_3": "於畫面之左側上找到變更介面卡設定並向它點擊。",
"install_devices_windows_list_4": "選擇您現行的連線,向它點擊滑鼠右鍵,然後選擇內容。",
"install_devices_windows_list_5": "在清單中找到網際網路通訊協定第 4 版TCP/IPv4選擇它然後再次內容點擊。",
"install_devices_windows_list_6": "選擇使用下列的 DNS 伺服器位址,然後輸入您的 AdGuard Home 伺服器位址。",
"install_devices_macos_list_1": " Apple 圖像點擊,然後去系統偏好設定。",
"install_devices_macos_list_2": "網路點擊。",
"install_devices_macos_list_1": " Apple 圖像點擊,然後去系統偏好設定。",
"install_devices_macos_list_2": "網路點擊。",
"install_devices_macos_list_3": "選擇在您的清單中之首要的連線,然後點擊進階的。",
"install_devices_macos_list_4": "選擇該 DNS 分頁,然後輸入您的 AdGuard Home 伺服器位址。",
"install_devices_android_list_1": "從 Android 選單主畫面中,輕觸設定。",
@@ -335,7 +338,7 @@
"encryption_dot": "DNS-over-TLS 連接埠",
"encryption_dot_desc": "如果該連接埠被配置AdGuard Home 將於此連接埠上運行 DNS-over-TLS 伺服器。",
"encryption_doq": "DNS-over-QUIC 連接埠",
"encryption_doq_desc": "如果此連接埠被配置AdGuard Home 將於此連接埠上行 DNS-over-QUIC 伺服器。它是實驗性的並可能為不可靠的。再者,此刻沒有太多支援它的用戶端。",
"encryption_doq_desc": "如果此連接埠被配置AdGuard Home 將於此連接埠上行 DNS-over-QUIC 伺服器。它是實驗性的並可能為不可靠的。再者,此刻沒有太多支援它的用戶端。",
"encryption_certificates": "憑證",
"encryption_certificates_desc": "為了使用加密您需要提供有效的安全通訊端層SSL憑證鏈結供您的網域。於 <0>{{link}}</0> 上您可取得免費的憑證或您可從受信任的憑證授權單位之一購買它。",
"encryption_certificates_input": "於此複製/貼上您的隱私增強郵件編碼之PEM-encoded憑證。",
@@ -414,7 +417,8 @@
"dns_privacy": "DNS 隱私",
"setup_dns_privacy_1": "<0>DNS-over-TLS</0>使用 <1>{{address}}</1> 字串。",
"setup_dns_privacy_2": "<0>DNS-over-HTTPS</0>使用 <1>{{address}}</1> 字串。",
"setup_dns_privacy_3": "<0>請注意,加密的 DNS 協定僅於 Android 9 上被支援。所以您需要安裝額外的軟體供其它的作業系統。</0><0>這裡是您可使用的軟體之清單。</0>",
"setup_dns_privacy_3": "<0>這裡是您可使用的軟體之清單。</0>",
"setup_dns_privacy_4": "於 iOS 14 或 macOS Big Sur 裝置上,您可下載增加 <highlight>DNS-over-HTTPS</highlight> 或 <highlight>DNS-over-TLS</highlight> 伺服器到 DNS 設定之特殊的 '.mobileconfig' 檔案。",
"setup_dns_privacy_android_1": "Android 9 原生地支援 DNS-over-TLS。為了配置它去設定 → 網路 & 網際網路 → 進階 → 私人 DNS 並在那輸入您的域名。",
"setup_dns_privacy_android_2": "<0>AdGuard for Android</0> 支援 <1>DNS-over-HTTPS</1> 和 <1>DNS-over-TLS</1>。",
"setup_dns_privacy_android_3": "<0>Intra</0> 對 Android 增加 <1>DNS-over-HTTPS</1> 支援。",
@@ -527,6 +531,7 @@
"check_reason": "原因:{{reason}}",
"check_rule": "規則:{{rule}}",
"check_service": "服務名稱:{{service}}",
"service_name": "服務名稱",
"check_not_found": "未在您的過濾器中被找到",
"client_confirm_block": "您確定您想要封鎖該用戶端 \"{{ip}}\" 嗎?",
"client_confirm_unblock": "您確定您想要解除封鎖該用戶端 \"{{ip}}\" 嗎?",
@@ -552,20 +557,20 @@
"blocked_adult_websites": "已封鎖的成人網站",
"blocked_threats": "已封鎖的威脅",
"allowed": "已允許的",
"filtered": "過濾的",
"filtered": "過濾的",
"rewritten": "已改寫的",
"safe_search": "安全搜尋",
"blocklist": "封鎖清單",
"milliseconds_abbreviation": "ms",
"cache_size": "快取大小",
"cache_size_desc": "DNS 快取大小(以位元組)",
"cache_ttl_min_override": "覆寫最小的存活時間TTL(以秒數)",
"cache_ttl_max_override": "覆寫最大的存活時間TTL(以秒數)",
"enter_cache_size": "輸入快取大小",
"enter_cache_ttl_min_override": "輸入最小的存活時間(TTL",
"enter_cache_ttl_max_override": "輸入最大的存活時間(TTL",
"cache_ttl_min_override_desc": "覆寫從上游的伺服器收到的存活時間TTL數值最小值",
"cache_ttl_max_override_desc": "覆寫從上游的伺服器收到的存活時間TTL數值最大值",
"cache_ttl_min_override": "覆寫最小的存活時間TTL",
"cache_ttl_max_override": "覆寫最大的存活時間TTL",
"enter_cache_size": "輸入快取大小(位元組)",
"enter_cache_ttl_min_override": "輸入最小的存活時間(",
"enter_cache_ttl_max_override": "輸入最大的存活時間(",
"cache_ttl_min_override_desc": "當快取 DNS 回應時,延長從上游的伺服器收到的存活時間數值(秒",
"cache_ttl_max_override_desc": "設定最大的存活時間數值(秒)供在 DNS 快取中的項目",
"ttl_cache_validation": "最小的快取存活時間TTL數值必須小於或等於最大的數值",
"filter_category_general": "一般的",
"filter_category_security": "安全性",
@@ -580,5 +585,6 @@
"click_to_view_queries": "點擊以檢視查詢",
"port_53_faq_link": "連接埠 53 常被 \"DNSStubListener\" 或 \"systemd-resolved\" 服務佔用。請閱讀有關如何解決這個的<0>用法說明</0>。",
"adg_will_drop_dns_queries": "AdGuard Home 將持續排除來自此用戶端之所有的 DNS 查詢。",
"client_not_in_allowed_clients": "因為該用戶端不在\"已允許的用戶端\"清單中,它未被允許。",
"experimental": "實驗性的"
}

View File

@@ -1,136 +1,5 @@
import {
countClientsStatistics, findAddressType, getIpMatchListStatus, sortIp,
} from '../helpers/helpers';
import { ADDRESS_TYPES, IP_MATCH_LIST_STATUS } from '../helpers/constants';
describe('getIpMatchListStatus', () => {
describe('IPv4', () => {
test('should return EXACT on find the exact ip match', () => {
const list = `127.0.0.2
2001:db8:11a3:9d7:0:0:0:0
192.168.0.1/8
127.0.0.1
127.0.0.3`;
expect(getIpMatchListStatus('127.0.0.1', list))
.toEqual(IP_MATCH_LIST_STATUS.EXACT);
});
test('should return CIDR on find the cidr match', () => {
const list = `127.0.0.2
2001:db8:11a3:9d7:0:0:0:0
192.168.0.1/8
127.0.0.0/24
127.0.0.3`;
expect(getIpMatchListStatus('127.0.0.1', list))
.toEqual(IP_MATCH_LIST_STATUS.CIDR);
});
test('should return NOT_FOUND if the ip is not in the list', () => {
const list = `127.0.0.1
2001:db8:11a3:9d7:0:0:0:0
192.168.0.1/8
127.0.0.2
127.0.0.3`;
expect(getIpMatchListStatus('127.0.0.4', list))
.toEqual(IP_MATCH_LIST_STATUS.NOT_FOUND);
});
test('should return the first EXACT or CIDR match in the list', () => {
const list1 = `2001:db8:11a3:9d7:0:0:0:0
127.0.0.1
127.0.0.8/24
127.0.0.3`;
expect(getIpMatchListStatus('127.0.0.1', list1))
.toEqual(IP_MATCH_LIST_STATUS.EXACT);
const list2 = `2001:db8:11a3:9d7:ffff:ffff:ffff:ffff
2001:0db8:11a3:09d7:0000:0000:0000:0000/64
127.0.0.0/24
127.0.0.1
127.0.0.8/24
127.0.0.3`;
expect(getIpMatchListStatus('127.0.0.1', list2))
.toEqual(IP_MATCH_LIST_STATUS.CIDR);
});
});
describe('IPv6', () => {
test('should return EXACT on find the exact ip match', () => {
const list = `127.0.0.0
2001:db8:11a3:9d7:0:0:0:0
2001:db8:11a3:9d7:ffff:ffff:ffff:ffff
127.0.0.1`;
expect(getIpMatchListStatus('2001:db8:11a3:9d7:0:0:0:0', list))
.toEqual(IP_MATCH_LIST_STATUS.EXACT);
});
test('should return EXACT on find the exact ip match of short and long notation', () => {
const list = `127.0.0.0
192.168.0.1/8
2001:db8::
127.0.0.2`;
expect(getIpMatchListStatus('2001:db8:0:0:0:0:0:0', list))
.toEqual(IP_MATCH_LIST_STATUS.EXACT);
});
test('should return CIDR on find the cidr match', () => {
const list1 = `2001:0db8:11a3:09d7:0000:0000:0000:0000/64
127.0.0.1
127.0.0.2`;
expect(getIpMatchListStatus('2001:db8:11a3:9d7:0:0:0:0', list1))
.toEqual(IP_MATCH_LIST_STATUS.CIDR);
const list2 = `2001:0db8::/16
127.0.0.0
2001:db8:11a3:9d7:0:0:0:0
2001:db8::
2001:db8:11a3:9d7:ffff:ffff:ffff:ffff
127.0.0.1`;
expect(getIpMatchListStatus('2001:db1::', list2))
.toEqual(IP_MATCH_LIST_STATUS.CIDR);
});
test('should return NOT_FOUND if the ip is not in the list', () => {
const list = `2001:db8:11a3:9d7:0:0:0:0
2001:0db8:11a3:09d7:0000:0000:0000:0000/64
127.0.0.1
127.0.0.2`;
expect(getIpMatchListStatus('::', list))
.toEqual(IP_MATCH_LIST_STATUS.NOT_FOUND);
});
test('should return the first EXACT or CIDR match in the list', () => {
const list1 = `2001:db8:11a3:9d7:0:0:0:0
2001:0db8:11a3:09d7:0000:0000:0000:0000/64
127.0.0.3`;
expect(getIpMatchListStatus('2001:db8:11a3:9d7:0:0:0:0', list1))
.toEqual(IP_MATCH_LIST_STATUS.EXACT);
const list2 = `2001:0db8:11a3:09d7:0000:0000:0000:0000/64
2001:db8:11a3:9d7:0:0:0:0
127.0.0.3`;
expect(getIpMatchListStatus('2001:db8:11a3:9d7:0:0:0:0', list2))
.toEqual(IP_MATCH_LIST_STATUS.CIDR);
});
});
describe('Empty list or IP', () => {
test('should return NOT_FOUND on empty ip', () => {
const list = `127.0.0.0
2001:db8:11a3:9d7:0:0:0:0
2001:db8:11a3:9d7:ffff:ffff:ffff:ffff
127.0.0.1`;
expect(getIpMatchListStatus('', list))
.toEqual(IP_MATCH_LIST_STATUS.NOT_FOUND);
});
test('should return NOT_FOUND on empty list', () => {
const list = '';
expect(getIpMatchListStatus('127.0.0.1', list))
.toEqual(IP_MATCH_LIST_STATUS.NOT_FOUND);
});
});
});
import { sortIp, countClientsStatistics, findAddressType } from '../helpers/helpers';
import { ADDRESS_TYPES } from '../helpers/constants';
describe('sortIp', () => {
describe('ipv4', () => {
@@ -404,15 +273,15 @@ describe('sortIp', () => {
});
});
describe('invalid input', () => {
const originalError = console.error;
const originalWarn = console.warn;
beforeEach(() => {
console.error = jest.fn();
console.warn = jest.fn();
});
afterEach(() => {
expect(console.error).toHaveBeenCalled();
console.error = originalError;
expect(console.warn).toHaveBeenCalled();
console.warn = originalWarn;
});
test('invalid strings', () => {

View File

@@ -3,7 +3,6 @@ import i18next from 'i18next';
import apiClient from '../api/Api';
import { addErrorToast, addSuccessToast } from './toasts';
import { BLOCK_ACTIONS } from '../helpers/constants';
import { splitByNewLine } from '../helpers/helpers';
export const getAccessListRequest = createAction('GET_ACCESS_LIST_REQUEST');
@@ -49,19 +48,17 @@ export const toggleClientBlockRequest = createAction('TOGGLE_CLIENT_BLOCK_REQUES
export const toggleClientBlockFailure = createAction('TOGGLE_CLIENT_BLOCK_FAILURE');
export const toggleClientBlockSuccess = createAction('TOGGLE_CLIENT_BLOCK_SUCCESS');
export const toggleClientBlock = (type, ip) => async (dispatch) => {
export const toggleClientBlock = (ip, disallowed, disallowed_rule) => async (dispatch) => {
dispatch(toggleClientBlockRequest());
try {
const {
allowed_clients, disallowed_clients, blocked_hosts,
} = await apiClient.getAccessList();
let updatedDisallowedClients = disallowed_clients || [];
const accessList = await apiClient.getAccessList();
const allowed_clients = accessList.allowed_clients ?? [];
const blocked_hosts = accessList.blocked_hosts ?? [];
const disallowed_clients = accessList.disallowed_clients ?? [];
if (type === BLOCK_ACTIONS.UNBLOCK && updatedDisallowedClients.includes(ip)) {
updatedDisallowedClients = updatedDisallowedClients.filter((client) => client !== ip);
} else if (type === BLOCK_ACTIONS.BLOCK && !updatedDisallowedClients.includes(ip)) {
updatedDisallowedClients.push(ip);
}
const updatedDisallowedClients = disallowed
? disallowed_clients.filter((client) => client !== disallowed_rule)
: disallowed_clients.concat(ip);
const values = {
allowed_clients,
@@ -72,9 +69,9 @@ export const toggleClientBlock = (type, ip) => async (dispatch) => {
await apiClient.setAccessList(values);
dispatch(toggleClientBlockSuccess(values));
if (type === BLOCK_ACTIONS.UNBLOCK) {
dispatch(addSuccessToast(i18next.t('client_unblocked', { ip })));
} else if (type === BLOCK_ACTIONS.BLOCK) {
if (disallowed) {
dispatch(addSuccessToast(i18next.t('client_unblocked', { ip: disallowed_rule })));
} else {
dispatch(addSuccessToast(i18next.t('client_blocked', { ip })));
}
} catch (error) {

View File

@@ -5,9 +5,15 @@ import axios from 'axios';
import endsWith from 'lodash/endsWith';
import escapeRegExp from 'lodash/escapeRegExp';
import React from 'react';
import { splitByNewLine, sortClients } from '../helpers/helpers';
import { compose } from 'redux';
import { splitByNewLine, sortClients, filterOutComments } from '../helpers/helpers';
import {
BLOCK_ACTIONS, CHECK_TIMEOUT, STATUS_RESPONSE, SETTINGS_NAMES, FORM_NAME, GETTING_STARTED_LINK,
BLOCK_ACTIONS,
CHECK_TIMEOUT,
STATUS_RESPONSE,
SETTINGS_NAMES,
FORM_NAME,
GETTING_STARTED_LINK,
} from '../helpers/constants';
import { areEqualVersions } from '../helpers/version';
import { getTlsStatus } from './encryption';
@@ -289,14 +295,21 @@ export const testUpstreamRequest = createAction('TEST_UPSTREAM_REQUEST');
export const testUpstreamFailure = createAction('TEST_UPSTREAM_FAILURE');
export const testUpstreamSuccess = createAction('TEST_UPSTREAM_SUCCESS');
export const testUpstream = (config) => async (dispatch) => {
export const testUpstream = (
{ bootstrap_dns, upstream_dns }, upstream_dns_file,
) => async (dispatch) => {
dispatch(testUpstreamRequest());
try {
const values = { ...config };
values.bootstrap_dns = splitByNewLine(values.bootstrap_dns);
values.upstream_dns = splitByNewLine(values.upstream_dns);
const removeComments = compose(filterOutComments, splitByNewLine);
const upstreamResponse = await apiClient.testUpstream(values);
const config = {
bootstrap_dns: splitByNewLine(bootstrap_dns),
...(upstream_dns_file ? null : {
upstream_dns: removeComments(upstream_dns),
}),
};
const upstreamResponse = await apiClient.testUpstream(config);
const testMessages = Object.keys(upstreamResponse)
.map((key) => {
const message = upstreamResponse[key];
@@ -317,6 +330,12 @@ export const testUpstream = (config) => async (dispatch) => {
}
};
export const testUpstreamWithFormValues = () => async (dispatch, getState) => {
const { upstream_dns_file } = getState().dnsConfig;
const { bootstrap_dns, upstream_dns } = getState().form[FORM_NAME.UPSTREAM].values;
return dispatch(testUpstream({ bootstrap_dns, upstream_dns }, upstream_dns_file));
};
export const changeLanguageRequest = createAction('CHANGE_LANGUAGE_REQUEST');
export const changeLanguageFailure = createAction('CHANGE_LANGUAGE_FAILURE');
export const changeLanguageSuccess = createAction('CHANGE_LANGUAGE_SUCCESS');
@@ -354,10 +373,14 @@ export const getDhcpStatusFailure = createAction('GET_DHCP_STATUS_FAILURE');
export const getDhcpStatus = () => async (dispatch) => {
dispatch(getDhcpStatusRequest());
try {
const status = await apiClient.getDhcpStatus();
const globalStatus = await apiClient.getGlobalStatus();
status.dhcp_available = globalStatus.dhcp_available;
dispatch(getDhcpStatusSuccess(status));
if (globalStatus.dhcp_available) {
const status = await apiClient.getDhcpStatus();
status.dhcp_available = globalStatus.dhcp_available;
dispatch(getDhcpStatusSuccess(status));
} else {
dispatch(getDhcpStatusFailure());
}
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(getDhcpStatusFailure());

View File

@@ -7,6 +7,17 @@ import {
} from '../helpers/constants';
import { addErrorToast, addSuccessToast } from './toasts';
const enrichWithClientInfo = async (logs) => {
const clientsParams = getParamsForClientsSearch(logs, 'client');
if (Object.keys(clientsParams).length > 0) {
const clients = await apiClient.findClients(clientsParams);
return addClientInfo(logs, clients, 'client');
}
return logs;
};
const getLogsWithParams = async (config) => {
const { older_than, filter, ...values } = config;
const rawLogs = await apiClient.getQueryLog({
@@ -14,13 +25,8 @@ const getLogsWithParams = async (config) => {
older_than,
});
const { data, oldest } = rawLogs;
let logs = normalizeLogs(data);
const clientsParams = getParamsForClientsSearch(logs, 'client');
if (Object.keys(clientsParams).length > 0) {
const clients = await apiClient.findClients(clientsParams);
logs = addClientInfo(logs, clients, 'client');
}
const normalizedLogs = normalizeLogs(data);
const logs = await enrichWithClientInfo(normalizedLogs);
return {
logs,
@@ -82,6 +88,23 @@ export const getLogsRequest = createAction('GET_LOGS_REQUEST');
export const getLogsFailure = createAction('GET_LOGS_FAILURE');
export const getLogsSuccess = createAction('GET_LOGS_SUCCESS');
export const updateLogs = () => async (dispatch, getState) => {
try {
const { logs, oldest, older_than } = getState().queryLogs;
const enrichedLogs = await enrichWithClientInfo(logs);
dispatch(getLogsSuccess({
logs: enrichedLogs,
oldest,
older_than,
}));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(getLogsFailure(error));
}
};
export const getLogs = () => async (dispatch, getState) => {
dispatch(getLogsRequest());
try {

View File

@@ -63,10 +63,6 @@ body {
cursor: not-allowed;
}
.select--no-warning {
margin-bottom: 1.375rem;
}
.button-action {
visibility: hidden;
}

View File

@@ -8,10 +8,11 @@ import classNames from 'classnames';
import Card from '../ui/Card';
import Cell from '../ui/Cell';
import { getPercent, getIpMatchListStatus, sortIp } from '../../helpers/helpers';
import { BLOCK_ACTIONS, IP_MATCH_LIST_STATUS, STATUS_COLORS } from '../../helpers/constants';
import { getPercent, sortIp } from '../../helpers/helpers';
import { BLOCK_ACTIONS, STATUS_COLORS } from '../../helpers/constants';
import { toggleClientBlock } from '../../actions/access';
import { renderFormattedClientCell } from '../../helpers/renderFormattedClientCell';
import { getStats } from '../../actions/stats';
const getClientsPercentColor = (percent) => {
if (percent > 50) {
@@ -33,59 +34,51 @@ const CountCell = (row) => {
return <Cell value={value} percent={percent} color={percentColor} search={ip} />;
};
const renderBlockingButton = (ip) => {
const renderBlockingButton = (ip, disallowed, disallowed_rule) => {
const dispatch = useDispatch();
const { t } = useTranslation();
const processingSet = useSelector((state) => state.access.processingSet);
const disallowed_clients = useSelector(
(state) => state.access.disallowed_clients, shallowEqual,
);
const ipMatchListStatus = getIpMatchListStatus(ip, disallowed_clients);
if (ipMatchListStatus === IP_MATCH_LIST_STATUS.CIDR) {
return null;
}
const isNotFound = ipMatchListStatus === IP_MATCH_LIST_STATUS.NOT_FOUND;
const type = isNotFound ? BLOCK_ACTIONS.BLOCK : BLOCK_ACTIONS.UNBLOCK;
const text = type;
const buttonClass = classNames('button-action button-action--main', {
'button-action--unblock': !isNotFound,
'button-action--unblock': disallowed,
});
const toggleClientStatus = (type, ip) => {
const confirmMessage = type === BLOCK_ACTIONS.BLOCK
? `${t('adg_will_drop_dns_queries')} ${t('client_confirm_block', { ip })}`
: t('client_confirm_unblock', { ip });
const toggleClientStatus = async (ip, disallowed, disallowed_rule) => {
const confirmMessage = disallowed
? t('client_confirm_unblock', { ip: disallowed_rule })
: `${t('adg_will_drop_dns_queries')} ${t('client_confirm_block', { ip })}`;
if (window.confirm(confirmMessage)) {
dispatch(toggleClientBlock(type, ip));
await dispatch(toggleClientBlock(ip, disallowed, disallowed_rule));
await dispatch(getStats());
}
};
const onClick = () => toggleClientStatus(type, ip);
const onClick = () => toggleClientStatus(ip, disallowed, disallowed_rule);
const text = disallowed ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const isNotInAllowedList = disallowed && disallowed_rule === '';
return <div className="table__action pl-4">
<button
type="button"
className={buttonClass}
onClick={onClick}
disabled={processingSet}
>
<Trans>{text}</Trans>
</button>
</div>;
<button
type="button"
className={buttonClass}
onClick={isNotInAllowedList ? undefined : onClick}
disabled={isNotInAllowedList || processingSet}
title={t(isNotInAllowedList ? 'client_not_in_allowed_clients' : text)}
>
<Trans>{text}</Trans>
</button>
</div>;
};
const ClientCell = (row) => {
const { value, original: { info } } = row;
const { value, original: { info, info: { disallowed, disallowed_rule } } } = row;
return <>
<div className="logs__row logs__row--overflow logs__row--column d-flex align-items-center">
{renderFormattedClientCell(value, info, true)}
{renderBlockingButton(value)}
{renderBlockingButton(value, disallowed, disallowed_rule)}
</div>
</>;
};
@@ -96,7 +89,6 @@ const Clients = ({
}) => {
const { t } = useTranslation();
const topClients = useSelector((state) => state.stats.topClients, shallowEqual);
const disallowedClients = useSelector((state) => state.access.disallowed_clients, shallowEqual);
return <Card
title={t('top_clients')}
@@ -138,9 +130,9 @@ const Clients = ({
return {};
}
const { ip } = rowInfo.original;
const { info: { disallowed } } = rowInfo.original;
return getIpMatchListStatus(ip, disallowedClients) === IP_MATCH_LIST_STATUS.NOT_FOUND ? {} : { className: 'red' };
return disallowed ? { className: 'logs__row--red' } : {};
}}
/>
</Card>;

View File

@@ -22,14 +22,30 @@
border-bottom: 6px solid #585965;
}
.card-chart-bg {
left: -20px;
width: calc(100% + 20px);
}
@media (max-width: 1279.98px) {
.table__action {
position: absolute;
right: 0;
}
}
.page-title--dashboard {
display: flex;
align-items: center;
}
.dashboard-title__button{
margin: 0 0.5rem;
}
@media (max-width: 767.98px) {
.page-title--dashboard {
flex-direction: column;
align-items: flex-start;
}
.dashboard-title__button{
margin: 0.5rem 0;
display: block;
}
}

View File

@@ -1,7 +1,7 @@
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { Trans, useTranslation } from 'react-i18next';
import classNames from 'classnames';
import Statistics from './Statistics';
import Counters from './Counters';
import Clients from './Clients';
@@ -17,6 +17,7 @@ const Dashboard = ({
getStats,
getStatsConfig,
dashboard,
dashboard: { protectionEnabled, processingProtection },
toggleProtection,
stats,
access,
@@ -33,20 +34,12 @@ const Dashboard = ({
getAllStats();
}, []);
const getToggleFilteringButton = () => {
const { protectionEnabled, processingProtection } = dashboard;
const buttonText = protectionEnabled ? 'disable_protection' : 'enable_protection';
const buttonClass = protectionEnabled ? 'btn-gray' : 'btn-success';
const buttonText = protectionEnabled ? 'disable_protection' : 'enable_protection';
return <button
type="button"
className={`btn btn-sm mr-2 ${buttonClass}`}
onClick={() => toggleProtection(protectionEnabled)}
disabled={processingProtection}
>
<Trans>{buttonText}</Trans>
</button>;
};
const buttonClass = classNames('btn btn-sm dashboard-title__button', {
'btn-gray': protectionEnabled,
'btn-success': !protectionEnabled,
});
const refreshButton = <button
type="button"
@@ -62,24 +55,27 @@ const Dashboard = ({
? t('for_last_24_hours')
: t('for_last_days', { count: stats.interval });
const refreshFullButton = <button
type="button"
className="btn btn-outline-primary btn-sm"
onClick={() => getAllStats()}
>
<Trans>refresh_statics</Trans>
</button>;
const statsProcessing = stats.processingStats
|| stats.processingGetConfig
|| access.processing;
return <>
<PageTitle title={t('dashboard')}>
<div className="page-title__actions">
{getToggleFilteringButton()}
{refreshFullButton}
</div>
<PageTitle title={t('dashboard')} containerClass="page-title--dashboard">
<button
type="button"
className={buttonClass}
onClick={() => toggleProtection(protectionEnabled)}
disabled={processingProtection}
>
<Trans>{buttonText}</Trans>
</button>
<button
type="button"
className="btn btn-outline-primary btn-sm"
onClick={getAllStats}
>
<Trans>refresh_statics</Trans>
</button>
</PageTitle>
{statsProcessing && <Loading />}
{!statsProcessing && <div className="row row-cards dashboard">

View File

@@ -4,29 +4,23 @@ import { withTranslation, Trans } from 'react-i18next';
const Actions = ({
handleAdd, handleRefresh, processingRefreshFilters, whitelist,
}) => (
<div className="card-actions">
<button
className="btn btn-success btn-standard mr-2 btn-large"
}) => <div className="card-actions">
<button
className="btn btn-success btn-standard mr-2 btn-large mb-2"
type="submit"
onClick={handleAdd}
>
{whitelist ? (
<Trans>add_allowlist</Trans>
) : (
<Trans>add_blocklist</Trans>
)}
</button>
<button
className="btn btn-primary btn-standard"
>
{whitelist ? <Trans>add_allowlist</Trans> : <Trans>add_blocklist</Trans>}
</button>
<button
className="btn btn-primary btn-standard mb-2"
type="submit"
onClick={handleRefresh}
disabled={processingRefreshFilters}
>
<Trans>check_updates_btn</Trans>
</button>
</div>
);
>
<Trans>check_updates_btn</Trans>
</button>
</div>;
Actions.propTypes = {
handleAdd: PropTypes.func.isRequired,

View File

@@ -1,155 +1,124 @@
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import React from 'react';
import { useTranslation } from 'react-i18next';
import classNames from 'classnames';
import i18next from 'i18next';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import {
checkFiltered,
checkRewrite,
checkRewriteHosts,
checkBlackList,
checkNotFilteredNotFound,
checkWhiteList,
checkSafeSearch,
checkSafeBrowsing,
checkParental, getFilterName,
checkParental,
getFilterName,
} from '../../../helpers/helpers';
import { FILTERED } from '../../../helpers/constants';
import { BLOCK_ACTIONS, FILTERED, FILTERED_STATUS } from '../../../helpers/constants';
import { toggleBlocking } from '../../../actions';
const getTitle = (reason, filterName, t, onlyFiltered) => {
if (checkNotFilteredNotFound(reason)) {
return t('check_not_found');
}
const renderBlockingButton = (isFiltered, domain) => {
const processingRules = useSelector((state) => state.filtering.processingRules);
const dispatch = useDispatch();
const { t } = useTranslation();
if (checkRewrite(reason)) {
return t('rewrite_applied');
}
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
if (checkRewriteHosts(reason)) {
return t('rewrite_hosts_applied');
}
const onClick = async () => {
await dispatch(toggleBlocking(buttonType, domain));
};
if (checkBlackList(reason)) {
return filterName;
}
const buttonClass = classNames('mt-3 button-action button-action--main button-action--active button-action--small', {
'button-action--unblock': isFiltered,
});
if (checkWhiteList(reason)) {
return (
<div>
{filterName}
</div>
);
}
if (onlyFiltered) {
const filterKey = reason.replace(FILTERED, '');
return (
<div>
{t('query_log_filtered', { filter: filterKey })}
</div>
);
}
return (
<Fragment>
<div>
{t('check_reason', { reason })}
</div>
<div>
{filterName}
</div>
</Fragment>
);
return <button type="button"
className={buttonClass}
onClick={onClick}
disabled={processingRules}
>
{t(buttonType)}
</button>;
};
const getColor = (reason) => {
if (checkFiltered(reason)) {
return 'red';
} if (checkRewrite(reason) || checkRewriteHosts(reason)) {
return 'blue';
} if (checkWhiteList(reason)) {
return 'green';
}
const getTitle = (reason) => {
const { t } = useTranslation();
return '';
};
const filters = useSelector((state) => state.filtering.filters, shallowEqual);
const whitelistFilters = useSelector((state) => state.filtering.whitelistFilters, shallowEqual);
const filter_id = useSelector((state) => state.filtering.check.filter_id);
const Info = ({
filters,
whitelistFilters,
hostname,
reason,
filter_id,
rule,
service_name,
cname,
ip_addrs,
t,
}) => {
const filterName = getFilterName(filters,
const filterName = getFilterName(
filters,
whitelistFilters,
filter_id,
'filtered_custom_rules',
(filter) => (filter?.name ? t('query_log_filtered', { filter: filter.name }) : ''));
(filter) => (filter?.name ? t('query_log_filtered', { filter: filter.name }) : ''),
);
const getReasonFiltered = (reason) => {
const filterKey = reason.replace(FILTERED, '');
return i18next.t('query_log_filtered', { filter: filterKey });
};
const REASON_TO_TITLE_MAP = {
[FILTERED_STATUS.NOT_FILTERED_NOT_FOUND]: t('check_not_found'),
[FILTERED_STATUS.REWRITE]: t('rewrite_applied'),
[FILTERED_STATUS.REWRITE_HOSTS]: t('rewrite_hosts_applied'),
[FILTERED_STATUS.FILTERED_BLACK_LIST]: filterName,
[FILTERED_STATUS.NOT_FILTERED_WHITE_LIST]: filterName,
[FILTERED_STATUS.FILTERED_SAFE_SEARCH]: getReasonFiltered(reason),
[FILTERED_STATUS.FILTERED_SAFE_BROWSING]: getReasonFiltered(reason),
[FILTERED_STATUS.FILTERED_PARENTAL]: getReasonFiltered(reason),
};
if (Object.prototype.hasOwnProperty.call(REASON_TO_TITLE_MAP, reason)) {
return REASON_TO_TITLE_MAP[reason];
}
return <>
<div>{t('check_reason', { reason })}</div>
<div>{filterName}</div>
</>;
};
const Info = () => {
const {
hostname,
reason,
rule,
service_name,
cname,
ip_addrs,
} = useSelector((state) => state.filtering.check, shallowEqual);
const { t } = useTranslation();
const title = getTitle(reason);
const className = classNames('card mb-0 p-3', {
'logs__row--red': checkFiltered(reason),
'logs__row--blue': checkRewrite(reason) || checkRewriteHosts(reason),
'logs__row--green': checkWhiteList(reason),
});
const onlyFiltered = checkSafeSearch(reason)
|| checkSafeBrowsing(reason)
|| checkParental(reason);
const title = getTitle(reason, filterName, t, onlyFiltered);
const color = getColor(reason);
if (onlyFiltered) {
return (
<div className={`card mb-0 p-3 ${color}`}>
<div>
<strong>{hostname}</strong>
</div>
const isFiltered = checkFiltered(reason);
<div>{title}</div>
</div>
);
}
return (
<div className={`card mb-0 p-3 ${color}`}>
<div>
<strong>{hostname}</strong>
</div>
<div>{title}</div>
{rule && (
<div>{t('check_rule', { rule })}</div>
)}
{service_name && (
<div>{t('check_service', { service: service_name })}</div>
)}
{cname && (
<div>{t('check_cname', { cname })}</div>
)}
{ip_addrs && (
<div>
{t('check_ip', { ip: ip_addrs.join(', ') })}
</div>
)}
</div>
);
return <div className={className}>
<div><strong>{hostname}</strong></div>
<div>{title}</div>
{!onlyFiltered
&& <>
{rule && <div>{t('check_rule', { rule })}</div>}
{service_name && <div>{t('check_service', { service: service_name })}</div>}
{cname && <div>{t('check_cname', { cname })}</div>}
{ip_addrs && <div>{t('check_ip', { ip: ip_addrs.join(', ') })}</div>}
{renderBlockingButton(isFiltered, hostname)}
</>}
</div>;
};
Info.propTypes = {
filters: PropTypes.array.isRequired,
whitelistFilters: PropTypes.array.isRequired,
hostname: PropTypes.string.isRequired,
reason: PropTypes.string.isRequired,
filter_id: PropTypes.number,
rule: PropTypes.string,
service_name: PropTypes.string,
cname: PropTypes.string,
ip_addrs: PropTypes.array,
t: PropTypes.func.isRequired,
};
export default withTranslation()(Info);
export default Info;

View File

@@ -1,99 +1,66 @@
import React, { Fragment } from 'react';
import React from 'react';
import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next';
import { useTranslation } from 'react-i18next';
import { Field, reduxForm } from 'redux-form';
import flow from 'lodash/flow';
import { useSelector } from 'react-redux';
import Card from '../../ui/Card';
import { renderInputField } from '../../../helpers/form';
import Info from './Info';
import { FORM_NAME } from '../../../helpers/constants';
const Check = (props) => {
const {
t,
handleSubmit,
pristine,
invalid,
processing,
check,
filters,
whitelistFilters,
handleSubmit,
} = props;
const {
hostname,
reason,
filter_id,
rule,
service_name,
cname,
ip_addrs,
} = check;
const { t } = useTranslation();
return (
<Card
title={t('check_title')}
subtitle={t('check_desc')}
>
<form onSubmit={handleSubmit}>
<div className="row">
<div className="col-12 col-md-6">
<div className="input-group">
<Field
id="name"
name="name"
component={renderInputField}
type="text"
className="form-control"
placeholder={t('form_enter_host')}
/>
<span className="input-group-append">
<button
className="btn btn-success btn-standard btn-large"
type="submit"
onClick={handleSubmit}
disabled={pristine || invalid || processing}
>
<Trans>check</Trans>
</button>
</span>
</div>
{check.hostname && (
<Fragment>
<hr />
<Info
filters={filters}
whitelistFilters={whitelistFilters}
hostname={hostname}
reason={reason}
filter_id={filter_id}
rule={rule}
service_name={service_name}
cname={cname}
ip_addrs={ip_addrs}
/>
</Fragment>
)}
const processingCheck = useSelector((state) => state.filtering.processingCheck);
const hostname = useSelector((state) => state.filtering.check.hostname);
return <Card
title={t('check_title')}
subtitle={t('check_desc')}
>
<form onSubmit={handleSubmit}>
<div className="row">
<div className="col-12 col-md-6">
<div className="input-group">
<Field
id="name"
name="name"
component={renderInputField}
type="text"
className="form-control"
placeholder={t('form_enter_host')}
/>
<span className="input-group-append">
<button
className="btn btn-success btn-standard btn-large"
type="submit"
onClick={handleSubmit}
disabled={pristine || invalid || processingCheck}
>
{t('check')}
</button>
</span>
</div>
{hostname && <>
<hr />
<Info />
</>}
</div>
</form>
</Card>
);
</div>
</form>
</Card>;
};
Check.propTypes = {
t: PropTypes.func.isRequired,
handleSubmit: PropTypes.func.isRequired,
pristine: PropTypes.bool.isRequired,
invalid: PropTypes.bool.isRequired,
processing: PropTypes.bool.isRequired,
check: PropTypes.object.isRequired,
filters: PropTypes.array.isRequired,
whitelistFilters: PropTypes.array.isRequired,
};
export default flow([
withTranslation(),
reduxForm({ form: FORM_NAME.DOMAIN_CHECK }),
])(Check);
export default reduxForm({ form: FORM_NAME.DOMAIN_CHECK })(Check);

View File

@@ -1,13 +1,18 @@
import React, { Component, Fragment } from 'react';
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next';
import classnames from 'classnames';
import Card from '../ui/Card';
import PageTitle from '../ui/PageTitle';
import Examples from './Examples';
import Check from './Check';
import { getTextareaCommentsHighlight, syncScroll } from '../../helpers/highlightTextareaComments';
import { COMMENT_LINE_DEFAULT_TOKEN, isFirefox } from '../../helpers/constants';
import '../ui/texareaCommentsHighlight.css';
class CustomRules extends Component {
ref = React.createRef();
componentDidMount() {
this.props.getFilteringStatus();
}
@@ -34,30 +39,42 @@ class CustomRules extends Component {
this.props.checkHost(values);
};
onScroll = (e) => syncScroll(e, this.ref)
render() {
const {
t,
filtering: {
filters,
whitelistFilters,
userRules,
processingCheck,
check,
},
} = this.props;
return (
<Fragment>
<>
<PageTitle title={t('custom_filtering_rules')} />
<Card
subtitle={t('custom_filter_rules_hint')}
>
<form onSubmit={this.handleSubmit}>
<div className={classnames('col-12 text-edit-container form-control--textarea-large', {
'mb-4': !isFirefox,
'mb-6': isFirefox,
})}>
<textarea
className="form-control form-control--textarea-large font-monospace"
value={userRules}
onChange={this.handleChange}
className={classnames('form-control font-monospace text-input form-control--textarea-large', {
'text-input--largest': isFirefox,
})}
value={userRules}
onChange={this.handleChange}
onScroll={this.onScroll}
/>
{getTextareaCommentsHighlight(
this.ref,
userRules,
classnames({ 'form-control--textarea-large': isFirefox }),
[COMMENT_LINE_DEFAULT_TOKEN, '!'],
)}
</div>
<div className="card-actions">
<button
className="btn btn-success btn-standard btn-large"
@@ -71,14 +88,8 @@ class CustomRules extends Component {
<hr />
<Examples />
</Card>
<Check
filters={filters}
whitelistFilters={whitelistFilters}
check={check}
onSubmit={this.handleCheck}
processing={processingCheck}
/>
</Fragment>
<Check onSubmit={this.handleCheck} />
</>
);
}
}

View File

@@ -23,7 +23,7 @@ class DnsBlocklist extends Component {
}
handleSubmit = (values, _, { initialValues }) => {
const { filtering: { modalFilterUrl, modalType } } = this.props;
const { modalFilterUrl, modalType } = this.props.filtering;
switch (modalType) {
case MODAL_TYPE.EDIT_FILTERS:

View File

@@ -5,9 +5,11 @@ import { withTranslation } from 'react-i18next';
import flow from 'lodash/flow';
import classNames from 'classnames';
import { validatePath, validateRequiredValue } from '../../helpers/validators';
import { renderCheckboxField, renderInputField } from '../../helpers/form';
import { CheckboxField, renderInputField } from '../../helpers/form';
import { MODAL_OPEN_TIMEOUT, MODAL_TYPE, FORM_NAME } from '../../helpers/constants';
const filtersCatalog = require('../../helpers/filters/filters.json');
const getIconsData = (homepage, source) => ([
{
iconName: 'dashboard',
@@ -32,6 +34,22 @@ const renderIcons = (iconsData) => iconsData.map(({
</svg>
</a>);
const renderCheckboxField = (
props,
) => <CheckboxField
{...props}
input={{
...props.input,
checked: props.disabled || props.input.checked,
}}
/>;
renderCheckboxField.propTypes = {
// https://redux-form.com/8.3.0/docs/api/field.md/#props
input: PropTypes.object.isRequired,
disabled: PropTypes.bool.isRequired,
};
const renderFilters = ({ categories, filters }, selectedSources, t) => Object.keys(categories)
.map((categoryId) => {
const category = categories[categoryId];
@@ -58,12 +76,11 @@ const renderFilters = ({ categories, filters }, selectedSources, t) => Object.ke
return <div key={name} className="d-flex align-items-center pb-1">
<Field
name={`${filter.id}`}
name={filter.id}
type="checkbox"
component={renderCheckboxField}
placeholder={t(name)}
disabled={isSelected}
checked={isSelected}
/>
{renderIcons(iconsData)}
</div>;
@@ -82,7 +99,6 @@ const Form = (props) => {
modalType,
toggleFilteringModal,
selectedSources,
filtersCatalog,
} = props;
const openModal = (modalType, timeout = MODAL_OPEN_TIMEOUT) => {
@@ -168,7 +184,6 @@ Form.propTypes = {
whitelist: PropTypes.bool,
modalType: PropTypes.string.isRequired,
toggleFilteringModal: PropTypes.func.isRequired,
filtersCatalog: PropTypes.object,
selectedSources: PropTypes.object,
};

View File

@@ -78,6 +78,7 @@ class Modal extends Component {
break;
}
default:
break;
}
const title = t(getTitle(modalType, whitelist));
@@ -99,7 +100,6 @@ class Modal extends Component {
<Form
selectedSources={selectedSources}
initialValues={initialValues}
filtersCatalog={filtersCatalog}
modalType={modalType}
onSubmit={handleSubmit}
processingAddFilter={processingAddFilter}

View File

@@ -2,6 +2,7 @@ import React, { Component } from 'react';
import PropTypes from 'prop-types';
import ReactTable from 'react-table';
import { withTranslation } from 'react-i18next';
import { sortIp } from '../../../helpers/helpers';
class Table extends Component {
cellWrap = ({ value }) => (
@@ -21,6 +22,7 @@ class Table extends Component {
{
Header: this.props.t('answer'),
accessor: 'answer',
sortMethod: sortIp,
Cell: this.cellWrap,
},
{

View File

@@ -11,12 +11,16 @@ import IconTooltip from './IconTooltip';
import { renderFormattedClientCell } from '../../../helpers/renderFormattedClientCell';
import { toggleClientBlock } from '../../../actions/access';
import { getBlockClientInfo } from './helpers';
import { getStats } from '../../../actions/stats';
import { updateLogs } from '../../../actions/queryLogs';
const ClientCell = ({
client,
domain,
info,
info: { name, whois_info },
info: {
name, whois_info, disallowed, disallowed_rule,
},
reason,
}) => {
const { t } = useTranslation();
@@ -26,11 +30,6 @@ const ClientCell = ({
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const [isOptionsOpened, setOptionsOpened] = useState(false);
const disallowed_clients = useSelector(
(state) => state.access.disallowed_clients,
shallowEqual,
);
const autoClient = autoClients.find((autoClient) => autoClient.name === client);
const source = autoClient?.source;
const whoisAvailable = whois_info && Object.keys(whois_info).length > 0;
@@ -66,43 +65,50 @@ const ClientCell = ({
const {
confirmMessage,
buttonKey: blockingClientKey,
type,
} = getBlockClientInfo(client, disallowed_clients);
isNotInAllowedList,
} = getBlockClientInfo(client, disallowed, disallowed_rule);
const blockingForClientKey = isFiltered ? 'unblock_for_this_client_only' : 'block_for_this_client_only';
const clientNameBlockingFor = getBlockingClientName(clients, client);
const BUTTON_OPTIONS_TO_ACTION_MAP = {
[blockingForClientKey]: () => {
dispatch(toggleBlockingForClient(buttonType, domain, clientNameBlockingFor));
const BUTTON_OPTIONS = [
{
name: blockingForClientKey,
onClick: () => {
dispatch(toggleBlockingForClient(buttonType, domain, clientNameBlockingFor));
},
},
[blockingClientKey]: () => {
const message = `${type === BLOCK_ACTIONS.BLOCK ? t('adg_will_drop_dns_queries') : ''} ${t(confirmMessage, { ip: client })}`;
if (window.confirm(message)) {
dispatch(toggleClientBlock(type, client));
}
{
name: blockingClientKey,
onClick: async () => {
if (window.confirm(confirmMessage)) {
await dispatch(toggleClientBlock(client, disallowed, disallowed_rule));
await dispatch(updateLogs());
}
},
disabled: isNotInAllowedList,
},
};
];
const onClick = async () => {
await dispatch(toggleBlocking(buttonType, domain));
await dispatch(getStats());
};
const getOptions = (optionToActionMap) => {
const options = Object.entries(optionToActionMap);
const getOptions = (options) => {
if (options.length === 0) {
return null;
}
return <>{options
.map(([name, onClick]) => <div
return <>{options.map(({ name, onClick, disabled }) => <button
key={name}
className="button-action--arrow-option px-4 py-2"
onClick={onClick}
disabled={disabled}
>{t(name)}
</div>)}</>;
</button>)}</>;
};
const content = getOptions(BUTTON_OPTIONS_TO_ACTION_MAP);
const content = getOptions(BUTTON_OPTIONS);
const buttonClass = classNames('button-action button-action--main', {
'button-action--unblock': isFiltered,
@@ -168,6 +174,8 @@ ClientCell.propTypes = {
city: propTypes.string,
orgname: propTypes.string,
}),
disallowed: propTypes.bool.isRequired,
disallowed_rule: propTypes.string.isRequired,
}),
]),
reason: propTypes.string.isRequired,

View File

@@ -14,7 +14,6 @@ import IconTooltip from './IconTooltip';
const DomainCell = ({
answer_dnssec,
service_name,
client_proto,
domain,
time,
@@ -50,10 +49,6 @@ const DomainCell = ({
protocol,
};
if (service_name) {
requestDetailsObj.check_service = service_name;
}
const sourceData = getSourceData(tracker);
const knownTrackerDataObj = {
@@ -103,7 +98,7 @@ const DomainCell = ({
xlinkHref='privacy' contentItemClass='key-colon' renderContent={renderContent}
place='bottom' />
<div className={valueClass}>
<div className="text-truncate" title={domain}>{service_name || domain}</div>
<div className="text-truncate" title={domain}>{domain}</div>
{details && isDetailed
&& <div className="detailed-info d-none d-sm-block text-truncate"
title={details}>{details}</div>}
@@ -117,7 +112,6 @@ DomainCell.propTypes = {
domain: propTypes.string.isRequired,
time: propTypes.string.isRequired,
type: propTypes.string.isRequired,
service_name: propTypes.string,
tracker: propTypes.object,
};

View File

@@ -3,7 +3,11 @@ import { shallowEqual, useSelector } from 'react-redux';
import classNames from 'classnames';
import React from 'react';
import propTypes from 'prop-types';
import { formatElapsedMs, getFilterName } from '../../../helpers/helpers';
import {
formatElapsedMs,
getFilterName,
getServiceName,
} from '../../../helpers/helpers';
import { FILTERED_STATUS, FILTERED_STATUS_TO_META_MAP } from '../../../helpers/constants';
import IconTooltip from './IconTooltip';
@@ -16,6 +20,7 @@ const ResponseCell = ({
upstream,
rule,
filterId,
service_name,
}) => {
const { t } = useTranslation();
const filters = useSelector((state) => state.filtering.filters, shallowEqual);
@@ -52,7 +57,7 @@ const ResponseCell = ({
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_code: status,
filter,
...(service_name ? { service_name: getServiceName(service_name) } : { filter }),
rule_label: rule,
response_table_header: renderResponses(response),
original_response: renderResponses(originalResponse),
@@ -64,8 +69,22 @@ const ResponseCell = ({
...COMMON_CONTENT,
filter: '',
});
const detailedInfo = isBlocked ? filter : formattedElapsedMs;
const getDetailedInfo = (reason) => {
switch (reason) {
case FILTERED_STATUS.FILTERED_BLOCKED_SERVICE:
if (!service_name) {
return formattedElapsedMs;
}
return getServiceName(service_name);
case FILTERED_STATUS.FILTERED_BLACK_LIST:
return filter;
default:
return formattedElapsedMs;
}
};
const detailedInfo = getDetailedInfo(reason);
return <div className="logs__cell logs__cell--response" role="gridcell">
<IconTooltip
@@ -96,6 +115,7 @@ ResponseCell.propTypes = {
upstream: propTypes.string.isRequired,
rule: propTypes.string,
filterId: propTypes.number,
service_name: propTypes.string,
};
export default ResponseCell;

View File

@@ -1,19 +1,18 @@
import { getIpMatchListStatus } from '../../../../helpers/helpers';
import { BLOCK_ACTIONS, IP_MATCH_LIST_STATUS } from '../../../../helpers/constants';
import i18next from 'i18next';
export const BUTTON_PREFIX = 'btn_';
export const getBlockClientInfo = (client, disallowed_clients) => {
const ipMatchListStatus = getIpMatchListStatus(client, disallowed_clients);
export const getBlockClientInfo = (ip, disallowed, disallowed_rule) => {
const confirmMessage = disallowed
? i18next.t('client_confirm_unblock', { ip: disallowed_rule })
: `${i18next.t('adg_will_drop_dns_queries')} ${i18next.t('client_confirm_block', { ip })}`;
const isNotFound = ipMatchListStatus === IP_MATCH_LIST_STATUS.NOT_FOUND;
const type = isNotFound ? BLOCK_ACTIONS.BLOCK : BLOCK_ACTIONS.UNBLOCK;
const buttonKey = i18next.t(disallowed ? 'allow_this_client' : 'disallow_this_client');
const isNotInAllowedList = disallowed && disallowed_rule === '';
const confirmMessage = isNotFound ? 'client_confirm_block' : 'client_confirm_unblock';
const buttonKey = isNotFound ? 'disallow_this_client' : 'allow_this_client';
return {
confirmMessage,
buttonKey,
type,
isNotInAllowedList,
};
};

View File

@@ -11,6 +11,7 @@ import {
formatTime,
getBlockingClientName,
getFilterName,
getServiceName,
processContent,
} from '../../../helpers/helpers';
import {
@@ -31,6 +32,7 @@ import ClientCell from './ClientCell';
import '../Logs.css';
import { toggleClientBlock } from '../../../actions/access';
import { getBlockClientInfo, BUTTON_PREFIX } from './helpers';
import { updateLogs } from '../../../actions/queryLogs';
const Row = memo(({
style,
@@ -48,21 +50,19 @@ const Row = memo(({
const whitelistFilters = useSelector((state) => state.filtering.whitelistFilters, shallowEqual);
const autoClients = useSelector((state) => state.dashboard.autoClients, shallowEqual);
const disallowed_clients = useSelector(
(state) => state.access.disallowed_clients,
shallowEqual,
);
const clients = useSelector((state) => state.dashboard.clients);
const onClick = () => {
if (!isSmallScreen) { return; }
if (!isSmallScreen) {
return;
}
const {
answer_dnssec,
client,
domain,
elapsedMs,
info,
info: { disallowed, disallowed_rule },
reason,
response,
time,
@@ -74,6 +74,7 @@ const Row = memo(({
rule,
originalResponse,
status,
service_name,
} = rowProps;
const hasTracker = !!tracker;
@@ -92,7 +93,7 @@ const Row = memo(({
const isFiltered = checkFiltered(reason);
const isBlocked = reason === FILTERED_STATUS.FILTERED_BLACK_LIST
|| reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE;
|| reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE;
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const onToggleBlock = () => {
@@ -111,8 +112,8 @@ const Row = memo(({
const {
confirmMessage,
buttonKey: blockingClientKey,
type: blockType,
} = getBlockClientInfo(client, disallowed_clients);
isNotInAllowedList,
} = getBlockClientInfo(client, disallowed, disallowed_rule);
const blockingForClientKey = isFiltered ? 'unblock_for_this_client_only' : 'block_for_this_client_only';
const clientNameBlockingFor = getBlockingClientName(clients, client);
@@ -121,18 +122,40 @@ const Row = memo(({
dispatch(toggleBlockingForClient(buttonType, domain, clientNameBlockingFor));
};
const onBlockingClientClick = () => {
const message = `${blockType === BLOCK_ACTIONS.BLOCK ? t('adg_will_drop_dns_queries') : ''} ${t(confirmMessage, { ip: client })}`;
if (window.confirm(message)) {
dispatch(toggleClientBlock(blockType, client));
const onBlockingClientClick = async () => {
if (window.confirm(confirmMessage)) {
await dispatch(toggleClientBlock(client, disallowed, disallowed_rule));
await dispatch(updateLogs());
setModalOpened(false);
}
};
const blockButton = <button
className={classNames('title--border text-center button-action--arrow-option', { 'bg--danger': !isBlocked })}
onClick={onToggleBlock}>
{t(buttonType)}
</button>;
const blockForClientButton = <button
className='text-center font-weight-bold py-2 button-action--arrow-option'
onClick={onBlockingForClientClick}>
{t(blockingForClientKey)}
</button>;
const blockClientButton = <button
className='text-center font-weight-bold py-2 button-action--arrow-option'
onClick={onBlockingClientClick}
disabled={isNotInAllowedList}>
{t(blockingClientKey)}
</button>;
const detailedData = {
time_table_header: formatTime(time, LONG_TIME_FORMAT),
date: formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS),
encryption_status: isBlocked
? <div className="bg--danger">{requestStatus}</div> : requestStatus,
...(FILTERED_STATUS.FILTERED_BLOCKED_SERVICE && service_name
&& { service_name: getServiceName(service_name) }),
domain,
type_table_header: type,
protocol,
@@ -140,12 +163,12 @@ const Row = memo(({
table_name: tracker?.name,
category_label: hasTracker && captitalizeWords(tracker.category),
tracker_source: hasTracker && sourceData
&& <a
href={sourceData.url}
target="_blank"
rel="noopener noreferrer"
className="link--green">{sourceData.name}
</a>,
&& <a
href={sourceData.url}
target="_blank"
rel="noopener noreferrer"
className="link--green">{sourceData.name}
</a>,
response_details: 'title',
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
@@ -162,12 +185,9 @@ const Row = memo(({
source_label: source,
validated_with_dnssec: dnssec_enabled ? Boolean(answer_dnssec) : false,
original_response: originalResponse?.join('\n'),
[BUTTON_PREFIX + buttonType]: <div onClick={onToggleBlock}
className={classNames('title--border text-center', {
'bg--danger': isBlocked,
})}>{t(buttonType)}</div>,
[BUTTON_PREFIX + blockingForClientKey]: <div onClick={onBlockingForClientClick} className='text-center font-weight-bold py-2'>{t(blockingForClientKey)}</div>,
[BUTTON_PREFIX + blockingClientKey]: <div onClick={onBlockingClientClick} className='text-center font-weight-bold py-2'>{t(blockingClientKey)}</div>,
[BUTTON_PREFIX + buttonType]: blockButton,
[BUTTON_PREFIX + blockingForClientKey]: blockForClientButton,
[BUTTON_PREFIX + blockingClientKey]: blockClientButton,
};
setDetailedDataCurrent(processContent(detailedData));
@@ -219,6 +239,7 @@ Row.propTypes = {
rule: propTypes.string,
originalResponse: propTypes.array,
status: propTypes.string.isRequired,
service_name: propTypes.string,
}).isRequired,
isSmallScreen: propTypes.bool.isRequired,
setDetailedDataCurrent: propTypes.func.isRequired,

View File

@@ -12,6 +12,7 @@
--gray-4d: #4D4D4D;
--gray-f3: #F3F3F3;
--gray-8: #888;
--gray-3: #333;
--danger: #DF3812;
--white80: rgba(255, 255, 255, 0.8);
@@ -96,7 +97,7 @@
}
.bg--danger {
color: var(--danger);
color: var(--danger) !important;
}
.form-control--search {
@@ -238,6 +239,10 @@
border: 0;
}
.button-action--small {
width: fit-content;
}
.button-action--unblock {
background: var(--btn-unblock);
}
@@ -293,7 +298,20 @@
background: var(--btn-unblock-disabled);
}
.button-action--arrow-option:hover {
.button-action--arrow-option {
background: transparent;
border: 0;
display: block;
width: 100%;
text-align: left;
color: inherit;
}
.button-action--arrow-option:disabled {
display: none;
}
.tooltip-custom__container .button-action--arrow-option:not(:disabled):hover {
cursor: pointer;
background: var(--gray-f3);
overflow: hidden;
@@ -327,7 +345,7 @@
}
.logs__row--red {
background-color: var(--red);
background-color: var(--red) !important;
}
.logs__row--white {

View File

@@ -15,7 +15,7 @@ import { toggleAllServices } from '../../../helpers/helpers';
import {
renderInputField,
renderGroupField,
renderCheckboxField,
CheckboxField,
renderServiceField,
} from '../../../helpers/form';
import { validateClientId, validateRequiredValue } from '../../../helpers/validators';
@@ -151,7 +151,7 @@ let Form = (props) => {
<Field
name={setting.name}
type="checkbox"
component={renderCheckboxField}
component={CheckboxField}
placeholder={t(setting.placeholder)}
disabled={
setting.name !== 'use_global_settings'
@@ -259,7 +259,7 @@ let Form = (props) => {
</div>
<div className="form__desc mt-0 mb-2">
<Trans components={[
<a href="https://github.com/AdguardTeam/AdGuardHome/wiki/Hosts-Blocklists#ctag"
<a target="_blank" rel="noopener noreferrer" href="https://github.com/AdguardTeam/AdGuardHome/wiki/Hosts-Blocklists#ctag"
key="0">link</a>,
]}>
tags_desc

View File

@@ -46,7 +46,7 @@ const renderInterfaceValues = ({
gateway_ip,
hardware_address,
ip_addresses,
}) => <div className='d-flex align-items-end col-6'>
}) => <div className='d-flex align-items-end dhcp__interfaces-info'>
<ul className="list-unstyled m-0">
{getInterfaceValues({
gateway_ip,
@@ -72,30 +72,30 @@ const Interfaces = () => {
(store) => store.form[FORM_NAME.DHCP_INTERFACES]?.values?.interface_name,
);
if (processingInterfaces || !interfaces) {
return null;
}
const interfaceValue = interface_name && interfaces[interface_name];
return !processingInterfaces
&& interfaces
&& <>
<div className="row align-items-center pb-2">
<div className="col-6">
<Field
name="interface_name"
component={renderSelectField}
className="form-control custom-select"
validate={[validateRequiredValue]}
label='dhcp_interface_select'
>
<option value='' disabled={enabled}>
{t('dhcp_interface_select')}
</option>
{renderInterfaces(interfaces)}
</Field>
</div>
{interfaceValue
&& renderInterfaceValues(interfaceValue)}
</div>
</>;
return <div className="row dhcp__interfaces">
<div className="col col__dhcp">
<Field
name="interface_name"
component={renderSelectField}
className="form-control custom-select pl-4 col-md"
validate={[validateRequiredValue]}
label='dhcp_interface_select'
>
<option value='' disabled={enabled}>
{t('dhcp_interface_select')}
</option>
{renderInterfaces(interfaces)}
</Field>
</div>
{interfaceValue
&& renderInterfaceValues(interfaceValue)}
</div>;
};
renderInterfaceValues.propTypes = {

View File

@@ -0,0 +1,47 @@
.dhcp-form__button {
margin: 0 1rem;
}
.page-title--dhcp {
display: flex;
align-items: center;
}
.col__dhcp {
flex: 0 0 50%;
max-width: 50%;
padding-right: 0;
}
.dhcp__interfaces {
padding-bottom: 1rem;
}
.dhcp__interfaces-info {
padding: 0.5rem 0.75rem 0;
line-break: anywhere;
}
@media (max-width: 991.98px) {
.dhcp-form__button {
margin: 0.5rem 0;
display: block;
}
.page-title--dhcp {
flex-direction: column;
align-items: flex-start;
padding-bottom: 0.5rem;
}
.col__dhcp {
flex: 0 0 100%;
max-width: 100%;
padding-right: 0.75rem;
}
.dhcp__interfaces {
flex-direction: column;
padding-bottom: 0.5rem;
}
}

View File

@@ -31,6 +31,7 @@ import {
calculateDhcpPlaceholdersIpv4,
calculateDhcpPlaceholdersIpv6,
} from '../../../helpers/helpers';
import './index.css';
const Dhcp = () => {
const { t } = useTranslation();
@@ -64,9 +65,14 @@ const Dhcp = () => {
useEffect(() => {
dispatch(getDhcpStatus());
dispatch(getDhcpInterfaces());
}, []);
useEffect(() => {
if (dhcp_available) {
dispatch(getDhcpInterfaces());
}
}, [dhcp_available]);
useEffect(() => {
const [ipv4] = interfaces?.[interface_name]?.ipv4_addresses ?? [];
const [ipv6] = interfaces?.[interface_name]?.ipv6_addresses ?? [];
@@ -107,14 +113,11 @@ const Dhcp = () => {
const enteredSomeValue = enteredSomeV4Value || enteredSomeV6Value || interfaceName;
const getToggleDhcpButton = () => {
const otherDhcpFound = check && (check.v4.other_server.found === STATUS_RESPONSE.YES
|| check.v6.other_server.found === STATUS_RESPONSE.YES);
const filledConfig = interface_name && (Object.values(v4)
.every(Boolean) || Object.values(v6)
.every(Boolean));
const className = classNames('btn btn-sm mr-2', {
const className = classNames('btn btn-sm', {
'btn-gray': enabled,
'btn-outline-success': !enabled,
});
@@ -135,13 +138,13 @@ const Dhcp = () => {
className={className}
onClick={enabled ? onClickDisable : onClickEnable}
disabled={processingDhcp || processingConfig
|| (!enabled && (!filledConfig || !check || otherDhcpFound))}
|| (!enabled && (!filledConfig || !check))}
>
<Trans>{enabled ? 'dhcp_disable' : 'dhcp_enable'}</Trans>
</button>;
};
const statusButtonClass = classNames('btn btn-sm mx-2', {
const statusButtonClass = classNames('btn btn-sm dhcp-form__button', {
'btn-loading btn-primary': processingStatus,
'btn-outline-primary': !processingStatus,
});
@@ -171,28 +174,24 @@ const Dhcp = () => {
const toggleDhcpButton = getToggleDhcpButton();
return <>
<PageTitle title={t('dhcp_settings')} subtitle={t('dhcp_description')}>
<div className="page-title__actions">
<div className="mb-3">
{toggleDhcpButton}
<button
type="button"
className={statusButtonClass}
onClick={onClick}
disabled={enabled || !interface_name || processingConfig}
>
<Trans>check_dhcp_servers</Trans>
</button>
<button
type="button"
className='btn btn-sm mx-2 btn-outline-secondary'
disabled={!enteredSomeValue || processingConfig}
onClick={clear}
>
<Trans>reset_settings</Trans>
</button>
</div>
</div>
<PageTitle title={t('dhcp_settings')} subtitle={t('dhcp_description')} containerClass="page-title--dhcp">
{toggleDhcpButton}
<button
type="button"
className={statusButtonClass}
onClick={onClick}
disabled={enabled || !interface_name || processingConfig}
>
<Trans>check_dhcp_servers</Trans>
</button>
<button
type="button"
className='btn btn-sm btn-outline-secondary'
disabled={!enteredSomeValue || processingConfig}
onClick={clear}
>
<Trans>reset_settings</Trans>
</button>
</PageTitle>
{!processing && !processingInterfaces
&& <>

View File

@@ -4,16 +4,15 @@ import { Field, reduxForm } from 'redux-form';
import { Trans, useTranslation } from 'react-i18next';
import { shallowEqual, useSelector } from 'react-redux';
import { renderInputField, toNumber } from '../../../../helpers/form';
import { validateRequiredValue } from '../../../../helpers/validators';
import { CACHE_CONFIG_FIELDS, FORM_NAME, UINT32_RANGE } from '../../../../helpers/constants';
import { replaceZeroWithEmptyString } from '../../../../helpers/helpers';
const getInputFields = (validateRequiredValue) => [
const INPUTS_FIELDS = [
{
name: CACHE_CONFIG_FIELDS.cache_size,
title: 'cache_size',
description: 'cache_size_desc',
placeholder: 'enter_cache_size',
validate: validateRequiredValue,
},
{
name: CACHE_CONFIG_FIELDS.cache_ttl_min,
@@ -39,37 +38,34 @@ const Form = ({
cache_ttl_max, cache_ttl_min,
} = useSelector((state) => state.form[FORM_NAME.CACHE].values, shallowEqual);
const minExceedsMax = typeof cache_ttl_min === 'number'
&& typeof cache_ttl_max === 'number'
&& cache_ttl_min > cache_ttl_max;
const INPUTS_FIELDS = getInputFields(validateRequiredValue);
const minExceedsMax = cache_ttl_min > cache_ttl_max;
return <form onSubmit={handleSubmit}>
<div className="row">
{INPUTS_FIELDS.map(({
name, title, description, placeholder, validate, min = 0, max = UINT32_RANGE.MAX,
}) => <div className="col-12" key={name}>
<div className="col-12 col-md-7 p-0">
<div className="form__group form__group--settings">
<label htmlFor={name}
className="form__label form__label--with-desc">{t(title)}</label>
<div className="form__desc form__desc--top">{t(description)}</div>
<Field
name={name}
type="number"
component={renderInputField}
placeholder={t(placeholder)}
disabled={processingSetConfig}
normalize={toNumber}
className="form-control"
validate={validate}
min={min}
max={max}
/>
<div className="col-12 col-md-7 p-0">
<div className="form__group form__group--settings">
<label htmlFor={name}
className="form__label form__label--with-desc">{t(title)}</label>
<div className="form__desc form__desc--top">{t(description)}</div>
<Field
name={name}
type="number"
component={renderInputField}
placeholder={t(placeholder)}
disabled={processingSetConfig}
className="form-control"
validate={validate}
normalizeOnBlur={replaceZeroWithEmptyString}
normalize={toNumber}
min={min}
max={max}
/>
</div>
</div>
</div>
</div>)}
</div>)}
{minExceedsMax
&& <span className="text-danger pl-3 pb-3">{t('ttl_cache_validation')}</span>}
</div>

View File

@@ -1,12 +1,10 @@
import React from 'react';
import { useTranslation } from 'react-i18next';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import { change } from 'redux-form';
import Card from '../../../ui/Card';
import Form from './Form';
import { setDnsConfig } from '../../../../actions/dnsConfig';
import { selectCompletedFields } from '../../../../helpers/helpers';
import { CACHE_CONFIG_FIELDS, FORM_NAME } from '../../../../helpers/constants';
import { replaceEmptyStringsWithZeroes, replaceZeroWithEmptyString } from '../../../../helpers/helpers';
const CacheConfig = () => {
const { t } = useTranslation();
@@ -16,16 +14,7 @@ const CacheConfig = () => {
} = useSelector((state) => state.dnsConfig, shallowEqual);
const handleFormSubmit = (values) => {
const completedFields = selectCompletedFields(values);
Object.entries(completedFields).forEach(([k, v]) => {
if ((k === CACHE_CONFIG_FIELDS.cache_ttl_min
|| k === CACHE_CONFIG_FIELDS.cache_ttl_max)
&& v === 0) {
dispatch(change(FORM_NAME.CACHE, k, ''));
}
});
const completedFields = replaceEmptyStringsWithZeroes(values);
dispatch(setDnsConfig(completedFields));
};
@@ -39,9 +28,9 @@ const CacheConfig = () => {
<div className="form">
<Form
initialValues={{
cache_size,
cache_ttl_max,
cache_ttl_min,
cache_size: replaceZeroWithEmptyString(cache_size),
cache_ttl_max: replaceZeroWithEmptyString(cache_ttl_max),
cache_ttl_min: replaceZeroWithEmptyString(cache_ttl_min),
}}
onSubmit={handleFormSubmit}
/>

View File

@@ -6,7 +6,7 @@ import { Trans, useTranslation } from 'react-i18next';
import {
renderInputField,
renderRadioField,
renderCheckboxField,
CheckboxField,
toNumber,
} from '../../../../helpers/form';
import {
@@ -97,7 +97,7 @@ const Form = ({
<Field
name={name}
type="checkbox"
component={renderCheckboxField}
component={CheckboxField}
placeholder={t(placeholder)}
disabled={processing}
subtitle={t(subtitle)}

View File

@@ -1,32 +1,17 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next';
import { COMMENT_LINE_DEFAULT_TOKEN } from '../../../../helpers/constants';
const Examples = (props) => (
<div className="list leading-loose">
<p>
<Trans
components={[
<a
href="https://kb.adguard.com/general/dns-providers"
target="_blank"
rel="noopener noreferrer"
key="0"
>
DNS providers
</a>,
]}
>
dns_providers
</Trans>
</p>
<Trans>examples_title</Trans>:
<ol className="leading-loose">
<li>
<code>9.9.9.9</code> - {props.t('example_upstream_regular')}
<code>94.140.14.140</code> - {props.t('example_upstream_regular')}
</li>
<li>
<code>tls://dns.quad9.net</code> &nbsp;
<code>tls://dns-unfiltered.adguard.com</code> &nbsp;
<span>
<Trans
components={[
@@ -45,7 +30,7 @@ const Examples = (props) => (
</span>
</li>
<li>
<code>https://dns.quad9.net/dns-query</code> &nbsp;
<code>https://dns-unfiltered.adguard.com/dns-query</code> &nbsp;
<span>
<Trans
components={[
@@ -85,7 +70,7 @@ const Examples = (props) => (
</span>
</li>
<li>
<code>tcp://9.9.9.9</code> <Trans>example_upstream_tcp</Trans>
<code>tcp://94.140.14.140</code> <Trans>example_upstream_tcp</Trans>
</li>
<li>
<code>sdns://...</code> &nbsp;
@@ -123,7 +108,7 @@ const Examples = (props) => (
</span>
</li>
<li>
<code>[/example.local/]9.9.9.9</code> &nbsp;
<code>[/example.local/]94.140.14.140</code> &nbsp;
<span>
<Trans
components={[
@@ -141,6 +126,12 @@ const Examples = (props) => (
</Trans>
</span>
</li>
<li>
<code>{COMMENT_LINE_DEFAULT_TOKEN} comment</code> &nbsp;
<span>
<Trans>example_upstream_comment</Trans>
</span>
</li>
</ol>
</div>
);

View File

@@ -1,43 +1,114 @@
import React from 'react';
import React, { useRef } from 'react';
import { useDispatch, useSelector } from 'react-redux';
import PropTypes from 'prop-types';
import { Field, reduxForm } from 'redux-form';
import { Trans, useTranslation } from 'react-i18next';
import classnames from 'classnames';
import Examples from './Examples';
import { renderRadioField, renderTextareaField } from '../../../../helpers/form';
import { DNS_REQUEST_OPTIONS, FORM_NAME, UPSTREAM_CONFIGURATION_WIKI_LINK } from '../../../../helpers/constants';
import { testUpstream } from '../../../../actions';
import { removeEmptyLines } from '../../../../helpers/helpers';
import {
DNS_REQUEST_OPTIONS,
FORM_NAME,
isFirefox,
UPSTREAM_CONFIGURATION_WIKI_LINK,
} from '../../../../helpers/constants';
import { testUpstreamWithFormValues } from '../../../../actions';
import { removeEmptyLines, trimLinesAndRemoveEmpty } from '../../../../helpers/helpers';
import { getTextareaCommentsHighlight, syncScroll } from '../../../../helpers/highlightTextareaComments';
import '../../../ui/texareaCommentsHighlight.css';
const UPSTREAM_DNS_NAME = 'upstream_dns';
const UPSTREAM_MODE_NAME = 'upstream_mode';
const Title = () => {
const components = {
a: <a href={UPSTREAM_CONFIGURATION_WIKI_LINK} target="_blank"
rel="noopener noreferrer" />,
};
const renderField = ({
name, component, type, className, placeholder,
subtitle, value, normalizeOnBlur, containerClass, onScroll,
}) => {
const { t } = useTranslation();
const processingTestUpstream = useSelector((state) => state.settings.processingTestUpstream);
const processingSetConfig = useSelector((state) => state.dnsConfig.processingSetConfig);
return <label className="form__label" htmlFor={UPSTREAM_DNS_NAME}>
<Trans components={components}>upstream_dns_help</Trans>
</label>;
return <div
key={placeholder}
className={classnames('col-12 mb-4', containerClass)}
>
<Field
id={name}
value={value}
name={name}
component={component}
type={type}
className={className}
placeholder={t(placeholder)}
subtitle={t(subtitle)}
disabled={processingSetConfig || processingTestUpstream}
normalizeOnBlur={normalizeOnBlur}
onScroll={onScroll}
/>
</div>;
};
const getInputFields = (upstream_dns_file) => [
renderField.propTypes = {
name: PropTypes.string.isRequired,
component: PropTypes.element.isRequired,
type: PropTypes.string.isRequired,
className: PropTypes.string,
placeholder: PropTypes.string.isRequired,
subtitle: PropTypes.string,
value: PropTypes.string,
normalizeOnBlur: PropTypes.func,
containerClass: PropTypes.string,
onScroll: PropTypes.func,
};
const renderTextareaWithHighlightField = (props) => {
const upstream_dns = useSelector((store) => store.form[FORM_NAME.UPSTREAM].values.upstream_dns);
const upstream_dns_file = useSelector((state) => state.dnsConfig.upstream_dns_file);
const ref = useRef(null);
const onScroll = (e) => syncScroll(e, ref);
return <>
{renderTextareaField({
...props,
disabled: !!upstream_dns_file,
onScroll,
normalizeOnBlur: trimLinesAndRemoveEmpty,
})}
{getTextareaCommentsHighlight(ref, upstream_dns)}
</>;
};
renderTextareaWithHighlightField.propTypes = {
className: PropTypes.string.isRequired,
disabled: PropTypes.bool,
id: PropTypes.string.isRequired,
input: PropTypes.object,
meta: PropTypes.object,
normalizeOnBlur: PropTypes.func,
onScroll: PropTypes.func,
placeholder: PropTypes.string.isRequired,
subtitle: PropTypes.string.isRequired,
type: PropTypes.string.isRequired,
};
const INPUT_FIELDS = [
{
getTitle: Title,
name: UPSTREAM_DNS_NAME,
type: 'text',
value: 'test',
component: renderTextareaField,
className: 'form-control form-control--textarea font-monospace',
component: renderTextareaWithHighlightField,
className: classnames('form-control form-control--textarea font-monospace text-input', {
'text-input--larger': isFirefox,
}),
containerClass: classnames('text-edit-container', {
'mb-4': !isFirefox,
'mb-6': isFirefox,
}),
placeholder: 'upstream_dns',
normalizeOnBlur: removeEmptyLines,
disabled: !!upstream_dns_file,
},
{
name: 'upstream_mode',
name: UPSTREAM_MODE_NAME,
type: 'radio',
value: DNS_REQUEST_OPTIONS.LOAD_BALANCING,
component: renderRadioField,
@@ -45,7 +116,7 @@ const getInputFields = (upstream_dns_file) => [
placeholder: 'load_balancing',
},
{
name: 'upstream_mode',
name: UPSTREAM_MODE_NAME,
type: 'radio',
value: DNS_REQUEST_OPTIONS.PARALLEL,
component: renderRadioField,
@@ -53,7 +124,7 @@ const getInputFields = (upstream_dns_file) => [
placeholder: 'parallel_requests',
},
{
name: 'upstream_mode',
name: UPSTREAM_MODE_NAME,
type: 'radio',
value: DNS_REQUEST_OPTIONS.FASTEST_ADDR,
component: renderRadioField,
@@ -68,44 +139,39 @@ const Form = ({
const dispatch = useDispatch();
const { t } = useTranslation();
const upstream_dns = useSelector((store) => store.form[FORM_NAME.UPSTREAM].values.upstream_dns);
const bootstrap_dns = useSelector(
(store) => store.form[FORM_NAME.UPSTREAM].values.bootstrap_dns,
);
const upstream_dns_file = useSelector((state) => state.dnsConfig.upstream_dns_file);
const processingTestUpstream = useSelector((state) => state.settings.processingTestUpstream);
const processingSetConfig = useSelector((state) => state.dnsConfig.processingSetConfig);
const handleUpstreamTest = () => dispatch(testUpstream({
upstream_dns,
bootstrap_dns,
}));
const handleUpstreamTest = () => dispatch(testUpstreamWithFormValues());
const testButtonClass = classnames('btn btn-primary btn-standard mr-2', {
'btn-loading': processingTestUpstream,
});
const INPUT_FIELDS = getInputFields(upstream_dns_file);
const components = {
a: <a href={UPSTREAM_CONFIGURATION_WIKI_LINK} target="_blank"
rel="noopener noreferrer" />,
};
return <form onSubmit={handleSubmit}>
return <form onSubmit={handleSubmit} className="form--upstream">
<div className="row">
{INPUT_FIELDS.map(({
name, component, type, className, placeholder,
getTitle, subtitle, disabled, value, normalizeOnBlur,
}) => <div className="col-12 mb-4" key={placeholder}>
{typeof getTitle === 'function' && getTitle()}
<Field
id={name}
value={value}
name={name}
component={component}
type={type}
className={className}
placeholder={t(placeholder)}
subtitle={t(subtitle)}
disabled={processingSetConfig || processingTestUpstream || disabled}
normalizeOnBlur={normalizeOnBlur}
/>
</div>)}
<label className="col form__label" htmlFor={UPSTREAM_DNS_NAME}>
<Trans components={components}>upstream_dns_help</Trans>
{' '}
<Trans components={[
<a
href="https://kb.adguard.com/general/dns-providers"
target="_blank"
rel="noopener noreferrer"
key="0"
>
DNS providers
</a>,
]}>
dns_providers
</Trans>
</label>
{INPUT_FIELDS.map(renderField)}
<div className="col-12">
<Examples />
<hr />

View File

@@ -50,7 +50,7 @@ const CertificateStatus = ({
{dnsNames && (
<li>
<Trans>encryption_hostnames</Trans>:&nbsp;
{dnsNames}
{dnsNames.join(', ')}
</li>
)}
</Fragment>
@@ -65,7 +65,7 @@ CertificateStatus.propTypes = {
subject: PropTypes.string,
issuer: PropTypes.string,
notAfter: PropTypes.string,
dnsNames: PropTypes.string,
dnsNames: PropTypes.arrayOf(PropTypes.string),
};
export default withTranslation()(CertificateStatus);

View File

@@ -7,12 +7,12 @@ import flow from 'lodash/flow';
import {
renderInputField,
renderCheckboxField,
CheckboxField,
renderRadioField,
toNumber,
} from '../../../helpers/form';
import {
validateIsSafePort, validatePort, validatePortQuic, validatePortTLS,
validateServerName, validateIsSafePort, validatePort, validatePortQuic, validatePortTLS,
} from '../../../helpers/validators';
import i18n from '../../../i18n';
import KeyStatus from './KeyStatus';
@@ -101,7 +101,7 @@ let Form = (props) => {
<Field
name="enabled"
type="checkbox"
component={renderCheckboxField}
component={CheckboxField}
placeholder={t('encryption_enable')}
onChange={handleChange}
/>
@@ -127,6 +127,7 @@ let Form = (props) => {
placeholder={t('encryption_server_enter')}
onChange={handleChange}
disabled={!isEnabled}
validate={validateServerName}
/>
<div className="form__desc">
<Trans>encryption_server_desc</Trans>
@@ -138,7 +139,7 @@ let Form = (props) => {
<Field
name="force_https"
type="checkbox"
component={renderCheckboxField}
component={CheckboxField}
placeholder={t('encryption_redirect')}
onChange={handleChange}
disabled={!isEnabled}
@@ -232,7 +233,7 @@ let Form = (props) => {
<Trans
values={{ link: 'letsencrypt.org' }}
components={[
<a href="https://letsencrypt.org/" key="0">
<a target="_blank" rel="noopener noreferrer" href="https://letsencrypt.org/" key="0">
link
</a>,
]}
@@ -413,7 +414,7 @@ Form.propTypes = {
valid_key: PropTypes.bool,
valid_cert: PropTypes.bool,
valid_pair: PropTypes.bool,
dns_names: PropTypes.string,
dns_names: PropTypes.arrayOf(PropTypes.string),
key_type: PropTypes.string,
issuer: PropTypes.string,
subject: PropTypes.string,

View File

@@ -4,8 +4,12 @@ import { Field, reduxForm } from 'redux-form';
import { Trans, withTranslation } from 'react-i18next';
import flow from 'lodash/flow';
import { renderCheckboxField, toNumber } from '../../../helpers/form';
import { FILTERS_INTERVALS_HOURS, FORM_NAME } from '../../../helpers/constants';
import { CheckboxField, toNumber } from '../../../helpers/form';
import {
FILTERS_INTERVALS_HOURS,
FILTERS_RELATIVE_LINK,
FORM_NAME,
} from '../../../helpers/constants';
const getTitleForInterval = (interval, t) => {
if (interval === 0) {
@@ -40,6 +44,10 @@ const Form = (props) => {
handleSubmit, handleChange, processing, t,
} = props;
const components = {
a: <a href={FILTERS_RELATIVE_LINK} rel="noopener noreferrer" />,
};
return (
<form onSubmit={handleSubmit}>
<div className="row">
@@ -49,9 +57,11 @@ const Form = (props) => {
name="enabled"
type="checkbox"
modifier="checkbox--settings"
component={renderCheckboxField}
component={CheckboxField}
placeholder={t('block_domain_use_filters_and_hosts')}
subtitle={t('filters_block_toggle_hint')}
subtitle={<Trans components={components}>
filters_block_toggle_hint
</Trans>}
onChange={handleChange}
disabled={processing}
/>

View File

@@ -0,0 +1,11 @@
.form__button {
margin-left: 1.5rem;
}
@media (max-width: 500px) {
.form__button {
margin-left: 0;
margin-top: 1rem;
display: block;
}
}

View File

@@ -4,8 +4,9 @@ import { Field, reduxForm } from 'redux-form';
import { Trans, withTranslation } from 'react-i18next';
import flow from 'lodash/flow';
import { renderCheckboxField, renderRadioField, toNumber } from '../../../helpers/form';
import { CheckboxField, renderRadioField, toNumber } from '../../../helpers/form';
import { FORM_NAME, QUERY_LOG_INTERVALS_DAYS } from '../../../helpers/constants';
import '../FormButton.css';
const getIntervalFields = (processing, t, toNumber) => QUERY_LOG_INTERVALS_DAYS.map((interval) => {
const title = interval === 1 ? t('interval_24_hour') : t('interval_days', { count: interval });
@@ -35,7 +36,7 @@ const Form = (props) => {
<Field
name="enabled"
type="checkbox"
component={renderCheckboxField}
component={CheckboxField}
placeholder={t('query_log_enable')}
disabled={processing}
/>
@@ -44,7 +45,7 @@ const Form = (props) => {
<Field
name="anonymize_client_ip"
type="checkbox"
component={renderCheckboxField}
component={CheckboxField}
placeholder={t('anonymize_client_ip')}
subtitle={t('anonymize_client_ip_desc')}
disabled={processing}
@@ -68,7 +69,7 @@ const Form = (props) => {
</button>
<button
type="button"
className="btn btn-outline-secondary btn-standard ml-5"
className="btn btn-outline-secondary btn-standard form__button"
onClick={() => handleClear()}
disabled={processingClear}
>

View File

@@ -6,6 +6,7 @@ import flow from 'lodash/flow';
import { renderRadioField, toNumber } from '../../../helpers/form';
import { FORM_NAME, STATS_INTERVALS_DAYS } from '../../../helpers/constants';
import '../FormButton.css';
const getIntervalFields = (processing, t, toNumber) => STATS_INTERVALS_DAYS.map((interval) => {
const title = interval === 1 ? t('interval_24_hour') : t('interval_days', { count: interval });
@@ -52,7 +53,7 @@ const Form = (props) => {
</button>
<button
type="button"
className="btn btn-outline-secondary btn-standard ml-5"
className="btn btn-outline-secondary btn-standard form__button"
onClick={() => handleReset()}
disabled={processingReset}
>

View File

@@ -80,7 +80,6 @@
.card-body-stats {
position: relative;
flex: 1 1 auto;
height: calc(100% - 3rem);
margin: 0;
padding: 1rem 1.5rem;
}

View File

@@ -6,6 +6,50 @@ import { useSelector } from 'react-redux';
import Topline from './Topline';
import { EMPTY_DATE } from '../../helpers/constants';
const EXPIRATION_ENUM = {
VALID: 'VALID',
EXPIRED: 'EXPIRED',
EXPIRING: 'EXPIRING',
};
const EXPIRATION_STATE = {
[EXPIRATION_ENUM.EXPIRED]: {
toplineType: 'danger',
i18nKey: 'topline_expired_certificate',
},
[EXPIRATION_ENUM.EXPIRING]: {
toplineType: 'warning',
i18nKey: 'topline_expiring_certificate',
},
};
const getExpirationFlags = (not_after) => {
const DAYS_BEFORE_EXPIRATION = 5;
const now = Date.now();
const isExpiring = isAfter(addDays(now, DAYS_BEFORE_EXPIRATION), not_after);
const isExpired = isAfter(now, not_after);
return {
isExpiring,
isExpired,
};
};
const getExpirationEnumKey = (not_after) => {
const { isExpiring, isExpired } = getExpirationFlags(not_after);
if (isExpired) {
return EXPIRATION_ENUM.EXPIRED;
}
if (isExpiring) {
return EXPIRATION_ENUM.EXPIRING;
}
return EXPIRATION_ENUM.VALID;
};
const EncryptionTopline = () => {
const not_after = useSelector((state) => state.encryption.not_after);
@@ -13,30 +57,21 @@ const EncryptionTopline = () => {
return null;
}
const isAboutExpire = isAfter(addDays(Date.now(), 30), not_after);
const isExpired = isAfter(Date.now(), not_after);
const expirationStateKey = getExpirationEnumKey(not_after);
if (isExpired) {
return (
<Topline type="danger">
<Trans components={[<a href="#encryption" key="0">link</a>]}>
topline_expired_certificate
</Trans>
</Topline>
);
if (expirationStateKey === EXPIRATION_ENUM.VALID) {
return null;
}
if (isAboutExpire) {
return (
<Topline type="warning">
const { toplineType, i18nKey } = EXPIRATION_STATE[expirationStateKey];
return (
<Topline type={toplineType}>
<Trans components={[<a href="#encryption" key="0">link</a>]}>
topline_expiring_certificate
{i18nKey}
</Trans>
</Topline>
);
}
return false;
);
};
export default EncryptionTopline;

View File

@@ -1,56 +1,50 @@
import React, { useState } from 'react';
import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next';
import { Trans, useTranslation } from 'react-i18next';
import i18next from 'i18next';
import { useSelector } from 'react-redux';
import Tabs from './Tabs';
import Icons from './Icons';
import { getPathWithQueryString } from '../../helpers/helpers';
const dnsPrivacyList = [{
title: 'Android',
list: [
{
label: 'setup_dns_privacy_android_1',
},
{
label: 'setup_dns_privacy_android_2',
components: [
{
key: 0,
href: 'https://adguard.com/adguard-android/overview.html',
},
<code key="1">text</code>,
],
},
{
label: 'setup_dns_privacy_android_3',
components: [
{
key: 0,
href: 'https://getintra.org/',
},
<code key="1">text</code>,
],
},
],
},
{
title: 'iOS',
list: [
{
label: 'setup_dns_privacy_ios_1',
components: [
{
key: 0,
href: 'https://itunes.apple.com/app/id1452162351',
},
<code key="1">text</code>,
{
key: 2,
href: 'https://dnscrypt.info/stamps',
},
const MOBILE_CONFIG_LINKS = {
DOT: '/apple/dot.mobileconfig',
DOH: '/apple/doh.mobileconfig',
};
],
},
/* FIXME: find out `client_id` */
const renderMobileconfigInfo = ({ label, components, server_name }) => <li key={label}>
<Trans components={components}>{label}</Trans>
<ul>
<li>
<a href={getPathWithQueryString(MOBILE_CONFIG_LINKS.DOT, { host: server_name, client_id: 'client_id' })}
download>{i18next.t('download_mobileconfig_dot')}</a>
</li>
<li>
<a href={getPathWithQueryString(MOBILE_CONFIG_LINKS.DOH, { host: server_name, client_id: 'client_id' })}
download>{i18next.t('download_mobileconfig_doh')}</a>
</li>
</ul>
</li>;
const renderLi = ({ label, components }) => <li key={label}>
<Trans components={components?.map((props) => {
if (React.isValidElement(props)) {
return props;
}
const {
// eslint-disable-next-line react/prop-types
href, target = '_blank', rel = 'noopener noreferrer', key = '0',
} = props;
return <a href={href} target={target} rel={rel} key={key}>link</a>;
})}>
{label}
</Trans>
</li>;
const getDnsPrivacyList = (server_name) => {
const iosList = [
{
label: 'setup_dns_privacy_ios_2',
components: [
@@ -58,84 +52,134 @@ const dnsPrivacyList = [{
key: 0,
href: 'https://adguard.com/adguard-ios/overview.html',
},
<code key="1">text</code>,
<code key="1">text</code>,
],
},
],
},
{
title: 'setup_dns_privacy_other_title',
list: [
{
label: 'setup_dns_privacy_other_1',
},
{
label: 'setup_dns_privacy_other_2',
label: 'setup_dns_privacy_ios_1',
components: [
{
key: 0,
href: 'https://github.com/AdguardTeam/dnsproxy',
href: 'https://itunes.apple.com/app/id1452162351',
},
],
},
{
href: 'https://github.com/jedisct1/dnscrypt-proxy',
label: 'setup_dns_privacy_other_3',
components: [
<code key="1">text</code>,
{
key: 0,
href: 'https://github.com/jedisct1/dnscrypt-proxy',
key: 2,
href: 'https://dnscrypt.info/stamps',
},
<code key="1">text</code>,
],
},
{
label: 'setup_dns_privacy_other_4',
components: [
{
key: 0,
href: 'https://github.com/jedisct1/dnscrypt-proxy',
},
<code key="1">text</code>,
],
},
{
label: 'setup_dns_privacy_other_5',
components: [
{
key: 0,
href: 'https://dnscrypt.info/implementations',
},
{
key: 1,
href: 'https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Clients',
},
],
},
],
},
];
const renderDnsPrivacyList = ({ title, list }) => <div className="tab__paragraph">
],
}];
/* Insert second element if can generate .mobileconfig links */
if (server_name) {
iosList.splice(1, 0, {
label: 'setup_dns_privacy_4',
components: {
highlight: <code />,
},
renderComponent: ({ label, components }) => renderMobileconfigInfo({
label,
components,
server_name,
}),
});
}
return [{
title: 'Android',
list: [
{
label: 'setup_dns_privacy_android_1',
},
{
label: 'setup_dns_privacy_android_2',
components: [
{
key: 0,
href: 'https://adguard.com/adguard-android/overview.html',
},
<code key="1">text</code>,
],
},
{
label: 'setup_dns_privacy_android_3',
components: [
{
key: 0,
href: 'https://getintra.org/',
},
<code key="1">text</code>,
],
},
],
},
{
title: 'iOS',
list: iosList,
},
{
title: 'setup_dns_privacy_other_title',
list: [
{
label: 'setup_dns_privacy_other_1',
},
{
label: 'setup_dns_privacy_other_2',
components: [
{
key: 0,
href: 'https://github.com/AdguardTeam/dnsproxy',
},
],
},
{
href: 'https://github.com/jedisct1/dnscrypt-proxy',
label: 'setup_dns_privacy_other_3',
components: [
{
key: 0,
href: 'https://github.com/jedisct1/dnscrypt-proxy',
},
<code key="1">text</code>,
],
},
{
label: 'setup_dns_privacy_other_4',
components: [
{
key: 0,
href: 'https://support.mozilla.org/kb/firefox-dns-over-https',
},
<code key="1">text</code>,
],
},
{
label: 'setup_dns_privacy_other_5',
components: [
{
key: 0,
href: 'https://dnscrypt.info/implementations',
},
{
key: 1,
href: 'https://dnsprivacy.org/wiki/display/DP/DNS+Privacy+Clients',
},
],
},
],
},
];
};
const renderDnsPrivacyList = ({ title, list }) => <div className="tab__paragraph" key={title}>
<strong><Trans>{title}</Trans></strong>
<ul>{list.map(({ label, components }) => <li key={label}>
<Trans
components={components?.map((props) => {
if (React.isValidElement(props)) {
return props;
}
const {
// eslint-disable-next-line react/prop-types
href, target = '_blank', rel = 'noopener noreferrer', key = '0',
} = props;
return <a
href={href} target={target}
rel={rel} key={key}>link</a>;
})}>
{label}
</Trans>
</li>)}
<ul>{list.map(
({
label,
components,
renderComponent = renderLi,
}) => renderComponent({ label, components }),
)}
</ul>
</div>;
@@ -143,6 +187,7 @@ const getTabs = ({
tlsAddress,
httpsAddress,
showDnsPrivacyNotice,
server_name,
t,
}) => ({
Router: {
@@ -195,8 +240,8 @@ const getTabs = ({
},
dns_privacy: {
title: 'dns_privacy',
// eslint-disable-next-line react/display-name
getTitle: () => <div label="dns_privacy" title={t('dns_privacy')}>
getTitle: function Title() {
return <div label="dns_privacy" title={t('dns_privacy')}>
<div className="tab__text">
{tlsAddress?.length > 0 && (
<div className="tab__paragraph">
@@ -248,17 +293,18 @@ const getTabs = ({
setup_dns_privacy_3
</Trans>
</div>
{dnsPrivacyList.map(renderDnsPrivacyList)}
{getDnsPrivacyList(server_name).map(renderDnsPrivacyList)}
</>}
</div>
</div>,
</div>;
},
},
});
const renderContent = ({ title, list, getTitle }, t) => <div key={title} label={t(title)}>
<div className="tab__title">{t(title)}</div>
const renderContent = ({ title, list, getTitle }) => <div key={title} label={i18next.t(title)}>
<div className="tab__title">{i18next.t(title)}</div>
<div className="tab__text">
{typeof getTitle === 'function' && getTitle()}
{getTitle?.()}
{list
&& <ol>{list.map((item) => <li key={item}>
<Trans>{item}</Trans>
@@ -267,9 +313,11 @@ const renderContent = ({ title, list, getTitle }, t) => <div key={title} label={
</div>
</div>;
const Guide = ({ dnsAddresses, t }) => {
const tlsAddress = (dnsAddresses && dnsAddresses.filter((item) => item.includes('tls://'))) || '';
const httpsAddress = (dnsAddresses && dnsAddresses.filter((item) => item.includes('https://'))) || '';
const Guide = ({ dnsAddresses }) => {
const { t } = useTranslation();
const server_name = useSelector((state) => state.encryption.server_name);
const tlsAddress = dnsAddresses?.filter((item) => item.includes('tls://')) ?? '';
const httpsAddress = dnsAddresses?.filter((item) => item.includes('https://')) ?? '';
const showDnsPrivacyNotice = httpsAddress.length < 1 && tlsAddress.length < 1;
const [activeTabLabel, setActiveTabLabel] = useState('Router');
@@ -278,10 +326,11 @@ const Guide = ({ dnsAddresses, t }) => {
tlsAddress,
httpsAddress,
showDnsPrivacyNotice,
server_name,
t,
});
const activeTab = renderContent(tabs[activeTabLabel], t);
const activeTab = renderContent(tabs[activeTabLabel]);
return (
<div>
@@ -298,12 +347,12 @@ Guide.defaultProps = {
Guide.propTypes = {
dnsAddresses: PropTypes.array,
t: PropTypes.func.isRequired,
};
renderDnsPrivacyList.propTypes = {
title: PropTypes.string.isRequired,
list: PropTypes.array.isRequired,
renderList: PropTypes.func,
};
renderContent.propTypes = {
@@ -312,4 +361,11 @@ renderContent.propTypes = {
getTitle: PropTypes.func,
};
export default withTranslation()(Guide);
renderLi.propTypes = {
label: PropTypes.string,
components: PropTypes.string,
};
renderMobileconfigInfo.propTypes = renderLi.propTypes;
export default Guide;

View File

@@ -245,6 +245,16 @@ const Icons = () => (
d="M41 4H9C6.243 4 4 6.243 4 9v32c0 2.757 2.243 5 5 5h32c2.757 0 5-2.243 5-5V9c0-2.757-2.243-5-5-5zm-3.994 18.323a7.482 7.482 0 0 1-.69.035 7.492 7.492 0 0 1-6.269-3.388v11.537a8.527 8.527 0 1 1-8.527-8.527c.178 0 .352.016.527.027v4.202c-.175-.021-.347-.053-.527-.053a4.351 4.351 0 1 0 0 8.704c2.404 0 4.527-1.894 4.527-4.298l.042-19.594h4.016a7.488 7.488 0 0 0 6.901 6.685v4.67z" />
</symbol>
<symbol id="service_qq" viewBox="0 0 32 32" >
<g fill="none" fillRule="evenodd">
<path d="M0 0h32v32H0z" />
<g fill="currentColor" fillRule="nonzero">
<path d="M11.25 32C8.342 32 6 30.74 6 29.242c0-1.497 2.342-2.757 5.25-2.757s5.25 1.26 5.25 2.757S14.158 32 11.25 32zM27 29.242c0-1.497-2.342-2.757-5.25-2.757s-5.25 1.26-5.25 2.757S18.842 32 21.75 32 27 30.74 27 29.242zM14.885 7.182c0 .63-.323 1.182-.808 1.182-.485 0-.808-.552-.808-1.182 0-.63.323-1.182.808-1.182.485 0 .808.552.808 1.182zM18.923 6c-.485 0-.808.552-.808 1.182 0 .63.323-.394.808-.394.485 0 .808 1.024.808.394S19.408 6 18.923 6z" />
<path d="M6.653 12.638s4.685 2.465 9.926 2.465c5.242 0 9.927-2.465 9.927-2.465.112-.09.217-.161.316-.212-.002-1.088-.078-2.026-.078-2.808C26.744 4.292 22.138 0 16.5 0S6.176 4.292 6.176 9.618v2.78c.146.042.3.113.477.24zm12.626-8.664c1.112 0 1.986 1.272 1.986 2.782s-.874 2.782-1.986 2.782c-1.111 0-1.985-1.271-1.985-2.782 0-1.51.874-2.782 1.985-2.782zm-5.558 0c1.111 0 1.985 1.272 1.985 2.782s-.874 2.782-1.985 2.782c-1.112 0-1.986-1.271-1.986-2.782 0-1.51.874-2.782 1.986-2.782zm2.779 6.624c2.912 0 5.294.464 5.294.994s-2.382 1.656-5.294 1.656c-2.912 0-5.294-1.126-5.294-1.656s2.382-.994 5.294-.994zm11.374 5.182c-.058.038-.108.076-.177.117-.159.08-5.241 3.18-11.038 3.18-1.43 0-2.7-.239-3.97-.477-.239 1.67-.239 3.259-.239 3.974 0 1.272-1.032 1.193-2.303 1.272-1.27 0-2.223.16-2.303-1.033 0-.16-.08-2.782.397-5.564-1.588-.716-2.62-1.272-2.7-1.352a3.293 3.293 0 01-.335-.216C4.012 17.55 3 19.598 3 21.223c0 3.815 1.112 3.418 1.112 3.418.476 0 1.27-.795 1.985-1.67C7.765 27.662 11.735 31 16.5 31c4.765 0 8.735-3.338 10.403-8.028.715.874 1.509 1.669 1.985 1.669 0 0 1.112.397 1.112-3.418 0-1.588-.968-3.631-2.126-5.443z" />
</g>
</g>
</symbol>
<symbol id="question" width="20px" height="20px">
<g transform="translate(-982.000000, -454.000000) translate(416.000000, 440.000000) translate(564.000000, 12.000000)"
fill="none" fillRule="evenodd">

View File

@@ -1,9 +1,16 @@
.line__tooltip {
padding: 2px 10px 7px;
line-height: 1.1;
color: #fff;
color: var(--white);
background-color: var(--gray-3);
border-radius: 4px;
opacity: 90%;
}
.line__tooltip-text {
font-size: 0.7rem;
}
.card-chart-bg path[d^="M0,32"] {
transform: translateY(32px);
}

View File

@@ -1,56 +1,75 @@
import React from 'react';
import PropTypes from 'prop-types';
import { ResponsiveLine } from '@nivo/line';
import addDays from 'date-fns/add_days';
import addHours from 'date-fns/add_hours';
import subDays from 'date-fns/sub_days';
import subHours from 'date-fns/sub_hours';
import dateFormat from 'date-fns/format';
import round from 'lodash/round';
import { useSelector } from 'react-redux';
import PropTypes from 'prop-types';
import './Line.css';
const Line = ({ data, color }) => data
&& <ResponsiveLine
const Line = ({
data, color = 'black',
}) => {
const interval = useSelector((state) => state.stats.interval);
return <ResponsiveLine
enableArea
animate
enableSlices="x"
curve="linear"
colors={[color]}
data={data}
margin={{
top: 15,
right: 0,
bottom: 1,
left: 20,
}}
minY="auto"
stacked={false}
curve='linear'
axisBottom={null}
axisLeft={null}
enableGridX={false}
enableGridY={false}
enableDots={false}
enableArea={true}
animate={false}
colorBy={() => (color)}
tooltip={(slice) => (
<div>
{slice.data.map((d) => (
<div key={d.serie.id} className="line__tooltip">
<span className="line__tooltip-text">
<strong>{d.data.y}</strong>
<br />
<small>{d.data.x}</small>
</span>
</div>
))}
</div>
)}
theme={{
tooltip: {
container: {
padding: '0',
background: '#333',
borderRadius: '4px',
crosshair: {
line: {
stroke: 'black',
strokeWidth: 1,
strokeOpacity: 0.35,
},
},
}}
xScale={{
type: 'linear',
min: 0,
max: 'auto',
}}
crosshairType="x"
axisLeft={false}
axisBottom={false}
enableGridX={false}
enableGridY={false}
enablePoints={false}
xFormat={(x) => {
if (interval === 1 || interval === 7) {
const hoursAgo = subHours(Date.now(), 24 * interval);
return dateFormat(addHours(hoursAgo, x), 'D MMM HH:00');
}
const daysAgo = subDays(Date.now(), interval - 1);
return dateFormat(addDays(daysAgo, x), 'D MMM YYYY');
}}
yFormat={(y) => round(y, 2)}
sliceTooltip={(slice) => {
const { xFormatted, yFormatted } = slice.slice.points[0].data;
return <div className="line__tooltip">
<span className="line__tooltip-text">
<strong>{yFormatted}</strong>
<br />
<small>{xFormatted}</small>
</span>
</div>;
}}
/>;
};
Line.propTypes = {
data: PropTypes.array.isRequired,
color: PropTypes.string.isRequired,
color: PropTypes.string,
width: PropTypes.number,
height: PropTypes.number,
};
export default Line;

View File

@@ -36,15 +36,3 @@
font-size: 36px;
line-height: 46px;
}
.page-title__actions {
display: block;
}
@media screen and (min-width: 768px) {
.page-title__actions {
display: inline-block;
vertical-align: baseline;
margin-left: 20px;
}
}

View File

@@ -3,24 +3,23 @@ import PropTypes from 'prop-types';
import './PageTitle.css';
const PageTitle = ({ title, subtitle, children }) => (
<div className="page-header">
<h1 className="page-title">
{title}
{children}
</h1>
{subtitle && (
<div className="page-subtitle">
{subtitle}
</div>
)}
const PageTitle = ({
title, subtitle, children, containerClass,
}) => <div className="page-header">
<div className={containerClass}>
<h1 className="page-title pr-2">{title}</h1>
{children}
</div>
);
{subtitle && <div className="page-subtitle">
{subtitle}
</div>}
</div>;
PageTitle.propTypes = {
title: PropTypes.string.isRequired,
subtitle: PropTypes.string,
children: PropTypes.node,
containerClass: PropTypes.string,
};
export default PageTitle;

View File

@@ -13452,10 +13452,8 @@ a.icon:hover {
.card-chart-bg {
height: 4rem;
margin-top: -1rem;
position: relative;
z-index: 1;
overflow: hidden;
}
.card-options {

View File

@@ -0,0 +1,52 @@
.text-edit-container {
position: relative;
height: 10rem;
}
.text-input,
.text-output {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
padding: 1rem;
background: transparent;
white-space: pre-wrap;
line-height: 1.5rem;
word-wrap: break-word;
font-size: 0.9375rem;
margin: 0;
}
.form--upstream .text-input,
.form--upstream .text-output {
width: 98%;
left: 1%;
}
.text-input {
opacity: 1;
resize: none;
height: 10rem;
}
.text-input--larger {
height: 11rem;
}
.text-input--largest {
height: 16rem;
}
.text-output {
pointer-events: none;
z-index: 3;
overflow-y: auto;
background: transparent;
border: 1px solid transparent;
}
.text-transparent {
color: transparent;
}

View File

@@ -13,6 +13,10 @@ export const R_MAC = /^((([a-fA-F0-9][a-fA-F0-9]+[-]){5}|([a-fA-F0-9][a-fA-F0-9]
export const R_CIDR_IPV6 = /^s*((([0-9A-Fa-f]{1,4}:){7}([0-9A-Fa-f]{1,4}|:))|(([0-9A-Fa-f]{1,4}:){6}(:[0-9A-Fa-f]{1,4}|((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){5}(((:[0-9A-Fa-f]{1,4}){1,2})|:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3})|:))|(([0-9A-Fa-f]{1,4}:){4}(((:[0-9A-Fa-f]{1,4}){1,3})|((:[0-9A-Fa-f]{1,4})?:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){3}(((:[0-9A-Fa-f]{1,4}){1,4})|((:[0-9A-Fa-f]{1,4}){0,2}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){2}(((:[0-9A-Fa-f]{1,4}){1,5})|((:[0-9A-Fa-f]{1,4}){0,3}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(([0-9A-Fa-f]{1,4}:){1}(((:[0-9A-Fa-f]{1,4}){1,6})|((:[0-9A-Fa-f]{1,4}){0,4}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:))|(:(((:[0-9A-Fa-f]{1,4}){1,7})|((:[0-9A-Fa-f]{1,4}){0,5}:((25[0-5]|2[0-4]d|1dd|[1-9]?d)(.(25[0-5]|2[0-4]d|1dd|[1-9]?d)){3}))|:)))(%.+)?s*(\/(12[0-8]|1[0-1][0-9]|[1-9][0-9]|[0-9]))$/;
export const R_DOMAIN = /^[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/;
export const R_SERVER_NAME = /^(\*\.)?[a-zA-Z0-9][a-zA-Z0-9-]{1,61}[a-zA-Z0-9]\.[a-zA-Z]{2,}$/;
export const R_PATH_LAST_PART = /\/[^/]*$/;
// eslint-disable-next-line no-control-regex
@@ -53,9 +57,10 @@ export const REPOSITORY = {
export const PRIVACY_POLICY_LINK = 'https://adguard.com/privacy/home.html';
export const PORT_53_FAQ_LINK = 'https://github.com/AdguardTeam/AdGuardHome/wiki/FAQ#bindinuse';
export const UPSTREAM_CONFIGURATION_WIKI_LINK = 'https://github.com/AdguardTeam/AdGuardHome/wiki/Configuration#upstreams';
export const GETTING_STARTED_LINK = 'https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update';
export const FILTERS_RELATIVE_LINK = '#filters';
export const ADDRESS_IN_USE_TEXT = 'address already in use';
export const INSTALL_FIRST_STEP = 1;
@@ -278,8 +283,17 @@ export const SERVICES = [
id: 'tiktok',
name: 'TikTok',
},
{
id: 'qq',
name: 'QQ',
},
];
export const SERVICES_ID_NAME_MAP = SERVICES.reduce((acc, { id, name }) => {
acc[id] = name;
return acc;
}, {});
export const ENCRYPTION_SOURCE = {
PATH: 'path',
CONTENT: 'content',
@@ -351,6 +365,10 @@ export const RESPONSE_FILTER = {
QUERY: 'blocked',
LABEL: 'show_blocked_responses',
},
BLOCKED_SERVICES: {
QUERY: 'blocked_services',
LABEL: 'blocked_services',
},
BLOCKED_THREATS: {
QUERY: 'blocked_safebrowsing',
LABEL: 'blocked_threats',
@@ -397,7 +415,7 @@ export const FILTERED_STATUS_TO_META_MAP = {
COLOR: QUERY_STATUS_COLORS.WHITE,
},
[FILTERED_STATUS.FILTERED_BLOCKED_SERVICE]: {
LABEL: RESPONSE_FILTER.BLOCKED.LABEL,
LABEL: 'blocked_service',
COLOR: QUERY_STATUS_COLORS.RED,
},
[FILTERED_STATUS.FILTERED_SAFE_SEARCH]: {
@@ -461,6 +479,7 @@ export const BLOCK_ACTIONS = {
export const SCHEME_TO_PROTOCOL_MAP = {
doh: 'dns_over_https',
dot: 'dns_over_tls',
doq: 'dns_over_quic',
'': 'plain_dns',
};
@@ -470,12 +489,6 @@ export const DNS_REQUEST_OPTIONS = {
LOAD_BALANCING: '',
};
export const IP_MATCH_LIST_STATUS = {
NOT_FOUND: 'NOT_FOUND', // not found in the list
EXACT: 'EXACT', // found exact match (including the match of short and long forms)
CIDR: 'CIDR', // the ip is in the specified CIDR range
};
export const DHCP_FORM_NAMES = {
DHCPv4: 'dhcpv4',
DHCPv6: 'dhcpv6',
@@ -568,3 +581,6 @@ export const CACHE_CONFIG_FIELDS = {
cache_ttl_min: 'cache_ttl_min',
cache_ttl_max: 'cache_ttl_max',
};
export const isFirefox = navigator.userAgent.indexOf('Firefox') !== -1;
export const COMMENT_LINE_DEFAULT_TOKEN = '#';

View File

@@ -1,13 +1,12 @@
import React, { Fragment } from 'react';
import PropTypes from 'prop-types';
import { Trans } from 'react-i18next';
import classNames from 'classnames';
import { createOnBlurHandler } from './helpers';
import { R_UNIX_ABSOLUTE_PATH, R_WIN_ABSOLUTE_PATH } from './constants';
export const renderField = (props, elementType) => {
const {
input, id, className, placeholder, type, disabled, normalizeOnBlur,
input, id, className, placeholder, type, disabled, normalizeOnBlur, onScroll,
autoComplete, meta: { touched, error }, min, max, step,
} = props;
@@ -25,6 +24,7 @@ export const renderField = (props, elementType) => {
max,
step,
onBlur,
onScroll,
});
return (
@@ -48,6 +48,7 @@ renderField.propTypes = {
min: PropTypes.number,
max: PropTypes.number,
step: PropTypes.number,
onScroll: PropTypes.func,
meta: PropTypes.shape({
touched: PropTypes.bool,
error: PropTypes.string,
@@ -155,31 +156,24 @@ renderRadioField.propTypes = {
}).isRequired,
};
export const renderCheckboxField = ({
export const CheckboxField = ({
input,
placeholder,
subtitle,
disabled,
onClick,
modifier = 'checkbox--form',
checked,
meta: { touched, error },
}) => <>
<label className={`checkbox ${modifier}`} onClick={onClick}>
<span className="checkbox__marker" />
<input {...input} type="checkbox" className="checkbox__input" disabled={disabled}
checked={input.checked || checked} />
<input {...input} type="checkbox" className="checkbox__input" disabled={disabled} />
<span className="checkbox__label">
<span className="checkbox__label-text checkbox__label-text--long">
<span className="checkbox__label-title">{placeholder}</span>
{subtitle
&& <span
className="checkbox__label-subtitle"
dangerouslySetInnerHTML={{ __html: subtitle }}
/>}
</span>
</span>
<span className="checkbox__label-text checkbox__label-text--long">
<span className="checkbox__label-title">{placeholder}</span>
{subtitle && <span className="checkbox__label-subtitle">{subtitle}</span>}
</span>
</span>
</label>
{!disabled
&& touched
@@ -187,10 +181,10 @@ export const renderCheckboxField = ({
&& <span className="form__message form__message--error"><Trans>{error}</Trans></span>}
</>;
renderCheckboxField.propTypes = {
CheckboxField.propTypes = {
input: PropTypes.object.isRequired,
placeholder: PropTypes.string,
subtitle: PropTypes.string,
subtitle: PropTypes.node,
disabled: PropTypes.bool,
onClick: PropTypes.func,
modifier: PropTypes.string,
@@ -208,13 +202,10 @@ export const renderSelectField = ({
label,
}) => {
const showWarning = touched && error;
const selectClass = classNames('form-control custom-select', {
'select--no-warning': !showWarning,
});
return <>
{label && <label><Trans>{label}</Trans></label>}
<select {...input} className={selectClass}>{children}</select>
<select {...input} className='form-control custom-select'>{children}</select>
{showWarning
&& <span className="form__message form__message--error form__message--left-pad"><Trans>{error}</Trans></span>}
</>;

View File

@@ -1,10 +1,6 @@
import 'url-polyfill';
import dateParse from 'date-fns/parse';
import dateFormat from 'date-fns/format';
import subHours from 'date-fns/sub_hours';
import addHours from 'date-fns/add_hours';
import addDays from 'date-fns/add_days';
import subDays from 'date-fns/sub_days';
import round from 'lodash/round';
import axios from 'axios';
import i18n from 'i18next';
@@ -16,6 +12,7 @@ import { getTrackerData } from './trackers/trackers';
import {
ADDRESS_TYPES,
CHECK_TIMEOUT,
COMMENT_LINE_DEFAULT_TOKEN,
CUSTOM_FILTERING_RULES_ID,
DEFAULT_DATE_FORMAT_OPTIONS,
DEFAULT_LANGUAGE,
@@ -24,7 +21,7 @@ import {
DHCP_VALUES_PLACEHOLDERS,
FILTERED,
FILTERED_STATUS,
IP_MATCH_LIST_STATUS,
SERVICES_ID_NAME_MAP,
STANDARD_DNS_PORT,
STANDARD_HTTPS_PORT,
STANDARD_WEB_PORT,
@@ -46,12 +43,8 @@ export const formatTime = (time, options = DEFAULT_TIME_FORMAT) => {
* @returns {string} Returns the date and time in the specified format
*/
export const formatDateTime = (dateTime, options = DEFAULT_DATE_FORMAT_OPTIONS) => {
const { language } = navigator;
const currentLanguage = (language.slice(0, 2) === 'en' || !language) ? 'en-GB' : language;
const parsedTime = new Date(dateTime);
return parsedTime.toLocaleString(currentLanguage, options);
return parsedTime.toLocaleString(navigator.language, options);
};
/**
@@ -108,21 +101,10 @@ export const normalizeLogs = (logs) => logs.map((log) => {
};
});
export const normalizeHistory = (history, interval) => {
if (interval === 1 || interval === 7) {
const hoursAgo = subHours(Date.now(), 24 * interval);
return history.map((item, index) => ({
x: dateFormat(addHours(hoursAgo, index), 'D MMM HH:00'),
y: round(item, 2),
}));
}
const daysAgo = subDays(Date.now(), interval - 1);
return history.map((item, index) => ({
x: dateFormat(addDays(daysAgo, index), 'D MMM YYYY'),
y: round(item, 2),
}));
};
export const normalizeHistory = (history) => history.map((item, idx) => ({
x: idx,
y: item,
}));
export const normalizeTopStats = (stats) => (
stats.map((item) => ({
@@ -131,16 +113,14 @@ export const normalizeTopStats = (stats) => (
}))
);
export const addClientInfo = (data, clients, param) => (
data.map((row) => {
const clientIp = row[param];
const info = clients.find((item) => item[clientIp]) || '';
return {
...row,
info: info?.[clientIp] ?? '',
};
})
);
export const addClientInfo = (data, clients, param) => data.map((row) => {
const clientIp = row[param];
const info = clients.find((item) => item[clientIp]) || '';
return {
...row,
info: info?.[clientIp] ?? '',
};
});
export const normalizeFilters = (filters) => (
filters ? filters.map((filter) => {
@@ -316,6 +296,12 @@ export const trimMultilineString = (text) => splitByNewLine(text)
export const removeEmptyLines = (text) => splitByNewLine(text)
.join('\n');
/**
* @param {string} input
* @returns {string}
*/
export const trimLinesAndRemoveEmpty = (input) => input.split('\n').map((line) => line.trim()).filter(Boolean).join('\n');
/**
* Normalizes the topClients array
*
@@ -522,75 +508,6 @@ export const isIpInCidr = (ip, cidr) => {
}
};
/**
* The purpose of this method is to quickly check
* if this IP can possibly be in the specified CIDR range.
*
* @param ip {string}
* @param listItem {string}
* @returns {boolean}
*/
const isIpQuickMatchCIDR = (ip, listItem) => {
const ipv6 = ip.indexOf(':') !== -1;
const cidrIpv6 = listItem.indexOf(':') !== -1;
if (ipv6 !== cidrIpv6) {
// CIDR is for a different IP type
return false;
}
if (cidrIpv6) {
// We don't do quick check for IPv6 addresses
return true;
}
const idx = listItem.indexOf('/');
if (idx === -1) {
// Not a CIDR, return false immediately
return false;
}
const cidrIp = listItem.substring(0, idx);
const cidrRange = parseInt(listItem.substring(idx + 1), 10);
if (Number.isNaN(cidrRange)) {
// Not a valid CIDR
return false;
}
const parts = cidrIp.split('.');
if (parts.length !== 4) {
// Invalid IP, return immediately
return false;
}
// Now depending on the range we check if the IP can possibly be in that range
if (cidrRange < 8) {
// Use the slow approach
return true;
}
if (cidrRange < 16) {
// Check the first part
// Example: 0.0.0.0/8 matches 0.*.*.*
return ip.indexOf(`${parts[0]}.`) === 0;
}
if (cidrRange < 24) {
// Check the first two parts
// Example: 0.0.0.0/16 matches 0.0.*.*
return ip.indexOf(`${parts[0]}.${parts[1]}.`) === 0;
}
if (cidrRange <= 32) {
// Check the first two parts
// Example: 0.0.0.0/16 matches 0.0.*.*
return ip.indexOf(`${parts[0]}.${parts[1]}.${parts[2]}.`) === 0;
}
// range for IPv4 CIDR cannot be more than 32
// no need to check further, this CIDR is invalid
return false;
};
/**
*
* @param ipOrCidr
@@ -614,50 +531,6 @@ export const findAddressType = (address) => {
}
};
/**
* @param ip {string}
* @param list {string}
* @returns {'EXACT' | 'CIDR' | 'NOT_FOND'}
*/
export const getIpMatchListStatus = (ip, list) => {
if (!ip || !list) {
return IP_MATCH_LIST_STATUS.NOT_FOUND;
}
const listArr = list.trim()
.split('\n');
try {
for (let i = 0; i < listArr.length; i += 1) {
const listItem = listArr[i];
if (ip === listItem.trim()) {
return IP_MATCH_LIST_STATUS.EXACT;
}
// Using ipaddr.js is quite slow so we first do a quick check
// to see if it's possible that this IP may be in the specified CIDR range
if (isIpQuickMatchCIDR(ip, listItem)) {
const parsedIp = ipaddr.parse(ip);
const isItemAnIp = ipaddr.isValid(listItem);
const parsedItem = isItemAnIp ? ipaddr.parse(listItem) : ipaddr.parseCIDR(listItem);
if (isItemAnIp && parsedIp.toString() === parsedItem.toString()) {
return IP_MATCH_LIST_STATUS.EXACT;
}
if (!isItemAnIp && isIpMatchCidr(parsedIp, parsedItem)) {
return IP_MATCH_LIST_STATUS.CIDR;
}
}
}
return IP_MATCH_LIST_STATUS.NOT_FOUND;
} catch (e) {
console.error(e);
return IP_MATCH_LIST_STATUS.NOT_FOUND;
}
};
/**
* @param ids {string[]}
* @returns {Object}
@@ -717,14 +590,18 @@ export const setHtmlLangAttr = (language) => {
* @param values {object}
* @returns {object}
*/
export const selectCompletedFields = (values) => Object.entries(values)
export const replaceEmptyStringsWithZeroes = (values) => Object.entries(values)
.reduce((acc, [key, value]) => {
if (value || value === 0) {
acc[key] = value;
}
acc[key] = value === '' ? 0 : value;
return acc;
}, {});
/**
* @param value {number || string}
* @returns {string}
*/
export const replaceZeroWithEmptyString = (value) => (parseInt(value, 10) === 0 ? '' : value);
/**
* @param {string} search
* @param {string} [response_status]
@@ -810,7 +687,7 @@ export const sortIp = (a, b) => {
return 0;
} catch (e) {
console.error(e);
console.warn(e);
return 0;
}
};
@@ -926,3 +803,16 @@ export const getBlockingClientName = (clients, ip) => {
}
return ip;
};
/**
* @param {string[]} lines
* @returns {string[]}
*/
export const filterOutComments = (lines) => lines
.filter((line) => !line.startsWith(COMMENT_LINE_DEFAULT_TOKEN));
/**
* @param {string} serviceId
* @returns {string}
*/
export const getServiceName = (serviceId) => SERVICES_ID_NAME_MAP[serviceId] || serviceId;

Some files were not shown because too many files have changed in this diff Show More