Compare commits

...

299 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
Andrey Meshkov
b7607216d2 Merge: + client: Update locales
Fix #2086
Fix #2106

* commit '835f3b911b66902902f4231913913e8bafdde4e4':
  Added unused translations counter
  Update locales
  Update ru locale
  Update locales
  Update locales
  Change back div to label
  Update Link of port_53_faq_link
  Update upstream_dns_help
  + client: Update locales
2020-09-16 18:04:36 +03:00
Andrey Meshkov
835f3b911b Added unused translations counter 2020-09-16 17:42:57 +03:00
Andrey Meshkov
d38068289c Merge branch 'master' into feature/update_locales 2020-09-16 13:50:19 +03:00
Andrey Meshkov
ad6c43c4a3 Merge branch 'master' of ssh://bit.adguard.com:7999/dns/adguard-home 2020-09-16 12:38:46 +03:00
ArtemBaskal
380ce34ce6 Update locales 2020-09-15 11:05:54 +03:00
ArtemBaskal
da1e235052 Merge branch 'master' into 1920-client-find 2020-09-15 10:45:32 +03:00
Artem Baskal
9651243347 - client: Make dashboard card height constant
Close #2039

Squashed commit of the following:

commit 1d6dd461558403ea0ba813d5f665ecbaab9cd8ed
Merge: 6ca80c91 2a5b0b8d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 15 10:18:19 2020 +0300

    Merge branch 'master' into fix/2039

commit 6ca80c9171da61a4bc02cec409299d0cfb96da49
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 14 19:58:43 2020 +0300

    Fix mobile media query

commit 239c9ab29aaaef200bd2289fa116507ea5c2bf4c
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 14 13:59:39 2020 +0300

    - client: Make dashboard card height constant
2020-09-15 10:30:34 +03:00
ArtemBaskal
a5e189bdf3 Merge branch 'master' into feature/update_locales 2020-09-14 20:22:55 +03:00
Artem Baskal
2a5b0b8da1 - client: Allow change minimum TTL override in UI
Close #2091 #2094 #2056

Squashed commit of the following:

commit a84384bb409bfe60c4bd6477b2249c4431aa3b63
Merge: cdc5f27f a22db5f3
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 14 19:59:47 2020 +0300

    Merge branch 'master' into fix/2091

commit cdc5f27f279f33c7d988f2927adc172e77e0a6af
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 14 15:41:00 2020 +0300

    Fix uint32 fields validation

commit 0c6fcb90f9741ae8a33bf6c4d53bd954f2033a88
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 14 14:43:20 2020 +0300

    Validate DNS cache configuration DNS values unit32 range

commit 1f90a1fcbc04f6c7ffb75b453e5c67e117d1c5bf
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 14 12:11:39 2020 +0300

    Remove the limit on cache-min-ttl

commit 72e961034cc5752a50a4afc57c7be6a93d652f7d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 11 16:50:19 2020 +0300

    Fix translation

commit 6aebf4b87bb806ac0729b40418ba6056b3f71afa
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 11 12:53:01 2020 +0300

    - client: Allow change minimum TTL override in UI
2020-09-14 20:16:46 +03:00
ArtemBaskal
99b556aab3 Update ru locale 2020-09-14 19:48:59 +03:00
ArtemBaskal
726d8eec2c Update locales 2020-09-14 15:44:35 +03:00
ArtemBaskal
cbc1ef4558 Update locales 2020-09-11 16:52:25 +03:00
Andrey Meshkov
625f1dffe1 * (dnsfilter): minor refactoring, comments 2020-09-11 15:52:46 +03:00
Andrey Meshkov
a22db5f358 Merge branch 'master' of ssh://bit.adguard.com:7999/dns/adguard-home 2020-09-11 13:22:39 +03:00
Andrey Meshkov
1c88667306 * (home): added tests for no-mem-optimization flag 2020-09-11 13:21:37 +03:00
Andrey Meshkov
b3a68bb806 * (global): added --no-mem-optimization flag
This commit adds a new command-line argument that disables memory
optimizations AGH is using. These memory optimizations might be
necessary on low-memory devices, but they aren't free and there's a
performance hit (see #2044). Now they can be disabled - just pass
--no-mem-optimization when you run AGH or when you install the service
-- ./AdGuardHome -s install --no-mem-optimization

Closes: #2044
2020-09-11 13:19:37 +03:00
Artem Baskal
6fddccfb65 - client: Fix dashboard client names display
Close #2090

* commit '8533081da7632cca634e400c5b14b3bf52a55b61':
  - client: Fix dashboard client names display
2020-09-11 12:35:29 +03:00
ArtemBaskal
8533081da7 - client: Fix dashboard client names display 2020-09-11 12:06:52 +03:00
Andrey Meshkov
cb8afde629 * (dnsforward): fix reverse lookups from /etc/hosts
There was a bug with empty PTR responses for IPs that are in the hosts
file

Closes: #2085
2020-09-11 11:53:36 +03:00
Andrey Meshkov
caee4b86fa * (dnsforward): upgrade dnsproxy to v0.32.5 2020-09-10 23:54:15 +03:00
Andrey Meshkov
67e6b7d3e8 * (dnsforward): upgrade dnsproxy to v0.32.4 2020-09-10 18:19:09 +03:00
ArtemBaskal
bce69809bc Change back div to label 2020-09-10 12:54:36 +03:00
Andrey Meshkov
75d680ff30 * (dnsforward): added some hosts to disallowed by default 2020-09-10 12:32:36 +03:00
ArtemBaskal
c5773577bc Update Link of port_53_faq_link 2020-09-09 22:12:56 +03:00
ArtemBaskal
071a1f77a4 Update upstream_dns_help 2020-09-09 21:51:02 +03:00
ArtemBaskal
7177361016 + client: Update locales 2020-09-09 20:13:29 +03:00
Andrey Meshkov
b6e5863058 Merge: + DNS: "dns.upstream_dns_file" setting
Merge in DNS/adguard-home from 1680-upstreams-file to master
Fix #1680

* commit '88c67764b9515902514b0a8e4f00af29a353c584':
  * (dnsforward): don't fail when default upstream is not set
  * (dnsforward): upgrade dnsproxy to v0.32.1
  * (ui): fix strings
  + client: Display upstreams list loaded from a file
  + DNS: "dns.upstream_dns_file" setting
2020-09-09 18:49:26 +03:00
Andrey Meshkov
88c67764b9 * (dnsforward): don't fail when default upstream is not set 2020-09-09 18:12:11 +03:00
Andrey Meshkov
f8010902ce * (dnsforward): upgrade dnsproxy to v0.32.1 2020-09-09 17:50:39 +03:00
Andrey Meshkov
0818d51493 Merge: - client: Fix delay of custom filter editor
Merge in DNS/adguard-home from fix/1657 to master
Fix #1657

* commit '474306d46546097700d5c767c7283f33f63f53d7':
  - client: Fix delay of custom filter editor
2020-09-09 15:48:41 +03:00
Andrey Meshkov
7720d0dfbc Merge branch 'master' into 1680-upstreams-file 2020-09-09 14:51:27 +03:00
Andrey Meshkov
90e4316cfc * (ui): fix strings 2020-09-09 14:50:21 +03:00
Andrey Meshkov
e781ff0cae * : merge with master 2020-09-09 14:35:11 +03:00
Andrey Meshkov
9a49161f15 Merge: * DNS: use REFUSED DNS error code as the default blocking method
Merge in DNS/adguard-home from 1914-refused-blocking-mode to master
Fix #1914

* commit '382cddea47452abd02adeab2a1539dcd3c74c1dd':
  fix pre-commit hook
  * (ui): added refused string
  + client: Add REFUSED DNS error code as the default blocking method
  + DNS: new blocking mode: "refused"
  * locales: blocking_mode_default: NXDOMAIN -> REFUSED
  * DNS: use REFUSED DNS error code as the default blocking method
2020-09-09 14:21:55 +03:00
Andrey Meshkov
382cddea47 fix pre-commit hook 2020-09-09 14:03:27 +03:00
Andrey Meshkov
317e030554 * (ui): added refused string 2020-09-09 13:59:18 +03:00
Andrey Meshkov
1fadc27615 Merge branch 'master' into 1914-refused-blocking-mode 2020-09-09 13:51:53 +03:00
Andrey Meshkov
ccb903c9a0 Merge: + DoQ client/server
Merge in DNS/adguard-home from 2049-doq to master
Fix #2049

* commit '7d7609cf7a2c0c3c539649776f0eebd35adb08c7':
  * (dnsforward): moved setting upstream.RootCAs
  - (dnsforward): fixed running only quic, added a test
  Change link and translation
  Resolve conflict
  + client: Add experimental DNS-over-QUIC support
  + DNS: "port_dns_over_quic" setting
  * dnsproxy v0.32.0
2020-09-09 13:51:21 +03:00
Andrey Meshkov
7d7609cf7a * (dnsforward): moved setting upstream.RootCAs 2020-09-08 17:28:01 +03:00
Andrey Meshkov
314867734a - (dnsforward): fixed running only quic, added a test
QUIC was not initialized if DOT port is not set. Also, there were no
tests on DoQ functionality.
2020-09-08 17:20:24 +03:00
Andrey Meshkov
120d5304c2 Merge branch 'master' into 2049-doq 2020-09-08 17:03:40 +03:00
Andrey Meshkov
abc08b7572 Merge: + client: Add experimental DNS-over-QUIC support
Merge in DNS/adguard-home from feature/2049 to 2049-doq

* commit 'c588b891975eecda91408661bb3b3de0572437c3':
  Change link and translation
  Resolve conflict
  + client: Add experimental DNS-over-QUIC support
2020-09-08 16:19:21 +03:00
Andrey Meshkov
3c85b994d3 Merge: Dsheets service options
Merge in DNS/adguard-home from dsheets-service-options to master

* commit '7be0cc72df9b01922e6bc5b3e6e9c6ab57b3fc26':
  Don't run home_test with race detection
  service: installation and running of AGH as a service with CLI args
  home/options: add options -> args serialization
  cli: factor options struct and parsing into home/options.go
2020-09-08 16:11:21 +03:00
Andrey Meshkov
7be0cc72df Don't run home_test with race detection 2020-09-08 15:53:25 +03:00
Andrey Meshkov
c826c976af Merge branch 'service-options' of git://github.com/dsheets/AdGuardHome into dsheets-service-options 2020-09-08 15:27:10 +03:00
Andrey Meshkov
22d0341a4c Merge branch 'dsheets-auth-gosec-rand-ignore' 2020-09-08 15:25:09 +03:00
Andrey Meshkov
3c2481f91d Merge branch 'auth-gosec-rand-ignore' of git://github.com/dsheets/AdGuardHome into dsheets-auth-gosec-rand-ignore 2020-09-08 15:24:38 +03:00
ArtemBaskal
c588b89197 Merge branch '2049-doq' into feature/2049 2020-09-08 14:16:43 +03:00
Artem Baskal
b04e12e189 + client: Display upstreams list loaded from a file
Squashed commit of the following:

commit b5abc9115806f345c8d0dd5ea00b8552d27813f9
Merge: 92708411 c1c8abdd
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 7 14:38:06 2020 +0300

    Merge branch '1680-upstreams-file' into feature/1680

commit 92708411f07638c037e049ee8012d15bdeda77e4
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 4 13:54:24 2020 +0300

    + client: Display upstreams list loaded from a file
2020-09-08 14:06:19 +03:00
Artem Baskal
c5ca2e60c6 - client: Count client requests correctly
Close #2037

Squashed commit of the following:

commit f19b5f5919ab0c9c31e03728a0def04f02b8d7db
Merge: b51cf160 06594bde
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 8 13:18:39 2020 +0300

    Merge branch 'master' into fix/2037

commit b51cf16008f516bfeed6d8212d27902514d3251c
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 4 18:06:17 2020 +0300

    - client: Count client requests correctly
2020-09-08 14:05:26 +03:00
Artem Baskal
366fdab605 + client: Add REFUSED DNS error code as the default blocking method
* commit '12ed67ab1154138c0008f18b6fb7ac8a17f43860':
  + client: Add REFUSED DNS error code as the default blocking method
2020-09-08 14:04:28 +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
Artem Baskal
06594bde8f - client: Add link to 'update_failed' error toast
Close #2062

Squashed commit of the following:

commit a1a1d4fe74dd414f83477d972bc07062e2c890ab
Merge: 9535e109 84938c56
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 8 10:21:47 2020 +0300

    Merge branch 'master' into fix/2062

commit 9535e10934c57c2592df234a030bad183c0086cd
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 7 13:59:57 2020 +0300

    Fix translation

commit e6f912d1d2793fd008c22b4418681abcc54896d0
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Sep 7 12:03:45 2020 +0300

    - client: Add link to 'update_failed' error toast
2020-09-08 13:18:19 +03:00
Artem Baskal
84938c5603 - client: Fix whois cell styles
Close #2069

* commit '15a82233f3dc8b5307e3edef2214f98ab408de64':
  - client: Fix whois cell styles
2020-09-08 10:20:59 +03:00
ArtemBaskal
9f3c27c03a Change link and translation 2020-09-08 10:17:39 +03:00
ArtemBaskal
458d9f49cb Merge branch 'master' into 1920-client-find 2020-09-07 16:13:42 +03:00
ArtemBaskal
c1c8abdd0f Merge branch 'master' into 1680-upstreams-file 2020-09-07 14:33:36 +03:00
ArtemBaskal
71213bcbf3 Merge branch 'master' into 2049-doq 2020-09-07 14:32:42 +03:00
ArtemBaskal
4d1666eff1 Resolve conflict 2020-09-07 13:52:23 +03:00
ArtemBaskal
14bc5297ac + client: Add experimental DNS-over-QUIC support 2020-09-07 13:50:03 +03:00
ArtemBaskal
12ed67ab11 + client: Add REFUSED DNS error code as the default blocking method 2020-09-07 12:38:35 +03:00
David Sheets
90ef204d04 service: installation and running of AGH as a service with CLI args 2020-09-07 10:26:40 +01:00
David Sheets
9e87f0afed home/auth: disable non-crypto RNG gosec lint check for session salt
Fixes #2078.
2020-09-07 10:06:02 +01:00
David Sheets
d3428ca46c home/options: add options -> args serialization 2020-09-07 09:54:20 +01:00
David Sheets
03506df25d cli: factor options struct and parsing into home/options.go 2020-09-07 09:10:56 +01:00
ArtemBaskal
15a82233f3 - client: Fix whois cell styles 2020-09-07 10:36:17 +03:00
Artem Baskal
8dc0108868 + client: Redesign query logs block/unblock buttons
Close #2050

Squashed commit of the following:

commit 3bc6a409034989b914306e1c33da274730ca623e
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 4 20:58:09 2020 +0300

    Change dashboard block confirm message

commit d4d47c3557e2166ee04db25a71b782bfbfe3b865
Merge: e8865827 fc43e2ac
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 4 14:56:34 2020 +0300

    Merge branch 'master' into feature/2050

commit e8865827879955b1ef62c9ff85798d07bfa4627d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Sep 4 13:46:10 2020 +0300

    Rename classname

commit 648151c54e493c63622e014cb9cd1cb450f25478
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 3 19:09:21 2020 +0300

    Decrease arrow size

commit 4feadab707c613d31225dfa9443a9a836db37ba1
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 3 18:27:41 2020 +0300

    Rename button class

commit c3919d8ae8d1431657ce61afad2c20e5806f279a
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 3 10:35:15 2020 +0300

    Review changes: extract variables

commit 0ac809584c391e41a1749a844bc1075e05a92345
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Sep 3 10:13:57 2020 +0300

    Display dashboard button on hover

commit 1395287c2383e2248a2a5d39451403bd73141e55
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 21:24:04 2020 +0300

    Do not hide button on option open

commit 947f254b7aea26f289b66b66fac46dba11ea3952
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 21:20:19 2020 +0300

    Add buttons for mobile screen

commit df05697f87163a2b716d82653884e631f2fa6cf3
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 20:18:20 2020 +0300

    Change dashboard button styles

commit 16655f2d6b0d79d1fa027ec2310bb0268fffaf6a
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 20:04:28 2020 +0300

    Change button styles, rename button options

commit 1ac22e875d8b26c16830bf6edb85dadcc19ff287
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 19:30:16 2020 +0300

    Review changes

commit c590119875439d85927bdd334658e003bc1f0563
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 17:58:08 2020 +0300

    Remove default query logs form values

commit 141329563417f5337f5659d5500f4cbe16d64bd2
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 17:41:23 2020 +0300

    Update blocking buttons options logic, fix button svg size

commit 9e4f39aa6cb8e134d80d496b8a248b2fe6aceb99
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 16:30:48 2020 +0300

    Fix button position

commit 8aabff7daccb87ae02c2302e62e296b3cfc17608
Merge: 415a0334 6b614295
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 17:29:55 2020 +0300

    Merge branch 'master' into feature/2050

commit 415a0334561733d92a0f7badd68101ef554dc689
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 17:05:51 2020 +0300

    Add blocking options

commit bc6aed92b6e12f27c2604501275b53bb8159d5bc
Merge: 0de4fb3a 40b74522
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 15:49:06 2020 +0300

    Merge branch 'feature/infinite_scroll_query_logs' into feature/2050

commit 40b745225112cf8d664220ed8f484b0aa16e997c
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 15:46:27 2020 +0300

    Remove dynamic translation of toasts

commit 0de4fb3a4cd785c6b52e860e204c6e13d356b178
Merge: 1ab14471 f08fa7b8
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 15:07:30 2020 +0300

    Merge branch 'feature/infinite_scroll_query_logs' into feature/2050

... and 51 more commits
2020-09-05 10:22:47 +03:00
Andrey Meshkov
fc43e2ac6f Merge: - client: Fix superfluous character in de locale
Fix #2053

* commit '050e996a35b1f26f1c03af7eda75584afad9bfc1':
  - client: Fix superfluous character in de locale
2020-09-04 13:37:48 +03:00
Andrey Meshkov
1a6bd29462 Merge: - client: Fix top clients alignment
Fix #2039

* commit 'b54ce85d3d5f39957d0a2c3625c04e4936c40d94':
  - client: Fix top clients alignment
2020-09-04 13:37:28 +03:00
Andrey Meshkov
340052090c Merge: - client: Display service name for blocked services
Merge in DNS/adguard-home from fix/2038 to master

* commit '9e33bd52599c2039603d99f93db461cc6a6a23f4':
  - client: Display service name for blocked services
2020-09-04 13:37:05 +03:00
Simon Zolin
dd3027afe7 + GET /control/clients/find: add "disallowed" property 2020-09-04 10:58:33 +03:00
Simon Zolin
d53e32259a + DNS: "port_dns_over_quic" setting 2020-09-04 10:55:13 +03:00
Simon Zolin
07b6cc24b7 * dnsproxy v0.32.0 2020-09-04 10:55:13 +03:00
Simon Zolin
dfab6597cd + DNS: "dns.upstream_dns_file" setting 2020-09-04 10:41:04 +03:00
Simon Zolin
b6193c32ce + DNS: new blocking mode: "refused" 2020-09-04 10:33:55 +03:00
Simon Zolin
f0ebec545e * locales: blocking_mode_default: NXDOMAIN -> REFUSED 2020-09-04 10:33:09 +03:00
Simon Zolin
8f017d2c0e * DNS: use REFUSED DNS error code as the default blocking method 2020-09-04 10:33:09 +03:00
ArtemBaskal
474306d465 - client: Fix delay of custom filter editor 2020-09-03 23:05:11 +03:00
ArtemBaskal
b54ce85d3d - client: Fix top clients alignment 2020-09-03 20:57:22 +03:00
ArtemBaskal
9e33bd5259 - client: Display service name for blocked services 2020-09-03 20:35:20 +03:00
ArtemBaskal
050e996a35 - client: Fix superfluous character in de locale 2020-09-03 19:33:49 +03:00
Simon Zolin
07db05dd80 * makefile: test: use '-race' parameter on UNIX, don't use it on Windows
Squashed commit of the following:

commit b01379bb223dd28464e8f0b1e8878d3e6b314c26
Merge: 16c7ab79 4efc464e
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Sep 3 10:00:31 2020 +0300

    Merge remote-tracking branch 'origin/master' into fix-test

commit 16c7ab7949ee0a175f89285c1f1fbde0aa27081b
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 20:04:00 2020 +0300

    minor

commit af8002b09a3017955e9892db413fa62ce1e4ad81
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 19:56:01 2020 +0300

    * makefile: test: use '-race' parameter on UNIX, don't use it on Windows

commit b893358cbe5d1b7dc7db23b0b159ec436c20ee3e
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 19:36:48 2020 +0300

    test

commit c52a82b720f61f874d49708e9cc1b307d2f62839
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 17:47:51 2020 +0300

    - fix test
2020-09-03 10:10:54 +03:00
Simon Zolin
4efc464e98 - querylog: file rotation didn't work properly; fix entry searching algorithm
If AGH is restarted, file rotation timer is reset
which can lead to the situation when file rotation procedure is never started.

Squashed commit of the following:

commit 427ae91a512cd146ebfffad06ed24eb723cb9e7d
Merge: 067fac65 e56c746b
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 18:18:46 2020 +0300

    Merge remote-tracking branch 'origin/master' into qlogs-rotate

commit 067fac65b1a87d499900f4860ffa96ed8208967c
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 15:30:48 2020 +0300

    minor

commit c2059a15700e5696cb1bb5cd49129c6020d986f4
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 14:53:07 2020 +0300

    improve

commit a279438eaf1cf40b820652093fb56d56784de7d8
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 1 18:49:14 2020 +0300

    minor

commit 26ac130f139f565de39200e484b3bd4a04afcfcc
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 1 13:54:27 2020 +0300

    rename

commit 0fad7b88dbeadcddd4d77536a18da72f3203ea80
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 1 13:05:36 2020 +0300

    + TestQLogSeek

commit fa6afc6d4dc592b1fef67c4a069ea50fae600a58
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 1 13:05:34 2020 +0300

    minor

commit 11e6ab9131e5c37467e8530a2db95a82bbb0603b
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 31 19:45:47 2020 +0300

    fix tests

commit 7cbb89948df0e69b1bae8f8cde1879b5b1c4b1d6
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 31 19:29:43 2020 +0300

    - querylog: fix entry searching algorithm

commit 745d44863d88b321bd7001f24a68620f7ef05819
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 31 18:34:14 2020 +0300

    - querylog: file rotation didn't work properly

    If AGH is restarted, file rotation timer is reset
     which can lead to the situation when file rotation procedure is never started.
2020-09-02 19:42:26 +03:00
Artem Baskal
e56c746b60 - client: Do not redirect to login page from install and login pages
Close #2036

Squashed commit of the following:

commit 9880b80671973929b732bb45f767392627ddecc1
Merge: 55a51ea2 7b9cef3a
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 16:34:43 2020 +0300

    Merge branch 'master' into fix/unauthorized_redirect_logic

commit 55a51ea2947a43c339c8e5111ba79e4d52b26c84
Merge: 170b7387 7931e506
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Sep 2 15:54:38 2020 +0300

    Merge branch 'master' into fix/unauthorized_redirect_logic

commit 170b7387b06e6c9b30b50cc673f7457976007b0f
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Aug 25 17:13:02 2020 +0300

    - client: Do not redirect to login page from install and login pages
2020-09-02 17:51:38 +03:00
Artem Baskal
7b9cef3a08 - client: Fix location icon size
Close #2061

* commit 'f363c95ef58a52c134dcca1cd7c58b4dc2358405':
  - client: Fix location icon size
2020-09-02 16:29:20 +03:00
ArtemBaskal
f363c95ef5 - client: Fix location icon size 2020-09-02 16:09:59 +03:00
Simon Zolin
729f4b1766 Merge: * install: don't show an error about static IP if an interface is not selected
* commit '67bf027616df85911dca3caeef9b3d40d9e964ea':
  * install: don't show an error about static IP if an interface is not selected
2020-09-02 16:07:08 +03:00
Simon Zolin
67bf027616 * install: don't show an error about static IP if an interface is not selected 2020-09-02 15:50:09 +03:00
Simon Zolin
7931e50673 + DNS: add "ipset" configuration setting
Close #1191

Squashed commit of the following:

commit ba14b53f9e3d98ad8127aa3af1def0da4269e8c4
Merge: 362f4c44 6b614295
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 14:03:19 2020 +0300

    Merge remote-tracking branch 'origin/master' into 1191-ipset

commit 362f4c44915cb8946db2e80f9a3f5afd74fe5de1
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 12:50:56 2020 +0300

    minor

commit 28e12459166fe3d13fb0dbe59ac11b7d86adb9b4
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Sep 2 12:43:25 2020 +0300

    minor

commit bdbd7324501f6111bea1e91eda7d730c7ea57b11
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 1 18:40:04 2020 +0300

    move code, ipset-v6

commit 77f4d943e74b70b5bc5aea279875ab1e2fab2192
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Sep 1 15:53:27 2020 +0300

    comment

commit 16401325bbefeba08e447257b12a8424b78c9475
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 31 17:43:23 2020 +0300

    minor

commit c8410e9a519b87911bc50f504e8b4aaf8dce6e02
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 31 15:30:52 2020 +0300

    + DNS: add "ipset" configuration setting
2020-09-02 14:13:45 +03:00
Artem Baskal
6b61429572 Pull request 743: + client: Query Logs Infinite Scroll
Merge in DNS/adguard-home from feature/infinite_scroll_query_logs to master

Squashed commit of the following:

commit 4407ef2e7c055066257da791fbd65e6b0a495729
Merge: 40b74522 0a4781be
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 16:20:23 2020 +0300

    Merge branch 'master' into feature/infinite_scroll_query_logs

commit 40b745225112cf8d664220ed8f484b0aa16e997c
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 15:46:27 2020 +0300

    Remove dynamic translation of toasts

commit f08fa7b8c6a243f6b10e924aebccc183ce7814fd
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 13:59:53 2020 +0300

    Remove renderLimitIdx, update isEntireLog

commit 0f1b02616faaa5759c0a3f6d8257117fa22094d9
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 11:11:14 2020 +0300

    Rename variables

commit 0928570c689c1fa704af775382620d68893e7c1c
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 11:06:50 2020 +0300

    Make query logs short polling function more expressive

commit 9e773cbd6c287a1c799fa2680f3462508462ea7a
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Sep 1 11:06:19 2020 +0300

    Fix Toast translation interface

commit f9c57033e5adc5788954cf086b2f114dd8938bcb
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Aug 31 17:01:36 2020 +0300

    Do not hide loader

commit b86ba48613437f5559a748ad9aa4cf79d15db082
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Aug 31 16:56:34 2020 +0300

    Add dynamic translation for all toasts

commit b9d1d9b447ca90a3c179e503fa5d4abd3516321e
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Aug 31 16:39:29 2020 +0300

    Prevent getting query logs recursion if query is not changed

commit e25189749f7912648cca4503cfa8d0ad898c4bb6
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Aug 31 10:13:20 2020 +0300

    Decrease page limit to 20

commit 8b248ac5276899de838abf2dc9a69e47599cfc12
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Aug 28 18:47:12 2020 +0300

    Return checkFilteredLogs

commit bf2d65c4a3dca0da6b15f632ae11042b7c8e2045
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Aug 28 18:33:51 2020 +0300

    Review changes

commit 01b5250f9d9136a1f334086d3e2f00d1a928b37b
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Fri Aug 28 15:29:59 2020 +0300

    Remove checkFilteredLogs

commit 25b364c41e6a1489d930c8b3b39b1ab43723f29d
Merge: 1dc66034 2c666cbd
Author: Andrey Meshkov <am@adguard.com>
Date:   Fri Aug 28 14:28:47 2020 +0300

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

commit 1dc6603421cde9847e792bfe77ff6546e53fbc2a
Author: Andrey Meshkov <am@adguard.com>
Date:   Fri Aug 28 14:28:01 2020 +0300

    disregard maxFileScanEntries only if offset is set

commit bad741ed7f1dccf6959d43d000b8c0150f526f9e
Author: Andrey Meshkov <am@adguard.com>
Date:   Fri Aug 28 11:57:45 2020 +0300

    Fix search behavior when limit is specified

commit 2c666cbdde465cf17434126830dd99ceedfc4cbc
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 27 18:50:28 2020 +0300

    Hide table ref loader during data loading

commit 8b4f7fe642ef9e87a979813dcdbd7817d64c27f9
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 27 18:43:24 2020 +0300

    Repair search

commit 26fae1ae01a789999b8a2181d60b35663a20460a
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 27 17:59:27 2020 +0300

    Resetting initial render index, change loader position on search

commit e2c97ae1a288438267eef9aec71b979319674a71
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 27 16:02:03 2020 +0300

    Change isScrolledIntoView

... and 32 more commits
2020-09-01 16:30:30 +03:00
Simon Zolin
0a4781be97 * urlfilter v0.12.2
Close #1950

* commit '268d90b5bc8f6e05633a043abb0d8a2fdc8736e5':
  * urlfilter v0.12.2
2020-09-01 15:50:50 +03:00
Simon Zolin
268d90b5bc * urlfilter v0.12.2 2020-09-01 15:37:03 +03:00
Andrey Meshkov
7d3a72e626 Fix NoCoin list source 2020-08-31 11:40:08 +03:00
Simon Zolin
c822297065 Merge: * Update URLs for default filters
* commit 'f04acaf92e59b0249912b8e6464d1f9c2f9ccc68':
  * Makefile: run 'npm ci' for 'lint-js' target
  * Update URLs for default filters
2020-08-28 12:48:27 +03:00
Simon Zolin
f04acaf92e * Makefile: run 'npm ci' for 'lint-js' target 2020-08-28 11:59:27 +03:00
KizunaH
facf72f774 * Update URLs for default filters 2020-08-28 11:06:49 +03:00
Andrey Meshkov
c2ba8e4c09 Update readme 2020-08-27 23:54:48 +03:00
Simon Zolin
1531175da2 Merge: Revert "* make ci: exec linter"
* commit 'fa252ac2ec9a82554e09f15956ccceb7f733efad':
  Revert "* make ci: exec linter"
2020-08-27 10:07:59 +03:00
Simon Zolin
fa252ac2ec Revert "* make ci: exec linter"
This reverts commit 8cdef18358.
2020-08-26 20:15:10 +03:00
Simon Zolin
98b6eb320f - DNS: didn't process requests while updating filters
#2043

Squashed commit of the following:

commit cf430fed46ead2de4cd89f1adef40874b4a35536
Merge: 9fb44ef3 d23acd20
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Aug 26 18:39:23 2020 +0300

    Merge remote-tracking branch 'origin/master' into 2043-optimize

commit 9fb44ef3a50044f043620e35b65b659ca8080e1f
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Aug 26 15:39:07 2020 +0300

    - DNS: didn't process requests while updating filters
2020-08-26 18:58:21 +03:00
Simon Zolin
d23acd2016 - fix linter
* commit '8cdef183586a90a8f9067e5271f799a7284e2270':
  * make ci: exec linter
  - fix linter
2020-08-26 18:16:41 +03:00
Simon Zolin
8cdef18358 * make ci: exec linter 2020-08-25 19:26:34 +03:00
Simon Zolin
9634ef9c03 - fix linter 2020-08-25 17:44:30 +03:00
Simon Zolin
704291e88d Merge: * DHCP fixes
Close #2040

* commit '06af130bb7c042d8a44720cc9423b3fc76deadee':
  - DHCP: fix crash after adding static lease which replaces the dynamic one
  * DHCP: don't replace the host name from static lease
2020-08-25 17:29:49 +03:00
Simon Zolin
9c999f98fb + dhcp custom options
Squashed commit of the following:

commit 140ac16568383cab2270e5d5ba895959902dd943
Merge: d5ed73b5 cb6ca3b0
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Aug 25 13:46:34 2020 +0300

    Merge remote-tracking branch 'origin/master' into 1585-dhcp-options

commit d5ed73b5e4f068b823fe97ab1161753670d10387
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Aug 21 18:16:41 2020 +0300

    minor

commit f5208a0b050c2dd462b32edee0379758cc6e5003
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Jun 1 14:09:39 2020 +0300

    + dhcpv4 custom options
2020-08-25 14:07:11 +03:00
Simon Zolin
06af130bb7 - DHCP: fix crash after adding static lease which replaces the dynamic one 2020-08-25 13:38:52 +03:00
Simon Zolin
719ef16b93 * DHCP: don't replace the host name from static lease
When a static lease contains a host name
 and client sends its own host name:

1. don't replace the host name from static lease with it
2. send option FQDN to the client in Ack response packet
2020-08-25 13:38:28 +03:00
Simon Zolin
cb6ca3b0c4 - windows: install: fix crash due to empty DHCP server pointer
#2036

Squashed commit of the following:

commit 5c70d28b241d1a98e034f6798dade073b1b42511
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 24 18:42:21 2020 +0300

    - windows: install: fix crash due to empty DHCP server pointer

    We should not assign a Go interface value, otherwise `==nil` check doesn't work.
2020-08-24 20:06:53 +03:00
Simon Zolin
eb3999a261 * /control/dns_config: allow all valid bootstrap server notations
Close #1843

Squashed commit of the following:

commit cc82b373816b76a803d29e4baae18384aa0f8c67
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Aug 20 14:20:35 2020 +0300

    * /control/dns_config: allow all valid bootstrap server notations

    * use dnsproxy v0.31.1
2020-08-21 15:54:16 +03:00
Andrey Meshkov
546a02b49e fix linter issues 2020-08-20 15:41:25 +03:00
Simon Zolin
f8924f0785 Merge: + dhcpv6 server; rewrite dhcpv4 server; changed API
#779

* commit '888c9d571450ca1b934d94446b4eed462207a2d2':
  Get rid of extra toast when static IP is not set
  Fix DHCP check when there is no V6 interface
  Check interface before showing alert
  + client: Refactor DHCP settings
  * upgrade yaml schema 6->7: DHCP settings
  * copy dhcpv4/nclient4 package with minor enhancement
  * POST /control/dhcp/find_active_dhcp: add dhcpv6 server info
  - dhcp: CheckIfOtherDHCPServersPresent: fix
  * GET /control/dhcp/interfaces: remove 'mtu'; add 'gateway_ip'
  * GET /control/dhcp/interfaces: split IPv4 and IPv6 addresses
  * dhcp: fail on startup if couldn't initialize DHCP module
  + dhcpv6 server; rewrite dhcpv4 server; changed API
2020-08-20 15:33:13 +03:00
Andrey Meshkov
888c9d5714 Get rid of extra toast when static IP is not set 2020-08-20 15:19:59 +03:00
Andrey Meshkov
1806816d9c Fix DHCP check when there is no V6 interface 2020-08-20 15:19:59 +03:00
ArtemBaskal
fcc34ca80b Check interface before showing alert 2020-08-20 15:19:59 +03:00
Artem Baskal
1d35d73fc5 + client: Refactor DHCP settings 2020-08-20 15:19:59 +03:00
Simon Zolin
c9f58ce4a7 * upgrade yaml schema 6->7: DHCP settings 2020-08-20 15:19:59 +03:00
Simon Zolin
dd46cd5f36 * copy dhcpv4/nclient4 package with minor enhancement
The original package can be built only on Linux.
2020-08-20 15:19:59 +03:00
Simon Zolin
e7bef3a448 * POST /control/dhcp/find_active_dhcp: add dhcpv6 server info 2020-08-20 15:19:58 +03:00
Simon Zolin
23752377b7 - dhcp: CheckIfOtherDHCPServersPresent: fix
Sometimes request from DHCP server couldn't be received
 because we were bound to a specific IP address.
2020-08-20 15:19:58 +03:00
Simon Zolin
6090400ea0 * GET /control/dhcp/interfaces: remove 'mtu'; add 'gateway_ip' 2020-08-19 18:32:34 +03:00
Simon Zolin
ec24d18f83 * GET /control/dhcp/interfaces: split IPv4 and IPv6 addresses 2020-08-19 18:32:34 +03:00
Simon Zolin
89c3926ba5 * dhcp: fail on startup if couldn't initialize DHCP module 2020-08-19 18:32:34 +03:00
Simon Zolin
a3317c08c4 + dhcpv6 server; rewrite dhcpv4 server; changed API 2020-08-19 18:32:23 +03:00
Simon Zolin
c3123473cf * DNS: resolve host names from DHCP: improve
#1956

Squashed commit of the following:

commit efeacd92b8b82a9a0a0cce8c5648f2d024b4bc9e
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Aug 18 13:54:15 2020 +0300

    * DNS: resolve host names from DHCP: improve

    . Require a valid host name from DHCP lease
    . Use lower-case names
2020-08-18 17:40:36 +03:00
Simon Zolin
8d0c8ad438 + DNS: resolve host names to IP addresses leased by AGH DHCP server
Close #1956

Squashed commit of the following:

commit 21f11632c871e9c17faa77f9cd6a7aa836559779
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 17 19:54:24 2020 +0300

    + DNS: resolve host names to IP addresses leased by AGH DHCP server
2020-08-18 12:36:52 +03:00
Andrey Meshkov
1e2e965ea7 Merge branch 'master' of ssh://bit.adguard.com:7999/dns/adguard-home 2020-08-14 19:30:44 +03:00
Andrey Meshkov
0b539ced92 * : different version url for edge builds
Closes: #2023
2020-08-14 19:30:40 +03:00
Simon Zolin
9e09dffbc3 - dns: limit the number of active goroutines for incoming requests processing
Close #2015

Squashed commit of the following:

commit 90ba06f1fce22a452b4d61db62bd950b976debd1
Merge: 9494b29b 473d8818
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Aug 14 19:14:26 2020 +0300

    Merge remote-tracking branch 'origin/master' into max-go

commit 9494b29b65ae8fe593a487984bed051aa78e4ff9
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Aug 14 17:03:00 2020 +0300

    + max_goroutines setting

commit 87071a5e0ed43be192a7755fb25764cd4519da5a
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Aug 14 15:29:00 2020 +0300

    - dns: limit the number of active goroutines for incoming requests processing
2020-08-14 19:27:36 +03:00
Andrey Meshkov
473d881871 Merge: - client: Fix DNS settings
Merge in DNS/adguard-home from fix/2021 to master

* commit 'a1ca7862f84b07bde441f4578b1deb025ff79660':
  Fix selector
  - client: Fix DNS settings
2020-08-13 19:09:17 +03:00
ArtemBaskal
a1ca7862f8 Fix selector 2020-08-13 18:15:14 +03:00
ArtemBaskal
8ea1e64c7b - client: Fix DNS settings 2020-08-13 18:12:27 +03:00
Artem Baskal
2f8e34e73b Pull request 734: + client: 1778 Add ip sort function, write unit tests
Close #1778

Squashed commit of the following:

commit ba63e147311799b17deaa97d7a12c2e0ec44a2ed
Merge: 143ba427 705a9d90
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 13 12:00:10 2020 +0300

    Merge branch 'master' into feature/1778

commit 143ba42707da3d7eece9f3e137a8b245f7f7888f
Merge: 483d2ff9 97df1989
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 13 11:16:46 2020 +0300

    Merge branch 'master' into feature/1778

commit 483d2ff9fa3de706d94a647701f1d26a3bcbb217
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 12 13:34:21 2020 +0300

    Always put ipv4 before ipv6 in sort, add invalid input unit tests

commit 26eb41b313785fe7ffaf98a7573cc5eef0dca14f
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 12 11:27:46 2020 +0300

    Rewrite tests: replace ipv4-mapped adresses

commit 4ecf287fd46945effe9ff11cfc9ae49217b9c796
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Aug 11 19:05:15 2020 +0300

    Minor fix

commit 3e5e2a6bb1f2f166619da54e5ade0904fe22a20d
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Aug 11 19:01:26 2020 +0300

    + client: 1778 Add ip sort function, write unit tests
2020-08-13 12:16:52 +03:00
Simon Zolin
705a9d909d * SB/PC: use 4-character hash in request
* use hash prefix as the cache key

Squashed commit of the following:

commit d719a84ee9b9cf43aaab4f53d07451645ea836db
Merge: d9d6d443 97df1989
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Aug 13 11:41:28 2020 +0300

    Merge remote-tracking branch 'origin/master' into sbpc

commit d9d6d44376c44959f2216b08e577d8e5c5f65bff
Merge: 0a8b2483 de92c852
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Thu Aug 13 11:23:14 2020 +0300

    Merge remote-tracking branch 'origin/master' into sbpc

commit 0a8b24839683683a9d327ecf57a7d182b3996b1d
Merge: 0255a24a 9b9902f0
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Aug 12 20:21:22 2020 +0300

    Merge remote-tracking branch 'origin/master' into sbpc

commit 0255a24a191efd2e4ef23d6a00a7a9fed8831730
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Aug 12 17:16:57 2020 +0300

    - TestServerCustomClientUpstream(): fix

commit d2311902f887be9621a9d9312c73f899dd269440
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Aug 12 17:07:12 2020 +0300

    * SB/PC: hard-code Family server IP addresses to prevent from requesting them at runtime

commit ee340108f11f98d49a7af2a7e8a228c25ab1537a
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Aug 12 17:05:57 2020 +0300

    * dnsproxy v0.30.1

commit f5f53ba7116ad525204d00b80352202eee88b78c
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Wed Aug 12 14:53:23 2020 +0300

    minor

commit fb4631e2cd570b0fd5ae26ec2b1890361275a5a8
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Mon Aug 10 20:07:27 2020 +0300

    * SB/PC: implement new cache

commit f9f58461a6efbcfacd798f7640a4645cf1971cb2
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Aug 7 19:31:05 2020 +0300

    doc

commit ed69626a6c119ab1a3b187f5afbd4cef708c3159
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Aug 7 18:25:57 2020 +0300

    * SB/PC: use hostname prefix for cache

commit afa8040c8c0836c7e59e6fb9aaf1caccd132ea8f
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Fri Jul 31 11:19:49 2020 +0300

    * SB/PC: use 4-character hash in request
2020-08-13 11:49:42 +03:00
Artem Baskal
97df19898f Pull request #730: + client: Add Hot Module Replacement
Merge in DNS/adguard-home from feature/hmr to master

Squashed commit of the following:

commit 952ed1955c2a7a32446d99489f137f02eb47c99e
Merge: 83484931 de92c852
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 13 11:02:10 2020 +0300

    Merge branch 'master' into feature/hmr

commit 8348493105d7d63d8b0836a5c272df2b17a6b142
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 5 15:07:31 2020 +0300

    Remove empty prop types, remove Services empty container

commit b2fe4a30b79d91e482318ee5deea8e49c7038f7e
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 5 13:56:35 2020 +0300

    Move constants

commit f8be4c18c35193ad77bf5e25f311ad834c1d6870
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 5 13:19:02 2020 +0300

    Fix Setup bug, update webpack.dev

commit 1d9cc4ddf8af2c979eb707a7f0fc06744eec186c
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 5 12:10:38 2020 +0300

    Review changes

commit a1edb21358def21ed1808b081ffc2f0b6755e3da
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 5 11:46:58 2020 +0300

    Remove lazy loading, fix updated components

commit 0aa2cf55f8d4206ac9e2f99fc1b990ed8a9c7825
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Aug 4 20:32:19 2020 +0300

    Refactor App component, add lazy loading

commit 3c2ba4772a91ff7b06641dba6c6bf3fdcd2fdf7f
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Aug 4 17:12:41 2020 +0300

    Simplify App hot loading boilerplate, setup lazy loading, update Header

commit 8df3221f315372b066f2ac0c9a1687f1677b8415
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Tue Aug 4 15:16:06 2020 +0300

    + client: Add Hot Module Replacement
2020-08-13 11:15:45 +03:00
Artem Baskal
de92c85256 Pull request #726: - client: 1954 Make menu items position stable
- client: 1954 Make menu items position stable
Close #1954

Squashed commit of the following:

commit 24bc6faa1e45cef79e3ba83ad5d595c305e0c816
Merge: a4b07aae d3f5b407
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Thu Aug 13 10:51:47 2020 +0300

    Merge branch 'master' into fix/1954

commit a4b07aae4b3b56d60cc95f669e6c179659d904ce
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 5 15:20:26 2020 +0300

    Review changes

commit 250cdc9b10f93664ed2c1f53d57295dba78e6a99
Merge: 32003f19 39f2d5c4
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Wed Aug 5 15:18:40 2020 +0300

    Merge branch 'master' into fix/1954

commit 32003f19c6e2dda056fa6ae51f6721ea350016d1
Author: ArtemBaskal <a.baskal@adguard.com>
Date:   Mon Aug 3 13:36:23 2020 +0300

    - client: 1954 Make menu items position stable
2020-08-13 11:01:23 +03:00
Andrey Meshkov
d3f5b40700 Merge: + Makefile: sign release binaries with gpg
Merge in DNS/adguard-home from sign-binaries-v2 to master

* commit '20a0ba5f608c18eff4022279d8ce2791aca97d1b':
  + Makefile: sign release binaries with gpg
2020-08-12 22:51:06 +03:00
Simon Zolin
20a0ba5f60 + Makefile: sign release binaries with gpg
.tar.gz and .zip archives now contain one more file - .sig

UNIX:
./AdGuardHome/:
 ./AdGuardHome/AdGuardHome
 ./AdGuardHome/AdGuardHome.sig
 ...

Windows:
./AdGuardHome/:
 ./AdGuardHome/AdGuardHome.exe
 ./AdGuardHome/AdGuardHome.exe.sig
 ...
2020-08-12 20:18:21 +03:00
Simon Zolin
9b9902f004 * Revert "Update blocked_services.go"
Squashed commit of the following:

commit 567bb4671ddb4f51c13e51094f96e870212137c8
Author: Simon Zolin <s.zolin@adguard.com>
Date:   Tue Aug 11 19:29:31 2020 +0300

    Revert "Update blocked_services.go"

    This reverts commit 4ca4fb8a11.
2020-08-12 13:03:17 +03:00
Andrey Meshkov
020a30fb6d Merge: * locales: update
Merge in DNS/adguard-home from locales to master

* commit '8d10a269edebb007f49123e96f9f2c9f1834f4aa':
  update ru
  * locales: update
2020-08-07 18:31:31 +03:00
Simon Zolin
39f2d5c4ae * readme: update Prerequisites section
Close #1989

* commit '6ce3c52456feb6f13be976e03c42fa87aa26b099':
  * readme: update Prerequisites section
2020-08-04 15:29:09 +03:00
graysky
6ce3c52456 * readme: update Prerequisites section 2020-08-04 14:30:01 +03:00
Simon Zolin
5188da60cf * Makefile: support running with multiple parallel jobs (e.g. -j8)
* commit 'e57cbc36d944b6c4ebe99f397eb55976d786d5f8':
  * Makefile: support running with multiple parallel jobs (e.g. -j8)
2020-08-03 20:08:31 +03:00
Simon Zolin
e57cbc36d9 * Makefile: support running with multiple parallel jobs (e.g. -j8) 2020-08-03 19:13:51 +03:00
Ildar Kamalov
57e43a66c3 Merge: - client: fix log filters and guide tab styles
Closes #1951

* commit '9fecab8675b3496cb6fa5f03084e0be7c364a263':
  - client: fix log filters styles
  - client: fix guide tab styles
2020-08-03 15:45:53 +03:00
Ildar Kamalov
4f3d503916 Merge: - client: fix query log on edge legacy
Closes #1976

* commit '552280e9a36a15c7c2347af75d97fe2943f80093':
  - client: fix query log not load on edge legacy
2020-08-03 15:45:31 +03:00
Ildar Kamalov
6bb6c700d6 Merge: - client: fix empty log error
Closes #1983

* commit '3ff0c964dc05c0b393b6b7140cf59bffb8f70806':
  - client: fix empty log error
2020-08-03 15:44:55 +03:00
Ildar Kamalov
ed76a3cb8b Merge: - client: check touch events for tooltips
Closes #1922

* commit 'ce21514246dfc89f1178d9346769317f1fff4d05':
  - client: check touch events for tooltips
  - client: tooltip show delay
2020-08-03 15:41:46 +03:00
Simon Zolin
335d62b08e - "set_url": couldn't set a new path for filter local file
Close #1984

* commit '99625da1e44b4e6686f3c4b29526949ef471a100':
  - "set_url": couldn't set a new path for filter local file
2020-08-03 15:19:31 +03:00
Simon Zolin
99625da1e4 - "set_url": couldn't set a new path for filter local file 2020-08-03 14:09:47 +03:00
Ildar Kamalov
9fecab8675 - client: fix log filters styles 2020-08-01 17:13:48 +03:00
Ildar Kamalov
b9aa969a56 - client: fix guide tab styles 2020-08-01 17:12:38 +03:00
Ildar Kamalov
ce21514246 - client: check touch events for tooltips 2020-08-01 16:25:56 +03:00
Ildar Kamalov
3ff0c964dc - client: fix empty log error 2020-08-01 16:14:50 +03:00
Ildar Kamalov
552280e9a3 - client: fix query log not load on edge legacy 2020-08-01 15:35:57 +03:00
Ildar Kamalov
d154456ae5 - client: tooltip show delay 2020-08-01 13:38:26 +03:00
Andrey Meshkov
3cecd6f090 added more info about contribution 2020-07-31 11:31:47 +03:00
Simon Zolin
dc1fc82b9e * client: Corrects the provided homepage for "The Big List of Hacked Malware Web Sites"
Close #1940 Close #1948

* commit 'cecf84836494a432c59157295c1aaf8663df1a42':
  * client: Corrects the provided homepage for "The Big List of Hacked Malware Web Sites"
2020-07-31 10:17:37 +03:00
Simon Zolin
a033b68bfd * Update blocked_services.go
Close #1863

* commit '4ca4fb8a113dda47336038ced905fa87a9fa380f':
  Update blocked_services.go
2020-07-31 10:14:14 +03:00
mHatsune
4ca4fb8a11 Update blocked_services.go 2020-07-30 14:25:01 +03:00
Simon Zolin
8d10a269ed update ru 2020-07-27 13:13:14 +03:00
Simon Zolin
a536357427 * locales: update 2020-07-27 12:59:08 +03:00
Imre Kristoffer Eilertsen
cecf848364 * client: Corrects the provided homepage for "The Big List of Hacked Malware Web Sites" 2020-07-27 12:28:30 +03:00
374 changed files with 27092 additions and 13472 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

@@ -1,11 +1,17 @@
#!/bin/bash
set -e;
git diff --cached --name-only | grep -q '.js$' && make lint-js;
found=0
git diff --cached --name-only | grep -q '.js$' && found=1
if [ $found == 1 ]; then
npm --prefix client run lint || exit 1
npm run test --prefix client || exit 1
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

@@ -4,35 +4,39 @@
"base_locale": "en",
"localizable_files": ["client/src/__locales/en.json"],
"languages": {
"be": "Беларуская",
"bg": "Български",
"cs": "Český",
"da": "Dansk",
"de": "Deutsch",
"nl": "Dutch",
"en": "English",
"es": "Español",
"fa": "فارسی",
"fr": "Français",
"hr": "Hrvatski",
"hu": "Magyar",
"id": "Indonesian",
"it": "Italiano",
"ja": "日本語",
"ko": "한국어",
"nl": "Dutch",
"no": "Norsk",
"pl": "Polski",
"pt-br": "Português (BR)",
"pt-pt": "Português (PT)",
"ro": "Română",
"ru": "Русский",
"si-lk": "සිංහල",
"sk": "Slovenčina",
"sl": "Slovenščina",
"sr-cs": "Srpski",
"sv": "Svenska",
"vi": "Tiếng Việt",
"th": "ภาษาไทย",
"tr": "Türkçe",
"cs": "Český",
"bg": "Български",
"ru": "Русский",
"fa": "فارسی",
"ja": "日本語",
"zh-tw": "正體中文",
"vi": "Tiếng Việt",
"zh-cn": "简体中文",
"ko": "한국어",
"th": "ภาษาไทย"
"zh-hk": "繁體中文(香港)",
"zh-tw": "正體中文(台灣)"
}
}
]

View File

@@ -12,6 +12,7 @@ Contents:
* Updating
* Get version command
* Update command
* API: Get global status
* TLS
* API: Get TLS configuration
* API: Set TLS configuration
@@ -22,13 +23,17 @@ Contents:
* Update client
* Delete client
* API: Find clients by IP
* Enable DHCP server
* "Show DHCP status" command
* "Check DHCP" command
* "Enable DHCP" command
* DHCP server
* DHCP server in DNS
* DHCP Custom Options
* API: Show DHCP interfaces
* API: Show DHCP status
* API: Check DHCP
* API: Enable DHCP
* Static IP check/set
* Add a static lease
* API: Add a static lease
* API: Reset DHCP configuration
* RA+SLAAC
* DNS general settings
* API: Get DNS general settings
* API: Set DNS general settings
@@ -64,6 +69,8 @@ Contents:
* API: Log in
* API: Log out
* API: Get current user info
* Safe services
* ipset
## Relations between subsystems
@@ -374,9 +381,31 @@ Error response:
UI shows error message "Auto-update has failed"
## Enable DHCP server
## API: Get global status
Algorithm:
Request:
GET /control/status
Response:
200 OK
{
"dns_addresses":["..."],
"dns_port":53,
"http_port":3000,
"language":"en",
"protection_enabled":true,
"running":true,
"dhcp_available":true,
"version":"undefined"
}
## DHCP server
Enable DHCP server algorithm:
* UI shows DHCP configuration screen with "Enabled DHCP" button disabled, and "Check DHCP" button enabled
* User clicks on "Check DHCP"; UI sends request to server
@@ -388,7 +417,58 @@ Algorithm:
* UI shows the status
### "Show DHCP status" command
### DHCP server in DNS
DHCP leases are used in several ways by DNS module.
* For "A" DNS reqeust we reply with an IP address leased by our DHCP server.
< A bills-notebook.lan.
> A bills-notebook.lan. = 192.168.1.100
* For "PTR" DNS request we reply with a hostname from an active DHCP lease.
< PTR 100.1.168.192.in-addr.arpa.
> PTR 100.1.168.192.in-addr.arpa. = bills-notebook.
### DHCP Custom Options
Option with arbitrary hexadecimal data:
DEC_CODE hex HEX_DATA
where DEC_CODE is a decimal DHCPv4 option code in range [1..255]
Option with IP data (only 1 IP is supported):
DEC_CODE ip IP_ADDR
### API: Show DHCP interfaces
Request:
GET /control/dhcp/interfaces
Response:
200 OK
{
"iface_name":{
"name":"iface_name",
"hardware_address":"...",
"ipv4_addresses":["ipv4 addr", ...],
"ipv6_addresses":["ipv6 addr", ...],
"gateway_ip":"...",
"flags":"up|broadcast|multicast"
}
...
}
### API: Show DHCP status
Request:
@@ -399,16 +479,19 @@ Response:
200 OK
{
"config":{
"enabled":false,
"interface_name":"...",
"enabled":false,
"interface_name":"...",
"v4":{
"gateway_ip":"...",
"subnet_mask":"...",
"range_start":"...",
"range_start":"...", // if empty: DHCPv4 won't be enabled
"range_end":"...",
"lease_duration":60,
"icmp_timeout_msec":0
},
"v6":{
"range_start":"...", // if empty: DHCPv6 won't be enabled
"lease_duration":60,
}
"leases":[
{"ip":"...","mac":"...","hostname":"...","expires":"..."}
...
@@ -420,7 +503,7 @@ Response:
}
### "Check DHCP" command
### API: Check DHCP
Request:
@@ -433,13 +516,21 @@ Response:
200 OK
{
"other_server": {
"found": "yes|no|error",
"error": "Error message", // set if found=error
},
"static_ip": {
"static": "yes|no|error",
"ip": "<Current dynamic IP address>", // set if static=no
v4: {
"other_server": {
"found": "yes|no|error",
"error": "Error message", // set if found=error
},
"static_ip": {
"static": "yes|no|error",
"ip": "<Current dynamic IP address>", // set if static=no
}
}
v6: {
"other_server": {
"found": "yes|no|error",
"error": "Error message", // set if found=error
},
}
}
@@ -460,21 +551,26 @@ If `static_ip.static` is:
In order to use DHCP server a static IP address must be set. We failed to determine if this network interface is configured using static IP address. Please set a static IP address manually.
### "Enable DHCP" command
### API: Enable DHCP
Request:
POST /control/dhcp/set_config
{
"enabled":true,
"interface_name":"vboxnet0",
"enabled":true,
"interface_name":"vboxnet0",
"v4":{
"gateway_ip":"192.169.56.1",
"subnet_mask":"255.255.255.0",
"range_start":"192.169.56.3",
"range_end":"192.169.56.3",
"range_start":"192.169.56.100",
"range_end":"192.169.56.200", // Note: first 3 octects must match "range_start"
"lease_duration":60,
"icmp_timeout_msec":0
},
"v6":{
"range_start":"...",
"lease_duration":60,
}
}
Response:
@@ -483,6 +579,10 @@ Response:
OK
For v4, if range_start = "1.2.3.4", the range_end must be "1.2.3.X" where X > 4.
For v6, if range_start = "2001::1", the last IP is "2001:ff".
### Static IP check/set
@@ -578,7 +678,7 @@ or:
systemctl restart system-networkd
### Add a static lease
### API: Add a static lease
Request:
@@ -626,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
@@ -644,6 +791,7 @@ Response:
"server_name":"...",
"port_https":443,
"port_dns_over_tls":853,
"port_dns_over_quic":784,
"certificate_chain":"...",
"private_key":"...",
"certificate_path":"...",
@@ -675,12 +823,43 @@ Request:
"force_https":false,
"port_https":443,
"port_dns_over_tls":853,
"port_dns_over_quic":784,
"certificate_chain":"...",
"private_key":"...",
"certificate_path":"...", // if set, certificate_chain must be empty
"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
@@ -841,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:
@@ -867,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
@@ -887,11 +1071,12 @@ Response:
{
"upstream_dns": ["tls://...", ...],
"upstream_dns_file": "",
"bootstrap_dns": ["1.2.3.4", ...],
"protection_enabled": true | false,
"ratelimit": 1234,
"blocking_mode": "default" | "nxdomain" | "null_ip" | "custom_ip",
"blocking_mode": "default" | "refused" | "nxdomain" | "null_ip" | "custom_ip",
"blocking_ipv4": "1.2.3.4",
"blocking_ipv6": "1:2:3::4",
"edns_cs_enabled": true | false,
@@ -912,11 +1097,12 @@ Request:
{
"upstream_dns": ["tls://...", ...],
"upstream_dns_file": "",
"bootstrap_dns": ["1.2.3.4", ...],
"protection_enabled": true | false,
"ratelimit": 1234,
"blocking_mode": "default" | "nxdomain" | "null_ip" | "custom_ip",
"blocking_mode": "default" | "refused" | "nxdomain" | "null_ip" | "custom_ip",
"blocking_ipv4": "1.2.3.4",
"blocking_ipv6": "1:2:3::4",
"edns_cs_enabled": true | false,
@@ -999,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
@@ -1320,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":"...",
@@ -1340,6 +1527,11 @@ When UI asks for data from query log (see "API: Get query log"), server reads th
We store data for a limited amount of time - the log file is automatically rotated.
* On AGH startup read the first line from query logs and store its time value
* If there's no log file yet, set the time value of the first log event when the file is created
* If this time value is older than our time limit, perform file rotate procedure
* While AGH is running, check the previous condition every 24 hours
### API: Get query log
@@ -1362,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
@@ -1394,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":{
@@ -1747,3 +1940,85 @@ Response:
}
If no client is configured then authentication is disabled and server sends an empty response.
### Safe services
Check if host name is blocked by SB/PC service:
* For each host name component, search for the result in cache by the first 2 bytes of SHA-256 hashes of host name components (max. is 4, i.e. sub2.sub1.host.com), excluding TLD:
hashes[] = cache_search(sha256(host.com)[0..1])
...
If hash prefix is found, search for a full hash sum in the cached data.
If found, the host is blocked.
If not found, the host is not blocked - don't request data for this prefix from the Family server again.
If hash prefix is not found, request data for this prefix from the Family server.
* Prepare query string which is generated from the first 2 bytes (converted to a 4-character string) of SHA-256 hashes of host name components (max. is 4, i.e. sub2.sub1.host.com), excluding TLD:
qs = ... + string(sha256(sub.host.com)[0..1]) + "." + string(sha256(host.com)[0..1]) + ".sb.dns.adguard.com."
For PC `.pc.dns.adguard.com` suffix is used.
* Send TXT query to Family server, receive response which contains the array of complete hash sums of the blocked hosts
* Check if one of received hash sums (`hashes[]`) matches hash sums for our host name
hashes[0] <> sha256(host.com)
hashes[0] <> sha256(sub.host.com)
hashes[1] <> sha256(host.com)
hashes[1] <> sha256(sub.host.com)
...
* Store all received hash sums in cache:
sha256(host.com)[0..1] -> hashes[0],hashes[1],...
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
AGH can add IP addresses of the specified in configuration domain names to an ipset list.
Prepare: user creates an ipset list and configures AGH for using it.
1. User --( ipset create my_ipset hash:ip ) -> OS
2. User --( ipset: host.com,host2.com/my_ipset )-> AGH
Syntax:
ipset: "DOMAIN[,DOMAIN].../IPSET1_NAME[,IPSET2_NAME]..."
IPv4 addresses are added to an ipset list with `ipv4` family, IPv6 addresses - to `ipv6` ipset list.
Run-time: AGH adds IP addresses of a domain name to a corresponding ipset list.
1. AGH --( resolve host.com )-> upstream
2. AGH <-( host.com:[1.1.1.1,2.2.2.2] )-- upstream
3. AGH --( ipset.add(my_ipset, [1.1.1.1,2.2.2.2] ))-> OS

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

174
Makefile
View File

@@ -14,15 +14,27 @@
# Building releases:
#
# * release -- builds AdGuard Home distros. CHANNEL must be specified (edge, release or beta).
# * release_and_sign -- builds AdGuard Home distros and signs the binary files.
# CHANNEL must be specified (edge, release or beta).
# * sign -- Repacks all release archive files and signs the binary files inside them.
# For signing to work, the public+private key pair for $(GPG_KEY) must be imported:
# gpg --import public.txt
# gpg --import private.txt
# GPG_KEY_PASSPHRASE must contain the GPG key passphrase
# * docker-multi-arch -- builds a multi-arch image. If you want it to be pushed to docker hub,
# you must specify:
# * 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
@@ -39,16 +51,24 @@ endif
endif
endif
# Version history URL (see
VERSION_HISTORY_URL="https://github.com/AdguardTeam/AdGuardHome/releases"
ifeq ($(CHANNEL),edge)
VERSION_HISTORY_URL="https://github.com/AdguardTeam/AdGuardHome/commits/master"
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)
@@ -92,20 +112,31 @@ ifndef DOCKER_IMAGE_NAME
$(error DOCKER_IMAGE_NAME value is not set)
endif
# OS-specific flags
TEST_FLAGS := --race $(VERBOSE)
ifeq ($(OS),Windows_NT)
TEST_FLAGS :=
endif
.PHONY: all build client client-watch docker lint lint-js lint-go test dependencies clean release docker-multi-arch
all: build
init:
git config core.hooksPath .githooks
build: dependencies client
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)"
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)"
PATH=$(GOPATH)/bin:$(PATH) packr clean
client:
npm --prefix client run build-prod
client_with_deps:
npm --prefix client ci
npm --prefix client run build-prod
client-watch:
npm --prefix client run watch
@@ -123,43 +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:
@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 -race -v -bench=. -coverprofile=coverage.txt -covermode=atomic ./...
ci: dependencies client test
go-test:
$(GO) test $(TEST_FLAGS) --coverprofile coverage.txt ./...
ci: client_with_deps
$(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 \
@@ -176,13 +204,20 @@ docker-multi-arch:
@echo If the image was pushed to the registry, you can now run it:
@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: dependencies client
release: client_with_deps
$(GO) mod download
@echo Starting release build: version $(VERSION), channel $(CHANNEL)
CHANNEL=$(CHANNEL) $(GORELEASER_COMMAND)
$(call repack_dist)
$(call write_version_file,$(VERSION))
PATH=$(GOPATH)/bin:$(PATH) packr clean
release_and_sign: client_with_deps
$(MAKE) release
$(call repack_dist)
sign:
$(call repack_dist)
define write_version_file
$(eval version := $(1))
@@ -197,7 +232,7 @@ define write_version_file
echo "{" >> $(DIST_DIR)/version.json
echo " \"version\": \"$(version)\"," >> $(DIST_DIR)/version.json
echo " \"announcement\": \"AdGuard Home $(version) is now available!\"," >> $(DIST_DIR)/version.json
echo " \"announcement_url\": \"https://github.com/AdguardTeam/AdGuardHome/releases\"," >> $(DIST_DIR)/version.json
echo " \"announcement_url\": \"$(VERSION_HISTORY_URL)\"," >> $(DIST_DIR)/version.json
echo " \"selfupdate_min_version\": \"0.0\"," >> $(DIST_DIR)/version.json
# Windows builds
@@ -247,29 +282,64 @@ define repack_dist
# and we can't create it
rm -rf $(DIST_DIR)/AdGuardHome
# Windows builds
$(call zip_repack_windows,AdGuardHome_windows_amd64.zip)
$(call zip_repack_windows,AdGuardHome_windows_386.zip)
# MacOS builds
$(call zip_repack,AdGuardHome_darwin_amd64.zip)
$(call zip_repack,AdGuardHome_darwin_386.zip)
# Linux
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_amd64.tar.gz && tar czf AdGuardHome_linux_amd64.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_386.tar.gz && tar czf AdGuardHome_linux_386.tar.gz AdGuardHome/ && rm -rf AdGuardHome
$(call tar_repack,AdGuardHome_linux_amd64.tar.gz)
$(call tar_repack,AdGuardHome_linux_386.tar.gz)
# Linux, all kinds of ARM
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_armv5.tar.gz && tar czf AdGuardHome_linux_armv5.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_armv6.tar.gz && tar czf AdGuardHome_linux_armv6.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_armv7.tar.gz && tar czf AdGuardHome_linux_armv7.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_arm64.tar.gz && tar czf AdGuardHome_linux_arm64.tar.gz AdGuardHome/ && rm -rf AdGuardHome
$(call tar_repack,AdGuardHome_linux_armv5.tar.gz)
$(call tar_repack,AdGuardHome_linux_armv6.tar.gz)
$(call tar_repack,AdGuardHome_linux_armv7.tar.gz)
$(call tar_repack,AdGuardHome_linux_arm64.tar.gz)
# Linux, MIPS
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_mips_softfloat.tar.gz && tar czf AdGuardHome_linux_mips_softfloat.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_mipsle_softfloat.tar.gz && tar czf AdGuardHome_linux_mipsle_softfloat.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_mips64_softfloat.tar.gz && tar czf AdGuardHome_linux_mips64_softfloat.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_linux_mips64le_softfloat.tar.gz && tar czf AdGuardHome_linux_mips64le_softfloat.tar.gz AdGuardHome/ && rm -rf AdGuardHome
$(call tar_repack,AdGuardHome_linux_mips_softfloat.tar.gz)
$(call tar_repack,AdGuardHome_linux_mipsle_softfloat.tar.gz)
$(call tar_repack,AdGuardHome_linux_mips64_softfloat.tar.gz)
$(call tar_repack,AdGuardHome_linux_mips64le_softfloat.tar.gz)
# FreeBSD
cd $(DIST_DIR) && tar xzf AdGuardHome_freebsd_386.tar.gz && tar czf AdGuardHome_freebsd_386.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_freebsd_amd64.tar.gz && tar czf AdGuardHome_freebsd_amd64.tar.gz AdGuardHome/ && rm -rf AdGuardHome
$(call tar_repack,AdGuardHome_freebsd_386.tar.gz)
$(call tar_repack,AdGuardHome_freebsd_amd64.tar.gz)
# FreeBSD, all kinds of ARM
cd $(DIST_DIR) && tar xzf AdGuardHome_freebsd_armv5.tar.gz && tar czf AdGuardHome_freebsd_armv5.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_freebsd_armv6.tar.gz && tar czf AdGuardHome_freebsd_armv6.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_freebsd_armv7.tar.gz && tar czf AdGuardHome_freebsd_armv7.tar.gz AdGuardHome/ && rm -rf AdGuardHome
cd $(DIST_DIR) && tar xzf AdGuardHome_freebsd_arm64.tar.gz && tar czf AdGuardHome_freebsd_arm64.tar.gz AdGuardHome/ && rm -rf AdGuardHome
$(call tar_repack,AdGuardHome_freebsd_armv5.tar.gz)
$(call tar_repack,AdGuardHome_freebsd_armv6.tar.gz)
$(call tar_repack,AdGuardHome_freebsd_armv7.tar.gz)
$(call tar_repack,AdGuardHome_freebsd_arm64.tar.gz)
endef
define zip_repack_windows
$(eval ARC := $(1))
cd $(DIST_DIR) && \
unzip $(ARC) && \
$(GPG_CMD) AdGuardHome/AdGuardHome.exe && \
zip -r $(ARC) AdGuardHome/ && \
rm -rf AdGuardHome
endef
define zip_repack
$(eval ARC := $(1))
cd $(DIST_DIR) && \
unzip $(ARC) && \
$(GPG_CMD) AdGuardHome/AdGuardHome && \
zip -r $(ARC) AdGuardHome/ && \
rm -rf AdGuardHome
endef
define tar_repack
$(eval ARC := $(1))
cd $(DIST_DIR) && \
tar xzf $(ARC) && \
$(GPG_CMD) AdGuardHome/AdGuardHome && \
tar czf $(ARC) AdGuardHome/ && \
rm -rf AdGuardHome
endef

View File

@@ -20,8 +20,11 @@
<a href="https://goreportcard.com/report/AdguardTeam/AdGuardHome">
<img src="https://goreportcard.com/badge/github.com/AdguardTeam/AdGuardHome" alt="Go Report Card" />
</a>
<a href="https://golangci.com/r/github.com/AdguardTeam/AdGuardHome">
<img src="https://golangci.com/badges/github.com/AdguardTeam/AdGuardHome.svg" alt="GolangCI" />
<a href="https://hub.docker.com/r/adguard/adguardhome">
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/adguard/adguardhome.svg?maxAge=604800" />
</a>
<a href="https://hub.docker.com/r/adguard/adguardhome">
<img alt="Docker Stars" src="https://img.shields.io/docker/stars/adguard/adguardhome.svg?maxAge=604800" />
</a>
<br />
<a href="https://github.com/AdguardTeam/AdGuardHome/releases">
@@ -30,12 +33,6 @@
<a href="https://snapcraft.io/adguard-home">
<img alt="adguard-home" src="https://snapcraft.io/adguard-home/badge.svg" />
</a>
<a href="https://hub.docker.com/r/adguard/adguardhome">
<img alt="Docker Pulls" src="https://img.shields.io/docker/pulls/adguard/adguardhome.svg?maxAge=604800" />
</a>
<a href="https://hub.docker.com/r/adguard/adguardhome">
<img alt="Docker Stars" src="https://img.shields.io/docker/stars/adguard/adguardhome.svg?maxAge=604800" />
</a>
</p>
<br />
@@ -63,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 +168,9 @@ Run `make init` to prepare the development environment.
You will need this to build AdGuard Home:
* [go](https://golang.org/dl/) v1.14 or later.
* [node.js](https://nodejs.org/en/download/) v10 or later.
* [golangci-lint](https://github.com/golangci/golangci-lint)
* [node.js](https://nodejs.org/en/download/) v10.16.2 or later.
* [npm](https://www.npmjs.com/) v6.14 or later.
### 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:
@@ -214,6 +227,8 @@ You may need to prepare before using these builds:
You are welcome to fork this repository, make your changes and submit a pull request — https://github.com/AdguardTeam/AdGuardHome/pulls
Please note that we don't expect people to contribute to both UI and golang parts of the program simultaneously. Ideally, the golang part is implemented first, i.e. configuration, API, and the functionality itself. The UI part can be implemented later in a different pull request by a different person.
<a id="test-unstable-versions"></a>
### Test unstable versions
@@ -226,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 a beta or edge version of AdGuard Home which we update periodically. If you're already using stable version of AdGuard Home, just replace the executable 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)
@@ -271,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).
@@ -305,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).

83
client/.eslintrc.json vendored
View File

@@ -1,18 +1,15 @@
{
"parser": "babel-eslint",
"extends": [
"plugin:react/recommended",
"airbnb-base"
],
"env": {
"jest": true,
"node": true,
"browser": true,
"commonjs": true
},
"settings": {
"react": {
"pragma": "React",
@@ -24,35 +21,65 @@
}
}
},
"rules": {
"indent": ["error", 4, {
"SwitchCase": 1,
"VariableDeclarator": 1,
"outerIIFEBody": 1,
"FunctionDeclaration": {
"parameters": 1,
"body": 1
},
"FunctionExpression": {
"parameters": 1,
"body": 1
},
"CallExpression": {
"arguments": 1
},
"ArrayExpression": 1,
"ObjectExpression": 1,
"ImportDeclaration": 1,
"flatTernaryExpressions": false,
"ignoredNodes": ["JSXElement", "JSXElement > *", "JSXAttribute", "JSXIdentifier", "JSXNamespacedName", "JSXMemberExpression", "JSXSpreadAttribute", "JSXExpressionContainer", "JSXOpeningElement", "JSXClosingElement", "JSXText", "JSXEmptyExpression", "JSXSpreadChild"],
"ignoreComments": false
}],
"indent": [
"error",
4,
{
"SwitchCase": 1,
"VariableDeclarator": 1,
"outerIIFEBody": 1,
"FunctionDeclaration": {
"parameters": 1,
"body": 1
},
"FunctionExpression": {
"parameters": 1,
"body": 1
},
"CallExpression": {
"arguments": 1
},
"ArrayExpression": 1,
"ObjectExpression": 1,
"ImportDeclaration": 1,
"flatTernaryExpressions": false,
"ignoredNodes": [
"JSXElement",
"JSXElement > *",
"JSXAttribute",
"JSXIdentifier",
"JSXNamespacedName",
"JSXMemberExpression",
"JSXSpreadAttribute",
"JSXExpressionContainer",
"JSXOpeningElement",
"JSXClosingElement",
"JSXText",
"JSXEmptyExpression",
"JSXSpreadChild"
],
"ignoreComments": false
}
],
"class-methods-use-this": "off",
"no-shadow": "off",
"camelcase": "off",
"no-console": ["warn", { "allow": ["warn", "error"] }],
"import/no-extraneous-dependencies": ["error", { "devDependencies": true }],
"no-console": [
"warn",
{
"allow": [
"warn",
"error"
]
}
],
"import/no-extraneous-dependencies": [
"error",
{
"devDependencies": true
}
],
"import/prefer-default-export": "off",
"no-alert": "off"
}

View File

@@ -11,6 +11,7 @@ module.exports = (api) => {
'@babel/plugin-proposal-object-rest-spread',
'@babel/plugin-proposal-nullish-coalescing-operator',
'@babel/plugin-proposal-optional-chaining',
'react-hot-loader/babel',
],
};
};

11
client/constants.js vendored Normal file
View File

@@ -0,0 +1,11 @@
const BUILD_ENVS = {
dev: 'development',
prod: 'production',
};
const BASE_URL = 'control';
module.exports = {
BUILD_ENVS,
BASE_URL,
};

610
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": {
@@ -2257,6 +2353,12 @@
"@types/istanbul-lib-report": "*"
}
},
"@types/json-schema": {
"version": "7.0.5",
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
"integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ==",
"dev": true
},
"@types/minimatch": {
"version": "3.0.3",
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
@@ -2728,7 +2830,6 @@
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz",
"integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==",
"dev": true,
"requires": {
"sprintf-js": "~1.0.2"
}
@@ -2965,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",
@@ -3827,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": {
@@ -4676,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",
@@ -4701,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": {
@@ -4714,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": {
@@ -4733,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": {
@@ -4744,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": {
@@ -4958,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",
@@ -5108,6 +5220,12 @@
}
}
},
"dom-walk": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.2.tgz",
"integrity": "sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==",
"dev": true
},
"domain-browser": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz",
@@ -5201,9 +5319,9 @@
"dev": true
},
"elliptic": {
"version": "6.5.2",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.2.tgz",
"integrity": "sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw==",
"version": "6.5.3",
"resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.3.tgz",
"integrity": "sha512-IMqzv5wNQf+E6aHeIqATs0tOLeOTwj1QKbRcS3jBbYkl5oLAserA8yJTT7/VyHUYG91PRmPyeQDObKLPpeS4dw==",
"dev": true,
"requires": {
"bn.js": "^4.4.0",
@@ -5216,9 +5334,9 @@
},
"dependencies": {
"bn.js": {
"version": "4.11.8",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz",
"integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==",
"version": "4.11.9",
"resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.9.tgz",
"integrity": "sha512-E6QoYqCKZfgatHTdHzs1RRKP7ip4vvm+EyRUeE2RF0NblwVvb0p6jSVeNTOFxPn26QXN2o6SMfNxKp6kU8zQaw==",
"dev": true
}
}
@@ -5242,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": {
@@ -5887,8 +6015,7 @@
"esprima": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz",
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==",
"dev": true
"integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A=="
},
"esquery": {
"version": "1.3.1",
@@ -6756,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",
@@ -6844,6 +6966,16 @@
}
}
},
"global": {
"version": "4.4.0",
"resolved": "https://registry.npmjs.org/global/-/global-4.4.0.tgz",
"integrity": "sha512-wv/LAoHdRE3BeTGz53FAamhGlPLhlssK45usmGFThIi4XqnBmjKQ16u+RNbP7WvigRZDxUsM0J3gcQ5yicaL0w==",
"dev": true,
"requires": {
"min-document": "^2.19.0",
"process": "^0.11.10"
}
},
"global-modules": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz",
@@ -7357,18 +7489,6 @@
"requires-port": "^1.0.0"
}
},
"http-proxy-middleware": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
"integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
"dev": true,
"requires": {
"http-proxy": "^1.17.0",
"is-glob": "^4.0.0",
"lodash": "^4.17.11",
"micromatch": "^3.1.10"
}
},
"http-signature": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz",
@@ -7393,11 +7513,21 @@
"dev": true
},
"i18next": {
"version": "19.4.4",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-19.4.4.tgz",
"integrity": "sha512-ofaHtdsDdX3A5nYur1HWblB7J4hIcjr2ACdnwTAJgc8hTfPbyzZfGX0hVkKpI3vzDIgO6Uzc4v1ffW2W6gG6zw==",
"version": "19.6.2",
"resolved": "https://registry.npmjs.org/i18next/-/i18next-19.6.2.tgz",
"integrity": "sha512-Zyd/Z32FY+sD+Eg6sLj5DeDSlrIN3WZ4onuOBRGcjDx/rvodsyUZ9TJ2Y+3aD9Vu8MPbiMU2WesIER/rs1ioyw==",
"requires": {
"@babel/runtime": "^7.3.1"
"@babel/runtime": "^7.10.1"
},
"dependencies": {
"@babel/runtime": {
"version": "7.10.5",
"resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.10.5.tgz",
"integrity": "sha512-otddXKhdNn7d0ptoFRHtMLa8LqDxLYwTjB4nYgM1yy5N6gU/MUf8zqyyLltCH3yAVitBzmwK4us+DD0l/MauAg==",
"requires": {
"regenerator-runtime": "^0.13.4"
}
}
}
},
"i18next-browser-languagedetector": {
@@ -7412,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"
}
@@ -9898,10 +10029,9 @@
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ=="
},
"js-yaml": {
"version": "3.13.1",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz",
"integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==",
"dev": true,
"version": "3.14.0",
"resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.0.tgz",
"integrity": "sha512-/4IbIeHcD9VMHFqDR/gQ7EdZdLimOvW2DdcxFjdyyZ9NsbS+ccrXqVWDtab/lRl5AlUqmpBx8EhPaWR+OtY17A==",
"requires": {
"argparse": "^1.0.7",
"esprima": "^4.0.0"
@@ -10177,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",
@@ -10628,6 +10768,15 @@
"integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
"dev": true
},
"min-document": {
"version": "2.19.0",
"resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz",
"integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=",
"dev": true,
"requires": {
"dom-walk": "^0.1.0"
}
},
"min-indent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.0.tgz",
@@ -10747,6 +10896,24 @@
"yallist": "^4.0.0"
}
},
"mississippi": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
"integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
"dev": true,
"requires": {
"concat-stream": "^1.5.0",
"duplexify": "^3.4.2",
"end-of-stream": "^1.1.0",
"flush-write-stream": "^1.0.0",
"from2": "^2.1.0",
"parallel-transform": "^1.1.0",
"pump": "^3.0.0",
"pumpify": "^1.3.3",
"stream-each": "^1.1.0",
"through2": "^2.0.0"
}
},
"mixin-deep": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz",
@@ -12132,9 +12299,9 @@
}
},
"pump": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
@@ -12150,6 +12317,18 @@
"duplexify": "^3.6.0",
"inherits": "^2.0.3",
"pump": "^2.0.0"
},
"dependencies": {
"pump": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz",
"integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
}
}
}
},
"punycode": {
@@ -12287,10 +12466,43 @@
"scheduler": "^0.19.1"
}
},
"react-hot-loader": {
"version": "4.12.21",
"resolved": "https://registry.npmjs.org/react-hot-loader/-/react-hot-loader-4.12.21.tgz",
"integrity": "sha512-Ynxa6ROfWUeKWsTHxsrL2KMzujxJVPjs385lmB2t5cHUxdoRPGind9F00tOkdc1l5WBleOF4XEAMILY1KPIIDA==",
"dev": true,
"requires": {
"fast-levenshtein": "^2.0.6",
"global": "^4.3.0",
"hoist-non-react-statics": "^3.3.0",
"loader-utils": "^1.1.0",
"prop-types": "^15.6.1",
"react-lifecycles-compat": "^3.0.4",
"shallowequal": "^1.1.0",
"source-map": "^0.7.3"
},
"dependencies": {
"hoist-non-react-statics": {
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz",
"integrity": "sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
"dev": true,
"requires": {
"react-is": "^16.7.0"
}
},
"source-map": {
"version": "0.7.3",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz",
"integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==",
"dev": true
}
}
},
"react-i18next": {
"version": "11.4.0",
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.4.0.tgz",
"integrity": "sha512-lyOZSSQkif4H9HnHN3iEKVkryLI+WkdZSEw3VAZzinZLopfYRMHVY5YxCopdkXPLEHs6S5GjKYPh3+j0j336Fg==",
"version": "11.7.2",
"resolved": "https://registry.npmjs.org/react-i18next/-/react-i18next-11.7.2.tgz",
"integrity": "sha512-Djj3K3hh5Tecla2CI9rLO3TZBYGMFrGilm0JY4cLofAQONCi5TK6nVmUPKoB59n1ZffgjfgJt6zlbE9aGF6Q0Q==",
"requires": {
"@babel/runtime": "^7.3.1",
"html-parse-stringify2": "2.0.1"
@@ -12314,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",
@@ -12487,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",
@@ -12574,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"
}
},
@@ -13211,10 +13423,13 @@
}
},
"serialize-javascript": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.0.0.tgz",
"integrity": "sha512-skZcHYw2vEX4bw90nAr2iTTsz6x2SrHEnfxgKYmZlvJYBEZrvbKtobJWlQ20zczKb3bsHHXXTYt48zBA7ni9cw==",
"dev": true
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-3.1.0.tgz",
"integrity": "sha512-JIJT1DGiWmIKhzRsG91aS6Ze4sFUrYbltlkg2onR5OrnNM02Kl/hnY/T4FN2omvyeBbQmMJv+K4cPOpGzOTFBg==",
"dev": true,
"requires": {
"randombytes": "^2.1.0"
}
},
"serve-index": {
"version": "1.9.1",
@@ -13328,6 +13543,12 @@
"safe-buffer": "^5.0.1"
}
},
"shallowequal": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/shallowequal/-/shallowequal-1.1.0.tgz",
"integrity": "sha512-y0m1JoUZSlPAjXVtPPW70aZWfIL/dSP7AFkRnniLCrK/8MDKog3TySTBmckD+RObVxH0v4Tox67+F14PdED2oQ==",
"dev": true
},
"shebang-command": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
@@ -13491,7 +13712,8 @@
},
"kind-of": {
"version": "6.0.2",
"resolved": "",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz",
"integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==",
"dev": true
}
}
@@ -13751,8 +13973,7 @@
"sprintf-js": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz",
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw="
},
"sshpk": {
"version": "1.16.1",
@@ -14079,12 +14300,13 @@
}
},
"schema-utils": {
"version": "2.6.6",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.6.6.tgz",
"integrity": "sha512-wHutF/WPSbIi9x6ctjGGk2Hvl0VOz5l3EKEuKbjPlB30mKZUzb9A5k9yEXRX3pwyqVLPvpfZZEllaFq/M718hA==",
"version": "2.7.0",
"resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-2.7.0.tgz",
"integrity": "sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A==",
"dev": true,
"requires": {
"ajv": "^6.12.0",
"@types/json-schema": "^7.0.4",
"ajv": "^6.12.2",
"ajv-keywords": "^3.4.1"
}
}
@@ -14542,16 +14764,16 @@
}
},
"terser-webpack-plugin": {
"version": "1.4.3",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.3.tgz",
"integrity": "sha512-QMxecFz/gHQwteWwSo5nTc6UaICqN1bMedC5sMtUc7y3Ha3Q8y6ZO0iCR8pq4RJC8Hjf0FEPEHZqcMB/+DFCrA==",
"version": "1.4.5",
"resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz",
"integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==",
"dev": true,
"requires": {
"cacache": "^12.0.2",
"find-cache-dir": "^2.1.0",
"is-wsl": "^1.1.0",
"schema-utils": "^1.0.0",
"serialize-javascript": "^2.1.2",
"serialize-javascript": "^4.0.0",
"source-map": "^0.6.1",
"terser": "^4.1.2",
"webpack-sources": "^1.4.0",
@@ -14611,15 +14833,6 @@
"path-exists": "^3.0.0"
}
},
"lru-cache": {
"version": "5.1.1",
"resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz",
"integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==",
"dev": true,
"requires": {
"yallist": "^3.0.2"
}
},
"make-dir": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz",
@@ -14630,24 +14843,6 @@
"semver": "^5.6.0"
}
},
"mississippi": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz",
"integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==",
"dev": true,
"requires": {
"concat-stream": "^1.5.0",
"duplexify": "^3.4.2",
"end-of-stream": "^1.1.0",
"flush-write-stream": "^1.0.0",
"from2": "^2.1.0",
"parallel-transform": "^1.1.0",
"pump": "^3.0.0",
"pumpify": "^1.3.3",
"stream-each": "^1.1.0",
"through2": "^2.0.0"
}
},
"p-limit": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz",
@@ -14687,22 +14882,15 @@
"find-up": "^3.0.0"
}
},
"pump": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz",
"integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==",
"serialize-javascript": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz",
"integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==",
"dev": true,
"requires": {
"end-of-stream": "^1.1.0",
"once": "^1.3.1"
"randombytes": "^2.1.0"
}
},
"serialize-javascript": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz",
"integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==",
"dev": true
},
"source-map": {
"version": "0.6.1",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
@@ -14717,12 +14905,6 @@
"requires": {
"figgy-pudding": "^3.5.1"
}
},
"yallist": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz",
"integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==",
"dev": true
}
}
},
@@ -15008,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",
@@ -15930,6 +16112,18 @@
"ms": "^2.1.1"
}
},
"http-proxy-middleware": {
"version": "0.19.1",
"resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz",
"integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==",
"dev": true,
"requires": {
"http-proxy": "^1.17.0",
"is-glob": "^4.0.0",
"lodash": "^4.17.11",
"micromatch": "^3.1.10"
}
},
"ms": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
@@ -16015,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",

11
client/package.json vendored
View File

@@ -4,21 +4,23 @@
"private": true,
"scripts": {
"build-dev": "cross-env BUILD_ENV=dev webpack --config webpack.dev.js",
"watch": "cross-env BUILD_ENV=dev webpack --config webpack.dev.js --watch",
"build-prod": "cross-env BUILD_ENV=prod webpack --config webpack.prod.js",
"watch": "cross-env BUILD_ENV=dev webpack --config webpack.dev.js --watch",
"watch:hot": "cross-env BUILD_ENV=dev webpack-dev-server --config webpack.dev.js",
"lint": "eslint src",
"lint:fix": "eslint src --fix",
"test": "jest",
"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",
"i18next": "^19.4.4",
"i18next": "^19.6.2",
"i18next-browser-languagedetector": "^4.2.0",
"ipaddr.js": "^1.9.1",
"js-yaml": "^3.14.0",
"lodash": "^4.17.19",
"nanoid": "^3.1.9",
"prop-types": "^15.7.2",
@@ -26,7 +28,7 @@
"react": "^16.13.1",
"react-click-outside": "^3.0.1",
"react-dom": "^16.13.1",
"react-i18next": "^11.4.0",
"react-i18next": "^11.7.2",
"react-modal": "^3.11.2",
"react-popper-tooltip": "^2.11.1",
"react-redux": "^7.2.0",
@@ -73,6 +75,7 @@
"path": "^0.12.7",
"postcss-flexbugs-fixes": "4.2.1",
"postcss-loader": "^3.0.0",
"react-hot-loader": "^4.12.21",
"style-loader": "^1.2.1",
"stylelint": "^13.5.0",
"stylelint-webpack-plugin": "2.0.0",

View File

@@ -0,0 +1,587 @@
{
"client_settings": "Налады кліентаў",
"example_upstream_reserved": "Вы можаце паказаць DNS-сервер <0>для канкрэтнага дамена(аў)</0>",
"example_upstream_comment": "Вы можаце паказаць каментар",
"upstream_parallel": "Ужыць адначасныя запыты да ўсіх сервераў для паскарэння апрацоўкі запыту",
"parallel_requests": "Паралельныя запыты",
"load_balancing": "Размеркаванне нагрузкі",
"load_balancing_desc": "Запытвайце па адным серверы за раз. AdGuard Home будзе выкарыстоўваць выпадковы алгарытм для выбару сервера, так што самы хуткі сервер будзе выкарыстоўвацца часцей.",
"bootstrap_dns": "Bootstrap DNS-серверы",
"bootstrap_dns_desc": "Bootstrap DNS-серверы выкарыстоўваюцца для пошуку IP-адрасоў DoH/DoT сервераў, якія вы паказалі.",
"check_dhcp_servers": "Праверыць DHCP-серверы",
"save_config": "Захаваць канфігурацыю",
"enabled_dhcp": "DHCP-сервер улучаны",
"disabled_dhcp": "DHCP-сервер адключаны",
"unavailable_dhcp": "DHCP недаступна",
"unavailable_dhcp_desc": "AdGuard Home не можа запусціць DHCP-сервер на вашай АС",
"dhcp_title": "DHCP-сервер (эксперыментальны!)",
"dhcp_description": "Калі ваш роўтар не падае налады DHCP, вы можаце выкарыстоўваць уласны ўбудаваны DHCP-сервер AdGuard.",
"dhcp_enable": "Уключыць DHCP-сервер",
"dhcp_disable": "Адключыць DHCP-сервер",
"dhcp_not_found": "Актыўныя DHCP-серверы ў сеціве не знойдзены. Вы можаце бяспечна ўключыць убудаваны сервер DHCP.",
"dhcp_found": "Некаторыя актыўныя DHCP-серверы знойдзены ў сеціве. Улучэнне ўбудаванага DHCP-сервера небяспечнае.",
"dhcp_leases": "Арэнда DHCP",
"dhcp_static_leases": "Статычныя арэнды DHCP",
"dhcp_leases_not_found": "Арэнда DHCP не выяўлена",
"dhcp_config_saved": "Канфігурацыя DHCP-сервера паспяхова захавана",
"dhcp_ipv4_settings": "Налады DHCP IPv4",
"dhcp_ipv6_settings": "Налады DHCP IPv6",
"form_error_required": "Абавязковае поле",
"form_error_ip4_format": "Няслушны фармат IPv4",
"form_error_ip6_format": "Няслушны фармат IPv6",
"form_error_ip_format": "Няслушны фармат IP-адраса",
"form_error_mac_format": "Некарэктны фармат MAC",
"form_error_client_id_format": "Няслушны фармат ID кліента",
"form_error_positive": "Павінна быць больш 0",
"form_error_negative": "Павінна быць не менш 0",
"range_end_error": "Павінен перавышаць пачатак дыяпазону",
"dhcp_form_gateway_input": "IP-адрас шлюза",
"dhcp_form_subnet_input": "Маска падсеціва",
"dhcp_form_range_title": "Дыяпазон IP-адрасоў",
"dhcp_form_range_start": "Пачатак дыяпазону",
"dhcp_form_range_end": "Конец диапазона",
"dhcp_form_lease_title": "Час арэнды DHCP (у секундах)",
"dhcp_form_lease_input": "Тэрмін арэнды",
"dhcp_interface_select": "Выбраць інтэрфейс DHCP",
"dhcp_hardware_address": "Апаратны адрас",
"dhcp_ip_addresses": "IP-адрасы",
"ip": "IP-адрас",
"dhcp_table_hostname": "Імя хаста",
"dhcp_table_expires": "Мінае",
"dhcp_warning": "Калі вы ўсё адно хочаце ўключыць DHCP-сервер, пераканайцеся, што ў сеціве больш няма актыўных DHCP-сервераў. Інакш гэта можа зламаць доступ у сеціва для падлучаных прылад!",
"dhcp_error": "Мы не змаглі вызначыць наяўнасць іншых DHCP-сервераў у сеціве.",
"dhcp_static_ip_error": "Для таго, каб выкарыстоўваць DHCP-сервер, павінен быць усталяваны статычны IP-адрас. Мы не змаглі вызначыць, ці выкарыстоўвае гэты інтэрфейс сеціва статычны IP-адрас. Калі ласка, усталюйце яго ручна.",
"dhcp_dynamic_ip_found": "Ваша сістэма выкарыстоўвае дынамічны IP-адрас для інтэрфейсу <0>{{interfaceName}}</0>. Каб выкарыстоўваць DHCP-сервер трэба ўсталяваць статычны IP-адрас. Ваш бягучы IP-адрас <0>{{ipAddress}}</0>. Мы аўтаматычна ўсталюем яго як статычны, калі вы націснеце кнопку Ўключыць DHCP.",
"dhcp_lease_added": "Статычная арэнда \"{{key}}\" паспяхова дададзена",
"dhcp_lease_deleted": "Статычная арэнда \"{{key}}\" паспяхова выдалена",
"dhcp_new_static_lease": "Новая статычная арэнда",
"dhcp_static_leases_not_found": "Не знойдзена статычных арэнд DHCP",
"dhcp_add_static_lease": "Дадаць статычную арэнду",
"dhcp_reset": "Вы ўпэўнены, што хочаце скінуць налады DHCP?",
"country": "Краіна",
"city": "Горад",
"delete_confirm": "Вы ўпэўнены, што хочаце выдаліць \"{{key}}\"?",
"form_enter_hostname": "Увядзіце імя хаста",
"error_details": "Дэталізацыя памылкі",
"response_details": "Дэталі адказу",
"request_details": "Інфармацыя пра запыт",
"client_details": "Дэталі кліента",
"details": "Дэталі",
"back": "Назад",
"dashboard": "Панэль кіравання",
"settings": "Налады",
"filters": "Фільтры",
"filter": "Фільтр",
"query_log": "Часопіс",
"compact": "Компактный",
"nothing_found": "Нічога не знойдзена",
"faq": "FAQ",
"version": "версія",
"address": "Адрас",
"protocol": "Пратакол",
"on": "УКЛ",
"off": "Выкл",
"copyright": "Усе правы захаваныя",
"homepage": "Галоўная",
"report_an_issue": "Паведаміць пра праблему",
"privacy_policy": "Палітыка прыватнасці",
"enable_protection": "Уключыць абарону",
"enabled_protection": "Абарона ўкл.",
"disable_protection": "Адключыць абарону",
"disabled_protection": "Абарона выкл.",
"refresh_statics": "Абнавіць статыстыку",
"dns_query": "DNS-запыты",
"blocked_by": "<0>Заблакавана фільтрамі</0>",
"stats_malware_phishing": "Заблакаваныя шкодныя і фішынгавыя сайты",
"stats_adult": "Заблакаваныя \"дарослыя\" сайты",
"stats_query_domain": "Часта запытаныя дамены",
"for_last_24_hours": "за 24 гадзіны",
"for_last_days": "за апошні {{count}} дзень",
"for_last_days_plural": "за апошнія {{count}} дзён",
"no_domains_found": "Дамены не знойдзены",
"requests_count": "Колькасць запытаў",
"top_blocked_domains": "Часта блакаваныя дамены",
"top_clients": "Частыя кліенты",
"no_clients_found": "Кліентаў не знойдзена",
"general_statistics": "Агульная статыстыка",
"number_of_dns_query_days": "Колькасць DNS-запытаў за апошні {{count}} дзень",
"number_of_dns_query_days_plural": "Колькасць DNS запытаў, апрацаваных за апошнія {{count}} дзён",
"number_of_dns_query_24_hours": "Колькасць DNS-запытаў за 24 гадзіны",
"number_of_dns_query_blocked_24_hours": "Колькасць DNS-запытаў, заблакаваных фільтрамі і блок-спісамі",
"number_of_dns_query_blocked_24_hours_by_sec": "Колькасць DNS-запытаў, заблакаваных модулем Антыфішынгу AdGuard",
"number_of_dns_query_blocked_24_hours_adult": "Колькасць заблакаваных \"сайтаў для дарослых\"",
"enforced_save_search": "Ужыты бяспечны пошук",
"number_of_dns_query_to_safe_search": "Колькасць запытаў DNS для пошукавых сістэм, для якіх быў ужыты Бяспечны пошук",
"average_processing_time": "Сярэдні час апрацоўкі запыту",
"average_processing_time_hint": "Сярэдні час для апрацоўкі запыту DNS у мілісекундах",
"block_domain_use_filters_and_hosts": "Блакаваць дамены з выкарыстаннем фільтраў і файлаў хастоў",
"filters_block_toggle_hint": "Вы можаце наладзіць правілы блакавання ў <a> \"Фільтрах\"</a>.",
"use_adguard_browsing_sec": "Выкарыстаць Бяспечную навігацыю AdGuard",
"use_adguard_browsing_sec_hint": "AdGuard Home праверыць, ці ўлучаны дамен у ўэб-службу бяспекі браўзара. Ён будзе выкарыстоўваць API, каб выканаць праверку: на сервер адсылаецца толькі кароткі прэфікс імя дамена SHA256.",
"use_adguard_parental": "Ужывайце модуль Бацькоўскага кантролю AdGuard ",
"use_adguard_parental_hint": "AdGuard Home праверыць, ці ўтрымвае дамен матэрыялы 18+. Ён выкарыстоўвае той жа API для забеспячэння прыватнасці, што і ўэб-служба бяспекі браўзара.",
"enforce_safe_search": "Узмацніць бяспечны пошук",
"enforce_save_search_hint": "AdGuard Home можа забяспечыць бяспечны пошук у наступных пошукавых сістэмах: Google, Youtube, Bing, DuckDuckGo, Yandex і Pixabay.",
"no_servers_specified": "Не паказаных сервераў",
"general_settings": "Асноўныя налады",
"dns_settings": "Налады DNS",
"dns_blocklists": "Чорныя спісы DNS",
"dns_allowlists": "Белыя спісы DNS",
"dns_blocklists_desc": "AdGuard Home будзе блакаваць дамены з чорных спісаў.",
"dns_allowlists_desc": "Дамены з белых спісаў DNS будуць дазволены, нават калі яны знаходзяцца ў любым з чорных спісаў.",
"custom_filtering_rules": "Карыстацкія правілы фільтрацыі",
"encryption_settings": "Налады шыфравання",
"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": "Ужыць",
"disabled_filtering_toast": "Фільтрацыя выкл.",
"enabled_filtering_toast": "Фільтрацыя ўкл.",
"disabled_safe_browsing_toast": "Бяспечная навігацыя выкл.",
"enabled_safe_browsing_toast": "Бяспечная навігацыя ўкл.",
"disabled_parental_toast": "Бацькоўскі кантроль выкл.",
"enabled_parental_toast": "Бацькоўскі кантроль укл.",
"disabled_safe_search_toast": "Бяспечны пошук выкл.",
"enabled_save_search_toast": "Бяспечны пошук укл.",
"enabled_table_header": "УКЛ.",
"name_table_header": "Імя",
"list_url_table_header": "URL-адрас спіса",
"rules_count_table_header": "Колькасць правілаў:",
"last_time_updated_table_header": "Апошняе абнаўленне",
"actions_table_header": "Дзеянні",
"request_table_header": "Запыт",
"edit_table_action": "Рэдагаваць",
"delete_table_action": "Выдаліць",
"elapsed": "Прайшло",
"filters_and_hosts_hint": "AdGuard Home распазнае базавыя правілы блакавання і сінтаксіс файлаў hosts.",
"no_blocklist_added": "Чорныя спісы не дададзены",
"no_whitelist_added": "Белыя спісы не дададзены",
"add_blocklist": "Дадаць чорны спіс",
"add_allowlist": "Дадаць белы спіс",
"cancel_btn": "Адмена",
"enter_name_hint": "Увядзіце імя",
"enter_url_or_path_hint": "Увядзіце URL-адрас ці абсалютны шлях да спіса",
"check_updates_btn": "Праверыць абнаўленні",
"new_blocklist": "Новы чорны спіс",
"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": "Уводзьце па адным правіле на радок. Вы можаце выкарыстоўваць правілы блакавання ці сінтаксіс файлаў hosts.",
"examples_title": "Прыклады",
"example_meaning_filter_block": "заблакаваць доступ да дамена example.org і ўсім яго паддаменам",
"example_meaning_filter_whitelist": "адблакаваць доступ да дамена example.org і ўсім яго паддаменам",
"example_meaning_host_block": "Зараз AdGuard Home верне 127.0.0.1 для дамена example.org (але не для яго паддаменаў).",
"example_comment": "! Так можна дадаваць апісанне",
"example_comment_meaning": "каментар",
"example_comment_hash": "# І вось так таксама",
"example_regex_meaning": "блакуе доступ да даменаў, што адпавядаюць <0>зададзенаму рэгулярнаму выразу</0>",
"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": "Усе спісы ўжо абноўлены",
"updated_upstream_dns_toast": "Upstream DNS-серверы абноўлены",
"dns_test_ok_toast": "Паказаныя серверы DNS працуюць карэктна",
"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": "Дамен",
"domain_or_client": "Дамен ці кліент",
"type_table_header": "Тып",
"response_table_header": "Адказ",
"response_code": "Код адказа",
"client_table_header": "Кліент",
"empty_response_status": "Пуста",
"show_all_filter_type": "Паказаць усё",
"show_filtered_type": "Паказаць адфільтраваныя",
"no_logs_found": "Логі не знойдзены",
"refresh_btn": "Абнавіць",
"previous_btn": "Назад",
"next_btn": "Наперад",
"loading_table_status": "Загрузка...",
"page_table_footer_text": "Старонка",
"rows_table_footer_text": "радкоў",
"updated_custom_filtering_toast": "Занесены змены ў карыстацкія правілы",
"rule_removed_from_custom_filtering_toast": "Карыстацкае правіла выдалена: {{rule}}",
"rule_added_to_custom_filtering_toast": "Карыстацкае правіла дададзена: {{rule}}",
"query_log_response_status": "Статус: {{value}}",
"query_log_filtered": "Адфільтравана з дапамогай {{filter}}",
"query_log_confirm_clear": "Вы ўпэўнены, што хочаце ачысціць увесь часопіс запытаў?",
"query_log_cleared": "Часопіс запытаў паспяхова вычышчаны",
"query_log_updated": "Часопіс запытаў паспяхова абноўлены",
"query_log_clear": "Ачысціць часопіс запытаў",
"query_log_retention": "Захаванне часопіса запытаў",
"query_log_enable": "Уключыць часопіс",
"query_log_configuration": "Налада часопіса",
"query_log_disabled": "Часопіс запытаў выключаны, яго можна ўключыць у <0>наладах</0>",
"query_log_strict_search": "Ужывайце падвойныя двукоссі для строгага пошуку",
"query_log_retention_confirm": "Вы ўпэўнены, што хочаце змяніць тэрмін захоўвання запытаў? Пры скарачэнні інтэрвалу дадзеныя могуць быць згублены",
"anonymize_client_ip": "Ананімізацыя IP-адрасы кліента",
"anonymize_client_ip_desc": "Не захоўвайце поўны IP-адрас кліента ў часопісах і статыстыцы",
"dns_config": "Налады DNS-сервера",
"dns_cache_config": "Налада кэша DNS",
"dns_cache_config_desc": "Тут можна наладзіць кэш DNS",
"blocking_mode": "Рэжым блакавання",
"default": "Стандартны",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Нулёвы IP",
"custom_ip": "Свой IP",
"blocking_ipv4": "Блакаванне IPv4",
"blocking_ipv6": "Блакаванне IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "Нешыфраваны DNS",
"form_enter_rate_limit": "Увядзіце rate limit",
"rate_limit": "Ограничение скорости",
"edns_enable": "Уключыць адпраўленне EDNS Client Subnet",
"edns_cs_desc": "Калі ўключыць гэту опцыю, AdGuard Home будзе адпраўляць падсеціва кліентаў на DNS-сервера.",
"rate_limit_desc": "Абмежаванне на колькасць запытаў у секунду для кожнага кліента (0 — неабмежавана)",
"blocking_ipv4_desc": "IP-адрас, што вяртаецца пры блакаванню A-запыту",
"blocking_ipv6_desc": "IP-адрас, што вяртаецца пры блакаванню AAAA-запыту",
"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-адрасам",
"upstream_dns_client_desc": "Калі пакінуць поле пустым, AdGuard Home будзе звяртацца да сервераў, паказаных у <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-сервер, што блакуе рэкламу і трэкінг. Яго мэта даць вам магчымасць кантраляваць усю ваша сеціва і ўсе падлучаныя прылады. Ён не патрабуе ўсталёўкі кліенцкіх праграм.",
"install_settings_title": "Ўэб-інтэрфейс адміністравання",
"install_settings_listen": "Інтэрфейс сеціва",
"install_settings_port": "Порт",
"install_settings_interface_link": "Ваш ўэб-інтэрфейс адміністравання AdGuard Home будзе даступны па наступных адрасах:",
"form_error_port": "Увядзіце карэктны порт",
"install_settings_dns": "DNS-сервер",
"install_settings_dns_desc": "Вам будзе трэба наладзіць свае прылады ці роўтар на выкарыстанне DNS-сервера на адным з наступных адрасоў:",
"install_settings_all_interfaces": "Усе інтэрфейсы",
"install_auth_title": "Аўтарызацыя",
"install_auth_desc": "Настойліва рэкамендуецца наладзіць аўтэнтыфікацыю паролем для ўэб-інтэрфейсу AdGuard Home. Нават калі ён даступны толькі ў вашай лакальнай сетцы, важна абараніць яго ад неабмежаванага доступу.",
"install_auth_username": "Імя карыстача",
"install_auth_password": "Пароль",
"install_auth_confirm": "Пацвердзіць пароль",
"install_auth_username_enter": "Увядзіце імя карыстача",
"install_auth_password_enter": "Увядзіце пароль",
"install_step": "Крок",
"install_devices_title": "Наладзьце вашы прылады",
"install_devices_desc": "Для таго, каб выкарыстоўваць AdGuard Home, вам трэба наладзіць вашы прылады на яго выкарыстанне.",
"install_submit_title": "Віншуем!",
"install_submit_desc": "Працэдура налады завершана і вы гатовы пачаць выкарыстанне AdGuard Home.",
"install_devices_router": "Роўтар",
"install_devices_router_desc": "Такая наладка аўтаматычна пакрые ўсе прылады, што выкарыстоўваюць ваш хатні роўтар, і вам не трэба будзе наладжваць кожнае з іх у асобнасці.",
"install_devices_address": "DNS-сервер AdGuard Home даступны па наступных адрасах",
"install_devices_router_list_1": "Адкрыйце налады вашага рутара. Звычайна вы можаце адкрыць іх у вашым браўзары (напрыклад, http://192.168.0.1/ ці http://192.168.1.1/). Вас могуць папрасіць увесці пароль. Калі вы не помніце яго, пароль часта можна скінуць, націснуўшы на кнопку на самым роўтары. Некаторыя роўтары патрабуюць адмысловага дадатку, які ў гэтым выпадку павінен быць ужо ўсталявана на ваш кампутар ці тэлефон.",
"install_devices_router_list_2": "Знайдзіце налады DHCP ці DNS. Знайдзіце літары \"DNS\" поруч з тэкставым полем, у якое можна ўвесці два ці тры шэрагі лічбаў, падзеленых на 4 групы ад адной до трох лічбаў.",
"install_devices_router_list_3": "Увядзіце туды адрас вашага AdGuard Home.",
"install_devices_router_list_4": "Вы не можаце ўсталяваць уласны DNS-сервер на некаторых тыпах маршрутызатараў. У гэтым выпадку можа дапамагчы налада AdGuard Home у якасці <a href='#dhcp'>DHCP-сервера</a>. У адваротным выпадку вам трэба звярнуцца да кіраўніцтва па наладзе 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": "Знайдзіце ў спісе пункт \"IP версіі 4 (TCP/IP)\", вылучыце яго і потым ізноў націсніце \"Уласцівасці\".",
"install_devices_windows_list_6": "Абярыце \"Выкарыстаць наступныя адрасы DNS-сервераў\" і ўвядзіце адрас AdGuard Home.",
"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": "У меню кіравання націсніце абразок «Налады».",
"install_devices_android_list_2": "Абярыце пункт «Wi-Fi». З'явіцца экран са спісам даступных сетак (наладка DNS недаступная для мабільных сетак).",
"install_devices_android_list_3": "Доўгім націскам па бягучым сеціве выклічце меню, у якім націсніце «Змяніць сеціва».",
"install_devices_android_list_4": "На некаторых прыладах можа запатрабавацца націснуць «Пашыраныя налады». Каб атрымаць магчымасць змяняць налады DNS, вам запатрабуецца перамкнуць «Налады IP» на «Карыстацкія».",
"install_devices_android_list_5": "Зараз можна змяніць палі «DNS 1» і «DNS 2». Увядзіце ў іх адрасы AdGuard Home.",
"install_devices_ios_list_1": "Увайдзіце ў меню налад прылады.",
"install_devices_ios_list_2": "Абярыце пункт «Wi-Fi» (для мабільных сетак ручная наладка DNS немагчыма).",
"install_devices_ios_list_3": "Націсніце на назву сетцы, да якой прылада падлучана ў дадзены момант.",
"install_devices_ios_list_4": "У поле «DNS» увядзіце ўвядзіце адрасы AdGuard Home.",
"get_started": "Паехалі",
"next": "Далей",
"open_dashboard": "Адкрыць Панэль кіравання",
"install_saved": "Паспяхова захавана",
"encryption_title": "Шыфраванне",
"encryption_desc": "Падтрымка шыфравання (HTTPS/TLS) для DNS і ўэб-інтэрфейсу адміністравання",
"encryption_config_saved": "Налады шыфравання захаваны",
"encryption_server": "Імя сервера",
"encryption_server_enter": "Увядзіце ваша даменавае імя",
"encryption_server_desc": "Для выкарыстання HTTPS вам трэба ўвесці імя сервера, якое падыходзіць вашаму SSL-сертыфікату.",
"encryption_redirect": "Аўтаматычна перанакіроўваць на HTTPS",
"encryption_redirect_desc": "Калі ўлучана, AdGuard Home будзе аўтаматычна перанакіроўваць вас з HTTP на HTTPS адрас.",
"encryption_https": "Порт HTTPS",
"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-кадоўцы.",
"encryption_status": "Статус",
"encryption_expire": "Мінае",
"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_chain_valid": "Ланцужок сертыфікатаў валідны",
"encryption_chain_invalid": "Ланцужок сертыфікатаў не валідны",
"encryption_key_valid": "Валідны {{type}} прыватны ключ",
"encryption_key_invalid": "Нявалідны {{type}} прыватны ключ",
"encryption_subject": "Суб'ект",
"encryption_issuer": "Выдавец",
"encryption_hostnames": "Імёны хастоў",
"encryption_reset": "Вы ўпэўнены, што хочаце скінуць налады шыфравання?",
"topline_expiring_certificate": "Ваш SSL-сертыфікат хутка мінае. Абновіце <0>Налады шыфравання</0>.",
"topline_expired_certificate": "Ваш SSL-сертыфікат мінуў. Абновіце <0>Налады шыфравання</0>.",
"form_error_port_range": "Увядзіце значэнне порта з інтэрвалу 80-65535",
"form_error_port_unsafe": "Гэта небяспечны порт",
"form_error_equal": "Не павінны быць роўныя",
"form_error_password": "Паролі не супадаюць",
"reset_settings": "Скінуць налады",
"update_announcement": "AdGuard Home {{version}} ужо даступная! <0>Націсніце сюды</0>, каб даведацца больш.",
"setup_guide": "Інструкцыя па наладзе",
"dns_addresses": "Адрасы DNS",
"dns_start": "DNS-сервер запускаецца",
"dns_status_error": "Памылка пры атрыманні стану DNS-сервера",
"down": "Уніз",
"fix": "Выправіць",
"dns_providers": "<0>Спіс вядомых DNS-правайдараў</0> на выбар.",
"update_now": "Абнавіць цяпер",
"update_failed": "Памылка аўто-абнаўлення. Калі ласка, <a>кіруйцеся інструкцыі</a> для абнаўлення ручна.",
"processing_update": "Калі ласка, пачакайце, AdGuard Home абнаўляецца",
"clients_title": "Кліенты",
"clients_desc": "Наладзьце прылады, што выкарыстоўваюць AdGuard Home",
"settings_global": "Глабальныя",
"settings_custom": "Свае",
"table_client": "Кліент",
"table_name": "Імя",
"save_btn": "Захаваць",
"client_add": "Дадаць кліента",
"client_new": "Новы кліент",
"client_edit": "Рэдагаваць кліента",
"client_identifier": "Ідэнтыфікатар",
"ip_address": "IP-адрас",
"client_identifier_desc": "Кліенты могуць быць ідэнтыфікаваны па IP-адрасе, CIDR ці MAC-адрасу. Звярніце ўвагу, што выкарыстанне MAC як ідэнтыфікатара магчыма, толькі калі AdGuard Home таксама з'яўляецца і <0>DHCP-серверам</0>",
"form_enter_ip": "Увядзіце IP",
"form_enter_mac": "Увядзіце MAC",
"form_enter_id": "Увядзіце ідэнтыфікатар",
"form_add_id": "Дадаць ідэнтыфікатар",
"form_client_name": "Увядзіце імя кліента",
"name": "Назва",
"client_global_settings": "Выкарыстаць глабальныя налады",
"client_deleted": "Кліент \"{{key}}\" паспяхова выдалены",
"client_added": "Кліент \"{{key}}\" паспяхова дададзены",
"client_updated": "Кліент \"{{key}}\" паспяхова абноўлены",
"clients_not_found": "Кліентаў не знойдзена",
"client_confirm_delete": "Вы ўпэўнены, што хочаце выдаліць кліента \"{{key}}\"?",
"list_confirm_delete": "Вы ўпэўнены, што хочаце выдаліць гэты спіс?",
"auto_clients_title": "Кліенты (runtime)",
"auto_clients_desc": "Дадзеныя пра кліентаў, якія скарыстаюць AdGuard Home, але не захоўваюцца ў наладах",
"access_title": "Налады доступу",
"access_desc": "Тут вы можаце наладзіць правілы доступу да DNS-серверу AdGuard Home.",
"access_allowed_title": "Дазволеныя кліенты",
"access_allowed_desc": "Спіс CIDR- ці IP-адрасоў. Калі ён наладжаны, AdGuard Home будзе прымаць запыты толькі з гэтых IP-адрасоў.",
"access_disallowed_title": "Забароненыя кліенты",
"access_disallowed_desc": "Спіс CIDR- ці IP-адрасоў. Калі ён наладжаны, AdGuard Home будзе ігнараваць запыты з гэтых IP-адрасоў.",
"access_blocked_title": "Заблакаваныя дамены",
"access_blocked_desc": "Не блытайце гэта з фільтрамі. AdGuard Home будзе ігнараваць DNS-запыты з гэтымі даменамі.",
"access_settings_saved": "Налады доступу паспяхова захаваны",
"updates_checked": "Праверка абнаўленняў прайшла паспяхова",
"updates_version_equal": "Версія AdGuard Home актуальная",
"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>Вось спіс ПА, якое вы можаце выкарыстоўваць.</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.",
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> падтрымвае <1>DNS-over-HTTPS</1>, але для налады яго, вам будзе трэба згенераваць для яго <2>DNS-адбітак</2>.",
"setup_dns_privacy_ios_2": "<0>AdGuard для iOS</0> падтрымвае <1>DNS-over-HTTPS</1> і <1>DNS-over-TLS</1>.",
"setup_dns_privacy_other_title": "Іншыя развязкі",
"setup_dns_privacy_other_1": "AdGuard Home сам можа быць кліентам зашыфраванага DNS на любай платформе.",
"setup_dns_privacy_other_2": "<0>dnsproxy</0> падтрымвае ўсе вядомыя зашыфраваныя DNS-пратаколы.",
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> падтрымвае <1>DNS-over-HTTPS</1>.",
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> падтрымвае <1>DNS-over-HTTPS</1>.",
"setup_dns_privacy_other_5": "Вы можаце знайсці яшчэ варыянты <0>тут</0> і <1>тут</1>.",
"setup_dns_notice": "Каб выкарыстоўваць <1>DNS-over-HTTPS</1> ці <1>DNS-over-TLS</1>, вам патрэбна <0>наладзіць шыфраванне</0> у наладах AdGuard Home.",
"rewrite_added": "Правіла перанакіравання DNS для \"{{key}}\" паспяхова дададзена",
"rewrite_deleted": "Правіла перанакіравання DNS для \"{{key}}\" паспяхова выдалена",
"rewrite_add": "Дадаць правіла перанакіравання DNS",
"rewrite_not_found": "Не знойдзена правілаў перанакіравання DNS",
"rewrite_confirm_delete": "Вы ўпэўнены, што хочаце выдаліць правіла перанакіравання DNS для \"{{key}}\"?",
"rewrite_desc": "Дазваляе лёгка наладзіць карыстацкі DNS-адказ для пэўнага дамена.",
"rewrite_applied": "Ужыта правіла перанакіравання",
"rewrite_hosts_applied": "Перапісана па правіле файла hosts",
"dns_rewrites": "Перанакіраванні DNS",
"form_domain": "Увядзіце дамен",
"form_answer": "Увядзіце IP адрас ці дамен",
"form_error_domain_format": "Няслушны фармат дамена",
"form_error_answer_format": "Няслушны фармат адказу",
"configure": "Наладзіць",
"main_settings": "Асноўныя налады",
"block_services": "Выбраць заблакаваныя сэрвісы",
"blocked_services": "Заблакаваныя сэрвісы",
"blocked_services_desc": "Дазваляе хутка заблакаваць папулярныя сайты і сэрвісы.",
"blocked_services_saved": "Заблакаваныя сэрвісы паспяхова захаваны",
"blocked_services_global": "Выкарыстаць глабальныя заблакаваныя сэрвісы",
"blocked_service": "Заблакаваны сэрвіс",
"block_all": "Заблакаваць усё",
"unblock_all": "Адблакаваць усё",
"encryption_certificate_path": "Шлях да сертыфіката",
"encryption_private_key_path": "Шлях да зачыненага ключа",
"encryption_certificates_source_path": "Паказаць шлях да файла сертыфікатаў",
"encryption_certificates_source_content": "Уставіць змесціва сертыфікатаў",
"encryption_key_source_path": "Паказаць файл зачыненага ключа",
"encryption_key_source_content": "Уставіць змесціва зачыненага ключа",
"stats_params": "Канфігурацыя статыстыкі",
"config_successfully_saved": "Канфігурацыя паспяхова захавана",
"interval_24_hour": "24 гадзіны",
"interval_days": "{{count}} дзень",
"interval_days_plural": "{{count}} дзён",
"domain": "Дамен",
"answer": "Адказ",
"filter_added_successfully": "Спіс паспяхова дададзены",
"filter_removed_successfully": "Спіс паспяхова выдалены",
"filter_updated": "Спіс паспяхова абноўлены",
"statistics_configuration": "Канфігурацыя статыстыкі",
"statistics_retention": "Захаванне статыстыкі",
"statistics_retention_desc": "Калі вы зменшыце значэнне інтэрвалу, некаторыя дадзеныя могуць быць згублены",
"statistics_clear": " Ачысціць статыстыку",
"statistics_clear_confirm": "Вы ўпэўнены, што хочаце ачысціць статыстыку?",
"statistics_retention_confirm": "Вы ўпэўнены, што хочаце змяніць тэрмін захоўвання статыстыкі? Пры скарачэнні інтэрвалу дадзеныя могуць быць згублены",
"statistics_cleared": "Статыстыка паспяхова вычышчана",
"interval_hours": "{{count}} гадзіна",
"interval_hours_plural": "{{count}} гадзін",
"filters_configuration": "Налада фільтраў",
"filters_enable": "Уключыць фільтры",
"filters_interval": "Інтэрвал абнаўлення фільтраў",
"disabled": "Выключана",
"username_label": "Імя карыстача",
"username_placeholder": "Увядзіце імя карыстача",
"password_label": "Пароль",
"password_placeholder": "Увядзіце пароль",
"sign_in": "Увайсці",
"sign_out": "Выйсці",
"forgot_password": "Забылі пароль?",
"forgot_password_desc": "Калі ласка, выканаеце <0>гэтыя дзеянні</0> для стварэння новага пароля да вашага акаўнта.",
"location": "Месціва",
"orgname": "Назва арганізацыі",
"netname": "Назва сеціва",
"network": "Сеціва",
"descr": "Апісанне",
"whois": "Хто",
"filtering_rules_learn_more": "<0>Даведайцеся больш</0> пра стварэнне ўласных спісаў блакавання хастоў.",
"blocked_by_response": "Заблакавана па CNAME ці IP у адказе",
"blocked_by_cname_or_ip": "Заблакавана з дапамогай CNAME ці IP",
"try_again": "Паспрабаваць яшчэ раз",
"domain_desc": "Увядзіце імя ці маску дамена, які вы хочаце перанакіраваць.",
"example_rewrite_domain": "перанакіроўвае адказы толькі для гэтага дамена.",
"example_rewrite_wildcard": "перанакіроўвае адказы для ўсіх паддаменаў <0>example.org</0>.",
"rewrite_ip_address": "IP адрас: скарыстайце гэты IP у выглядзе А ці АААА адказу",
"rewrite_domain_name": "Даменавае імя: дадаць запіс CNAME",
"rewrite_A": "<0>A</0>: адмысловае значэнне, захоўваць запісы <0>A</0> з сервера для выгрузкі даных",
"rewrite_AAAA": "<0>AAAA</0>: адмысловае значэнне, захоўваць запісы <0>AAAA</0> з сервера для выгрузкі даных",
"disable_ipv6": "Адключыць IPv6",
"disable_ipv6_desc": "Калі гэта опцыя ўлучана, усе DNS-запыты адрасоў IPv6 (тып AAAA) будуць ігнаравацца.",
"fastest_addr": "Найхуткі IP-адрас",
"fastest_addr_desc": "Апытайце ўсе DNS-серверы і вярніце самы хуткі IP-адрас сярод усіх адказаў. Гэта замарудзіць выкананне DNS-запытаў, бо нам давядзецца чакаць адказаў ад усіх DNS-сервераў, але палепшыць агульную ўзаемасувязь.",
"autofix_warning_text": "Пры націску \"Выправіць\" AdGuard Home наладзіць вашу сістэму на выкарыстанне DNS-сервера AdGuard Home.",
"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 (перазагрузіць сістэмную службу)</0>.",
"autofix_warning_result": "У выніку ўсе DNS-запыты ад вашай сістэмы будуць па змаўчанні апрацоўвацца AdGuard Home.\n",
"tags_title": "Тэгі",
"tags_desc": "Вы можаце выбраць тэгі, якія адпавядаюць кліенту. Тэгі могуць быць улучаны ў правілы фільтрацыі і дазволяць вам ужываць іх больш дакладна. <0>Даведацца больш</0>.",
"form_select_tags": "Выбраць тэгі кліента",
"check_title": "Праверыць фільтрацыю",
"check_desc": "Праверыць фільтрацыю імя хаста",
"check": "Праверыць",
"form_enter_host": "Увядзіце імя хаста",
"filtered_custom_rules": "Адфільтраваны з дапамогай карыстацкіх правілаў фільтрацыі",
"choose_from_list": "Абраць са спіса",
"add_custom_list": "Дадаць свой спіс",
"host_whitelisted": "Хост занесены ў белы спіс",
"check_ip": "IP-адрасы: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"check_reason": "Прычына: {{reason}}",
"check_rule": "Правіла: {{rule}}",
"check_service": "Назва сэрвісу: {{service}}",
"service_name": "Назва сэрвіса",
"check_not_found": "Не знойдзена ў вашым спісе фільтраў",
"client_confirm_block": "Вы ўпэўнены, што хочаце заблакаваць кліента \"{{ip}}\"?",
"client_confirm_unblock": "Вы ўпэўнены, што хочаце адблакаваць кліента \"{{ip}}\"?",
"client_blocked": "Кліент \"{{ip}}\" паспяхова заблакаваны",
"client_unblocked": "Кліент \"{{ip}}\" паспяхова адблакаваны",
"static_ip": "Статычны IP-адрас",
"static_ip_desc": "AdGuard Home з'яўляецца серверам, таму для карэктнай працы яму патрэбен статычны IP-адрас. У адваротным выпадку, у нейкі момант ваш роўтар можа прысвоіць гэтай прыладзе іншы IP-адрас.",
"set_static_ip": "Усталяваць статычны IP-адрас",
"install_static_ok": "Добрыя навіны! Ваш статычны IP-адрас ужо наладжаны",
"install_static_error": "AdGuard Home не можа аўтаматычна наладзіць яго для гэтага інтэрфейса сеціва. Калі ласка, паглядзіце інструкцыю пра тое, як гэта зрабіць ручна.",
"install_static_configure": "Мы выявілі выкарыстанне дынамічнага IP-адраса — <0>{{ip}}</0>. Хочаце выкарыстоўваць яго ў якасці статычнага адраса?",
"confirm_static_ip": "AdGuard Home наладзіць {{ip}} у якасці вашага статычнага IP-адраса. Хочаце працягнуць?",
"list_updated": "Абноўлены {{count}} спіс",
"list_updated_plural": "Абноўлена спісаў: {{count}}",
"dnssec_enable": "Уключыць DNSSEC",
"dnssec_enable_desc": "Усталюйце сцяг DNSSEC у выходных DNS-запытах і праверце вынік (патрабуецца распазнальнік з падтрымкай DNSSEC)",
"validated_with_dnssec": "Проверено с помощью DNSSEC",
"all_queries": "Усе запыты",
"show_blocked_responses": "Заблакавана",
"show_whitelisted_responses": "Белы спіс",
"show_processed_responses": "Апрацавана",
"blocked_safebrowsing": "Заблакавана згодна базе дадзеных Safebrowsing",
"blocked_adult_websites": "Заблакаваныя \"дарослыя\" сайты",
"blocked_threats": "Заблакавана пагроз",
"allowed": "Дазволены",
"filtered": "Адфільтраваныя",
"rewritten": "Перапісаныя",
"safe_search": "Бяспечны пошук",
"blocklist": "Чорны спіс",
"milliseconds_abbreviation": "мс",
"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-значэнне (мінімальнае), атрыманае з upstream-сервера",
"cache_ttl_max_override_desc": "Усталюйце максімальнае TTL-значэнне (секунды) для запісаў у кэшы DNS",
"ttl_cache_validation": "Мінімальнае значэнне 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": "Наладзіць канфігурацыю для ўключэння DHCP-сервера",
"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

@@ -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 Родителски Надзор",
@@ -81,7 +81,6 @@
"no_servers_specified": "Няма избрани услуги",
"general_settings": "Общи настройки",
"upstream_dns": "Главен DNS сървър",
"upstream_dns_hint": "Ако оставите празно, AdGuard Home ще използва <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> за главен. Използвай tls:// представка за DNS използващи TLS връзка.",
"test_upstream_btn": "Тествай главния DNS",
"apply_btn": "Приложи",
"disabled_filtering_toast": "Забрани филтрирането",
@@ -139,8 +138,8 @@
"page_table_footer_text": "Страница",
"rows_table_footer_text": "редове",
"updated_custom_filtering_toast": "Обновени местни правила за филтриране",
"rule_removed_from_custom_filtering_toast": "Премахнато от местни правила за филтриране",
"rule_added_to_custom_filtering_toast": "Добавено до местни правила за филтриране",
"rule_removed_from_custom_filtering_toast": "Премахнато от местни правила за филтриране: {{rule}}",
"rule_added_to_custom_filtering_toast": "Добавено до местни правила за филтриране: {{rule}}",
"plain_dns": "Обикновен DNS",
"source_label": "Източник",
"found_in_known_domain_db": "Намерен в списъците с домейни.",

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í",
@@ -11,6 +12,8 @@
"save_config": "Uložit konfiguraci",
"enabled_dhcp": "DHCP server zapnutý",
"disabled_dhcp": "DHCP server vypnutý",
"unavailable_dhcp": "DHCP není k dispozici",
"unavailable_dhcp_desc": "AdGuard Home nemůže na vašem operačním systému provozovat DHCP server",
"dhcp_title": "DHCP server (experimentální!)",
"dhcp_description": "Pokud váš router neposkytuje možnost nastavit DHCP, můžete použít vlastní vestavěný DHCP server AdGuardu.",
"dhcp_enable": "Zapnout DHCP server",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "Statické pronájmy DHCP",
"dhcp_leases_not_found": "Nebyly nalezeny žádné pronájmy DHCP",
"dhcp_config_saved": "Konfigurace DHCP serveru byla uložena",
"dhcp_ipv4_settings": "Nastavení DHCP IPv4",
"dhcp_ipv6_settings": "Nastavení DHCP IPv6",
"form_error_required": "Povinné pole",
"form_error_ip4_format": "Neplatný formát IPv4",
"form_error_ip6_format": "Neplatný formát IPv6",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Neplatný formát ID klienta",
"form_error_positive": "Musí být větší než 0",
"form_error_negative": "Musí být rovno nebo větší než 0",
"range_end_error": "Musí být větší než začátek rozsahu",
"dhcp_form_gateway_input": "IP brána",
"dhcp_form_subnet_input": "Maska podsítě",
"dhcp_form_range_title": "Rozsah IP adres",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Nastavení šifrování",
"dhcp_settings": "Nastavení DHCP",
"upstream_dns": "Odchozí DNS servery",
"upstream_dns_hint": "Pokud toto pole ponecháte prázdné, AdGuard Home použije <a href='https://www.quad9.net/' target='_blank'>Quad9</a> jako upstream.",
"upstream_dns_help": "Zadejte adresy serverů, jedno připojení na řádek. <a>Zjistěte více</a> o konfiguraci odchozích DNS serverů.",
"upstream_dns_configured_in_file": "Konfigurováno v {{path}}",
"test_upstream_btn": "Test upstreamů",
"upstreams": "Odesláno",
"apply_btn": "Použít",
@@ -181,6 +188,7 @@
"example_upstream_regular": "obyčejný DNS (přes UDP)",
"example_upstream_dot": "šifrovaný <0>DNS přes TLS</0>",
"example_upstream_doh": "šifrovaný <0>DNS přes HTTPS</0>",
"example_upstream_doq": "šifrovaný <0>DNS přes QUIC</0>",
"example_upstream_sdns": "můžete použít <0>DNS razítka</0> pro <1>DNSCrypt</1> nebo <2>DNS přes HTTPS</2> řešitele",
"example_upstream_tcp": "obyčejný DNS (přes TCP)",
"all_lists_up_to_date_toast": "Všechny seznamy jsou již aktuální",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohl být použit, zkontrolujte, zda jste ho správně napsali",
"unblock": "Odblokovat",
"block": "Blokovat",
"disallow_this_client": "Blokovat tohoto klienta",
"allow_this_client": "Povolit tohoto klienta",
"block_for_this_client_only": "Blokovat pouze pro tohoto klienta",
"unblock_for_this_client_only": "Odblokovat pouze pro tohoto klienta",
"time_table_header": "Čas",
"date": "Datum",
"domain_name_table_header": "Název domény",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Stránka",
"rows_table_footer_text": "řádky",
"updated_custom_filtering_toast": "Aktualizovaná vlastní pravidla filtrování",
"rule_removed_from_custom_filtering_toast": "Pravidlo odstraněno z vlastních pravidel filtrování",
"rule_added_to_custom_filtering_toast": "Pravidlo přidáno do vlastních pravidel filtrování",
"rule_removed_from_custom_filtering_toast": "Pravidlo odstraněno z vlastních pravidel filtrování: {{rule}}",
"rule_added_to_custom_filtering_toast": "Pravidlo přidáno do vlastních pravidel filtrování: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtrováno pomocí {{filter}}",
"query_log_confirm_clear": "Opravdu chcete vymazat celý protokol dotazů?",
@@ -230,12 +242,15 @@
"blocking_mode": "Režim blokování",
"default": "Výchozí",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Nulová IP",
"custom_ip": "Vlastní IP",
"blocking_ipv4": "Blokování IPv4",
"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",
@@ -244,7 +259,8 @@
"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í NXDOMAIN, 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)",
"blocking_mode_custom_ip": "Vlastní IP. odezva s ručně nastavenou IP adresou",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Pokud je nakonfigurován port HTTPS, AdGuard Home administrátorské rozhraní bude přístupné přes HTTPS a bude také poskytovat DNS přes HTTPS na '/dns-query'.",
"encryption_dot": "DNS přes TLS port",
"encryption_dot_desc": "Pokud je tento port nakonfigurován, AdGuard Home bude na tomto portu spouštět DNS přes TLS server.",
"encryption_doq": "DNS přes QUIC port",
"encryption_doq_desc": "Pokud je tento port nakonfigurován, AdGuard Home spustí na tomto portu server DNS přes QUIC. Je to experimentální a nemusí být spolehlivé. V současnosti také není příliš mnoho klientů, kteří to podporují.",
"encryption_certificates": "Certifikáty",
"encryption_certificates_desc": "Chcete-li používat šifrování, musíte pro svou doménu poskytnout platný řetězec certifikátů SSL. Certifikát můžete získat bezplatně na adrese <0>{{link}}</ 0>, nebo jej můžete zakoupit od jednoho z důvěryhodných certifikačních úřadů.",
"encryption_certificates_input": "Zde můžete nakopírovat/vložit certifikáty PEM.",
@@ -354,7 +372,7 @@
"fix": "Opravit",
"dns_providers": "Zde je <0>seznam známých poskytovatelů DNS</0>, z nichž si můžete vybrat.",
"update_now": "Aktualizovat nyní",
"update_failed": "Automatická aktualizace selhala. Prosím <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>následujte tyto kroky</a> a aktualizujte ručně.",
"update_failed": "Automatická aktualizace selhala. Prosím <a>následujte tyto kroky</a> a aktualizujte ručně.",
"processing_update": "Čekejte prosím, AdGuard Home se aktualizuje",
"clients_title": "Klienti",
"clients_desc": "Konfigurace zařízení připojených k AdGuard Home",
@@ -388,7 +406,7 @@
"access_desc": "Zde můžete konfigurovat pravidla přístupu pro server DNS AdGuard Home.",
"access_allowed_title": "Povolení klienti",
"access_allowed_desc": "Seznam adres CIDR nebo IP. Pokud je nakonfigurován, AdGuard Home bude přijímat požadavky pouze z těchto IP adres.",
"access_disallowed_title": "Nepovolení klienti",
"access_disallowed_title": "Blokovaní klienti",
"access_disallowed_desc": "Seznam adres CIDR nebo IP. Pokud je nakonfigurován, AdGuard Home bude odmítat požadavky pouze z těchto IP adres.",
"access_blocked_title": "Blokované domény",
"access_blocked_desc": "Nezaměňujte to s filtry. AdGuard Home odstraní dotazy DNS s těmito doménami v otázce dotazu. Zde můžete určit přesné názvy domén, zástupné znaky a pravidla URL adres, např. 'example.org', '*.example.org' nabo '||example.org^'.",
@@ -399,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.",
@@ -512,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}}“?",
@@ -546,13 +566,12 @@
"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. Tato hodnota nemůže být větší než 3600 (1 hodina)",
"cache_ttl_max_override_desc": "Přepište hodnotu TTL (maximální) obdrženou z odchozího serveru",
"min_exceeds_max_value": "Minimální hodnota přesahuje maximální hodnotu",
"value_not_larger_than": "Hodnota nesmí být vyšší než {{maximum}}",
"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",
"filter_category_regional": "Regionální",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Seznamy, které se specializují na blokování škodlivého software, zákeřných útoků nebo podvodných domén",
"filter_category_regional_desc": "Seznamy, které jsou zaměřené na regionální reklamy a sledovací servery",
"filter_category_other_desc": "Další seznamy zakázaných",
"setup_config_to_enable_dhcp_server": "Nastavte konfiguraci pro aktivaci DHCP serveru",
"original_response": "Původní odezva",
"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."
"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",
@@ -11,6 +12,8 @@
"save_config": "Gem konfiguration",
"enabled_dhcp": "DHCP-server aktiveret",
"disabled_dhcp": "DHCP-server deaktiveret",
"unavailable_dhcp": "DHCP er ikke tilgængelig",
"unavailable_dhcp_desc": "AdGuard Home kan ikke køre en DHCP-server på dit OS",
"dhcp_title": "DHCP-server (eksperimentel!)",
"dhcp_description": "Hvis din router ikke tilbyder DHCP-indstillinger, kan du bruge AdGuards egen indbyggede DHCP-server.",
"dhcp_enable": "Aktiver DHCP-server",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP static leases",
"dhcp_leases_not_found": "Ingen DHCP-leases fundet",
"dhcp_config_saved": "DHCP-konfiguration gemt",
"dhcp_ipv4_settings": "DHCP IPv4 Indstillinger",
"dhcp_ipv6_settings": "DHCP IPv6 Indstillinger",
"form_error_required": "Obligatorisk felt",
"form_error_ip4_format": "Ugyldigt IPv4-format",
"form_error_ip6_format": "Ugyldigt IPv6-format",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Ugyldigt klient-ID-format",
"form_error_positive": "Skal være større end 0",
"form_error_negative": "Skal være lig med 0 eller større",
"range_end_error": "Skal være større end starten af intervallet",
"dhcp_form_gateway_input": "Gateway IP",
"dhcp_form_subnet_input": "Subnet mask",
"dhcp_form_range_title": "Interval af IP-adresser",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Krypteringsindstillinger",
"dhcp_settings": "DHCP-indstillinger",
"upstream_dns": "Upstream DNS-servere",
"upstream_dns_hint": "Hvis du lader dette felt være tomt, vil AdGuard Home bruge <a href='https://www.quad9.net/' target='_blank'>Quad9</a> som en upstream.",
"upstream_dns_help": "Indtast serveradresserne en pr. linje. <a>Lær mere</a> om konfiguration af upstream DNS-servere.",
"upstream_dns_configured_in_file": "Konfigureret i {{path}}",
"test_upstream_btn": "Test upstreams",
"upstreams": "Upstreams",
"apply_btn": "Anvend",
@@ -181,6 +188,7 @@
"example_upstream_regular": "almindelig DNS (over UDP)",
"example_upstream_dot": "krypteret <0>DNS-over-TLS</0>",
"example_upstream_doh": "krypteret <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "krypteret <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "du kan bruge <0>DNS Stamps<0> til <1>DNSCrypt>/1> eller <2>DNS-over-HTTPS</2> resolvers",
"example_upstream_tcp": "almindelig DNS (over TCP)",
"all_lists_up_to_date_toast": "Alle lister er allerede opdaterede",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "Server \"{{key}}\": kunne ikke bruges, kontroller venligst at du har skrevet det korrekt",
"unblock": "Fjern blokering",
"block": "Bloker",
"disallow_this_client": "Afvis denne klient",
"allow_this_client": "Tillad denne klient",
"block_for_this_client_only": "Bloker kun for denne klient",
"unblock_for_this_client_only": "Fjern blokering kun for denne klient",
"time_table_header": "Tid",
"date": "Dato",
"domain_name_table_header": "Domænenavn",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Side",
"rows_table_footer_text": "rækker",
"updated_custom_filtering_toast": "De brugerdefinerede filtreringsregler er blevet opdateret",
"rule_removed_from_custom_filtering_toast": "Regel fjernet fra de brugerdefinerede filtreringsregler",
"rule_added_to_custom_filtering_toast": "Regel tilføjet til de brugerdefinerede filtreringsregler",
"rule_removed_from_custom_filtering_toast": "Regel fjernet fra de brugerdefinerede filtreringsregler: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regel tilføjet til de brugerdefinerede filtreringsregler: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtreret af {{filter}}",
"query_log_confirm_clear": "Er du sikker på, at du vil rydde hele forespørgselsloggen?",
@@ -230,21 +242,25 @@
"blocking_mode": "Blokeringstilstand",
"default": "Standard",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null IP",
"custom_ip": "Tilpasset IP",
"blocking_ipv4": "IPv4-blokering",
"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",
"edns_enable": "Aktiver EDNS Client Subnet",
"edns_cs_desc": "Hvis det er aktiveret, vil AdGuard Home sende klienters subnets til DNS-serverne.",
"rate_limit_desc": "Antallet af anmodninger pr. sekund, som en enkelt klient får lov til at fremsætte (0: ubegrænset)",
"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 NXDOMAIN, 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)",
"blocking_mode_custom_ip": "Brugerdefineret IP: Svar med en manuelt indstillet IP-adresse",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Hvis HTTPS-porten er konfigureret, vil AdGuard Home admin grænsefladen være tilgængelig via HTTPS, og den vil give DNS-over-HTTPS på '/dns-query' placeringen.",
"encryption_dot": "DNS-over-TLS port",
"encryption_dot_desc": "Hvis denne port er konfigureret, vil AdGuard Home køre en DNS-over-TLS server over denne port.",
"encryption_doq": "DNS-over-QUIC port",
"encryption_doq_desc": "Hvis denne port er konfigureret, vil AdGuard Home køre en DNS-over-QUIC server på denne port. Den er eksperimentel og er måske ikke pålidelig. Der er heller ikke mange klienter, der understøtter den i øjeblikket.",
"encryption_certificates": "Certifikater",
"encryption_certificates_desc": "For at kunne bruge kryptering skal du angive en gyldig SSL-certifikatkæde til dit domæne. Du kan få et gratis certifikat på <0>{{link}}</ 0> eller du kan købe det fra en af de pålidelige Certifikatmyndigheder.",
"encryption_certificates_input": "Kopier/indsæt dine PEM-kodede certifikater her.",
@@ -354,7 +372,7 @@
"fix": "Reparer",
"dns_providers": "Her er en <0>liste over kendte DNS-udbydere</ 0> at vælge imellem.",
"update_now": "Opdater nu",
"update_failed": "Automatisk opdatering mislykkedes. Følg venligst <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>trinene</a> for at opdatere manuelt.",
"update_failed": "Automatisk opdatering mislykkedes. Følg <a>disse trin</a> for at opdatere manuelt.",
"processing_update": "Vent venligst, AdGuard Home bliver opdateret",
"clients_title": "Klienter",
"clients_desc": "Konfigurer enheder, der er forbundet til AdGuard Home",
@@ -399,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.",
@@ -512,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}}\"?",
@@ -546,13 +566,12 @@
"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. Denne værdi kan ikke være større end 3600 (1 time)",
"cache_ttl_max_override_desc": "Overskriv TTL-værdi (maksimum) modtaget fra upstream-serveren",
"min_exceeds_max_value": "Minimumsværdien overstiger maksimumværdien",
"value_not_larger_than": "Værdien kan ikke være større end {{maximum}}",
"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",
"filter_category_regional": "Regional",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Lister, der er specialiserede i at blokere malware, phishing eller scam-domæner",
"filter_category_regional_desc": "Lister, der fokuserer på regionale annoncer og tracking-servere",
"filter_category_other_desc": "Andre blokeringslister",
"setup_config_to_enable_dhcp_server": "Opsætningskonfiguration for at aktivere DHCP-server",
"original_response": "Oprindeligt svar",
"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."
"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",
@@ -11,6 +12,8 @@
"save_config": "Konfiguration speichern",
"enabled_dhcp": "DHCP-Server aktiviert",
"disabled_dhcp": "DHCP-Server deaktiviert",
"unavailable_dhcp": "DHCP ist nicht verfügbar",
"unavailable_dhcp_desc": "AdGuard Home konnte keinen DHCP-Server auf Ihrem Betriebssystem ausführen",
"dhcp_title": "DHCP-Server (experimental!)",
"dhcp_description": "Wenn Ihr Router keine DHCP-Einstellungen bietet, können Sie den integrierten DHCP-Server von AdGuard verwenden.",
"dhcp_enable": "DHCP-Server aktivieren",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP statische Leases",
"dhcp_leases_not_found": "Keine DHCP-Leasingverträge gefunden\n",
"dhcp_config_saved": "Gespeicherte DHCP-Server-Konfiguration",
"dhcp_ipv4_settings": "DHCP-IPv4-Einstellungen",
"dhcp_ipv6_settings": "DHCP-IPv6-Einstellungen",
"form_error_required": "Pflichtfeld",
"form_error_ip4_format": "Ungültiges IPv4-Format",
"form_error_ip6_format": "Ungültiges IPv6-Format",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Ungültiges Client-ID-Format",
"form_error_positive": "Muss größer als 0 sein.",
"form_error_negative": "Muss gleich oder größer als 0 (Null) sein",
"range_end_error": "Muss größer als der Bereichsbeginn sein",
"dhcp_form_gateway_input": "Gateway-IP",
"dhcp_form_subnet_input": "Subnetz-Maske",
"dhcp_form_range_title": "Bereich von IP-Adressen",
@@ -45,7 +51,7 @@
"dhcp_warning": "Wenn Sie den DHCP-Server trotzdem aktivieren möchten, stellen Sie sicher, dass sich in Ihrem Netzwerk kein anderer aktiver DHCP-Server befindet. Andernfalls kann es bei angeschlossenen Geräten zu einem Ausfall des Internets kommen!",
"dhcp_error": "Es konnte nicht ermittelt werden, ob es einen anderen DHCP-Server im Netzwerk gibt.",
"dhcp_static_ip_error": "Um den DHCP-Server nutzen zu können, muss eine statische IP-Adresse festgelegt werden. Es konnte nicht ermittelt werden, ob diese Netzwerkschnittstelle mit statischer IP-Adresse konfiguriert ist. Bitte legen Sie eine statische IP-Adresse manuell fest.",
"dhcp_dynamic_ip_found": "Ihr System verwendet die dynamische Konfiguration der IP-Adresse für die Schnittstelle <0>{{interfaceName}}</0>. Um den DHCP-Server nutzen zu können, muss eine statische IP-Adresse festgelegt werden. Ihre aktuelle IP-Adresse ist <0>{{ipAddress}}}</0>. Diese IP-Adresse wird automatisch als statisch festgelegt, sobald Sie auf die Schaltfläche „DHCP aktivieren” klicken.",
"dhcp_dynamic_ip_found": "Ihr System verwendet die dynamische Konfiguration der IP-Adresse für die Schnittstelle <0>{{interfaceName}}</0>. Um den DHCP-Server nutzen zu können, muss eine statische IP-Adresse festgelegt werden. Ihre aktuelle IP-Adresse ist <0>{{ipAddress}}</0>. Diese IP-Adresse wird automatisch als statisch festgelegt, sobald Sie auf die Schaltfläche „DHCP aktivieren” klicken.",
"dhcp_lease_added": "Statischer Lease „{{key}}” erfolgreich hinzugefügt",
"dhcp_lease_deleted": "Statischer Lease „{{key}}” erfolgreich entfernt",
"dhcp_new_static_lease": "Neuer statischer Lease",
@@ -76,7 +82,7 @@
"on": "AN",
"off": "AUS",
"copyright": "Urheberrecht",
"homepage": "Startseite",
"homepage": "Homepage",
"report_an_issue": "Fehlerbericht senden",
"privacy_policy": "Datenschutzerklärung",
"enable_protection": "Schutz aktivieren",
@@ -99,21 +105,21 @@
"no_clients_found": "Keine Clients gefunden",
"general_statistics": "Allgemeine Statistiken",
"number_of_dns_query_days": "Anzahl der in den letzten {{count}} Tagen verarbeiteten DNS-Anfragen",
"number_of_dns_query_days_plural": "Anzahl der DNS-Abfragen, die in den letzten {{count}}} Tagen verarbeitet wurden",
"number_of_dns_query_days_plural": "Anzahl der DNS-Abfragen, die in den letzten {{count}} Tagen verarbeitet wurden",
"number_of_dns_query_24_hours": "Anzahl der in den letzten 24 Stunden durchgeführten DNS-Anfragen",
"number_of_dns_query_blocked_24_hours": "Anzahl der durch Werbefilter und Host-Blocklisten geblockten DNS-Anfragen",
"number_of_dns_query_blocked_24_hours_by_sec": "Anzahl der durch das AdGuard-Modul für Internet-Sicherheit blockierten DNS-Anfragen",
"number_of_dns_query_blocked_24_hours_by_sec": "Anzahl der durch das AdGuard-Modul Internetsicherheit” gesperrten DNS-Anfragen",
"number_of_dns_query_blocked_24_hours_adult": "Anzahl der blockierten Webseiten für Erwachsene",
"enforced_save_search": "SafeSearch erzwungen",
"number_of_dns_query_to_safe_search": "Anzahl der DNS-Anfragen bei denen SafeSearch für Suchanfragen erzwungen wurde",
"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 blockieren",
"filters_block_toggle_hint": "Sie können Blockierregeln in den <a href='#filters'>Filter</a>einstellungen erstellen",
"use_adguard_browsing_sec": "AdGuard Webservice für Internet-Sicherheit verwenden",
"use_adguard_browsing_sec_hint": "AdGuard Home überprüft, ob die Domain durch den Webservice für Internet-Sicherheit geblacklistet ist. 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.",
"block_domain_use_filters_and_hosts": "Domains durch Filter und Host-Dateien sperren",
"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",
"use_adguard_parental_hint": "AdGuard Home wird überprüfen, ob die Domain Inhalte hat, die nur für Erwachsene geeignet sind. Zum Schutz Ihrer Privatsphäre wird die gleiche API wie für den Webservice für Internet-Sicherheit verwendet.",
"use_adguard_parental_hint": "AdGuard Home wird prüfen, ob die Domain jugendgefährdende Inhalte enthält. Zum Schutz Ihrer Privatsphäre wird die selbe API wie für den Webservice für Internetsicherheit verwendet.",
"enforce_safe_search": "SafeSearch erzwingen",
"enforce_save_search_hint": "AdGuard kann SafeSearch für folgende Suchmaschinen erzwingen: Google, Youtube, Bing und Yandex.",
"no_servers_specified": "Keine Server festgelegt",
@@ -127,7 +133,8 @@
"encryption_settings": "Verschlüsselungseinstellungen",
"dhcp_settings": "DHCP-Einstellungen",
"upstream_dns": "Upstream-DNS-Server",
"upstream_dns_hint": "Wenn Sie dieses Feld leer lassen wird AdGuard Home <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> als Upstream verwenden. Verwenden Sie das Präfix tls:// für DNS über TLS-Server.",
"upstream_dns_help": "Geben Sie pro Zeile eine Serveradresse ein. <a>Weitere Informationen</a> zur Konfiguration von Upstream-DNS-Servern.",
"upstream_dns_configured_in_file": "Konfiguriert in {{path}}",
"test_upstream_btn": "Upstreams testen",
"upstreams": "Upstreams",
"apply_btn": "Anwenden",
@@ -163,9 +170,9 @@
"edit_blocklist": "Sperrliste bearbeiten",
"edit_allowlist": "Freigabeliste bearbeiten",
"choose_blocklist": "Sperrliste wählen",
"choose_allowlist": "Zulassungsliste wählen",
"enter_valid_blocklist": "Geben Sie eine gültige Adresse in die Sperrliste ein.",
"enter_valid_allowlist": "Geben Sie eine gültige Adresse in die Freigabeliste ein.",
"choose_allowlist": "Freigabeliste wählen",
"enter_valid_blocklist": "Gültige Webadresse der Sperrliste eingeben.",
"enter_valid_allowlist": "Gültige Webadresse der Positivliste eingeben.",
"form_error_url_format": "Ungültiges URL-Format",
"form_error_url_or_path_format": "Ungültige URL oder absoluter Pfad der Liste",
"custom_filter_rules": "Benutzerdefinierte Filterregeln",
@@ -177,10 +184,11 @@
"example_comment": "! Hier steht ein Kommentar",
"example_comment_meaning": "Nur ein Kommentar",
"example_comment_hash": "# Auch ein Kommentar",
"example_regex_meaning": "Zugriff auf die Domains blockieren, die dem <0>spezifizierten regulären Ausdruck</0> entsprechen",
"example_regex_meaning": "Zugriff auf die Domains sperren, die dem <0>angegebenen regulärem Ausdruck</0> entsprechen",
"example_upstream_regular": "regulärer DNS (über UDP)",
"example_upstream_dot": "verschlüsseltes <0>DNS-over-TLS</0>",
"example_upstream_doh": "verschlüsseltes <0>DNS_over_HTTPS</0>",
"example_upstream_doq": "verschlüsseltes <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "Sie können <0>DNS-Stempel</0> für <1>DNSCrypt</1> oder <2>DNS-over-HTTPS</2> Resolver benutzen",
"example_upstream_tcp": "regulärer DNS (über TCP)",
"all_lists_up_to_date_toast": "Alle Listen sind bereits auf dem neuesten Stand",
@@ -188,7 +196,11 @@
"dns_test_ok_toast": "Angegebene DNS-Server arbeiten ordnungsgemäß",
"dns_test_not_ok_toast": "Server \"{{key}}\": konnte nicht verwendet werden, bitte überprüfen Sie die korrekte Schreibweise",
"unblock": "Entsperren",
"block": "Blockieren",
"block": "Sperren",
"disallow_this_client": "Diesen Client sperren",
"allow_this_client": "Diesen Client zulassen",
"block_for_this_client_only": "Nur für diesen Client sperren",
"unblock_for_this_client_only": "Nur für diesen Client freigeben",
"time_table_header": "Zeit",
"date": "Datum",
"domain_name_table_header": "Domainname",
@@ -204,12 +216,12 @@
"refresh_btn": "Aktualisieren",
"previous_btn": "Vorherige",
"next_btn": "Nächste",
"loading_table_status": "Laden...",
"loading_table_status": "Wird geladen",
"page_table_footer_text": "Seite",
"rows_table_footer_text": "Reihen",
"updated_custom_filtering_toast": "Die benutzerdefinierten Filterregeln wurden aktualisiert",
"rule_removed_from_custom_filtering_toast": "Regel wurde aus den benutzerdefinierten Filterregeln entfernt",
"rule_added_to_custom_filtering_toast": "Regel wurde zu den benutzerdefinierten Filterregeln hinzugefügt",
"rule_removed_from_custom_filtering_toast": "Regel wurde aus den benutzerdefinierten Filterregeln entfernt: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regel wurde zu den benutzerdefinierten Filterregeln hinzugefügt: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Gefiltert nach {{filter}}",
"query_log_confirm_clear": "Möchten Sie wirklich das Abfrageprotokoll vollständig löschen?",
@@ -230,12 +242,15 @@
"blocking_mode": "Sperrmodus",
"default": "Standard",
"nxdomain": "NXDomain",
"refused": "REFUSED",
"null_ip": "Null-IP-Adresse",
"custom_ip": "Benutzerdefinierte IP",
"blocking_ipv4": "IPv4-Sperren",
"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",
@@ -244,7 +259,8 @@
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "Benutzerdefinierte IP: Mit einer manuell eingestellten IP-Adresse antworten",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Wenn der HTTPS-Port konfiguriert ist, ist die AdGuard Home-Administrationsschnittstelle über HTTPS zugänglich und bietet auch DNS-over-HTTTPS am Server „/dns-query”.",
"encryption_dot": "DNS-over-TLS",
"encryption_dot_desc": "Wenn dieser Port konfiguriert ist, führt AdGuard Home auf diesem Port einen DNS-over-TLS-Server aus.",
"encryption_doq": "Port für DNS-over-QUIC",
"encryption_doq_desc": "Wenn dieser Port eingerichtet ist, wird AdGuard Home einen DNS-over-QUIC-Server auf diesem Port ausführen. Es ist experimentell und möglicherweise nicht zuverlässig. Außerdem gibt es im Moment nicht allzu viele Clients, die ihn unterstützen.",
"encryption_certificates": "Zertifikate",
"encryption_certificates_desc": "Um die Verschlüsselung verwenden zu können, müssen Sie eine gültige SSL-Zertifikatskette für Ihre Domain angeben. Sie können ein kostenloses Zertifikat für <0>{{link}}</0> erhalten oder es bei einer der vertrauenswürdigen Zertifizierungsstellen kaufen.",
"encryption_certificates_input": "Kopieren Sie Ihre PEM-codierten Zertifikate und fügen Sie sie hier ein.",
@@ -354,7 +372,7 @@
"fix": "Beheben",
"dns_providers": "Hier finden Sie eine <0>Liste der bekannten DNS-Anbieter</0> zur Auswahl.",
"update_now": "Jetzt aktualisieren",
"update_failed": "Das automatische Aktualisieren ist fehlgeschlagen. Bitte <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>folgen Sie den Schritten</a>, um manuell zu aktualisieren.",
"update_failed": "Das automatische Aktualisieren ist fehlgeschlagen. Bitte <a>folgen Sie den Schritten</a>, um manuell zu aktualisieren.",
"processing_update": "Bitte warten Sie, AdGuard Home wird aktualisiert …",
"clients_title": "Clients",
"clients_desc": "Geräte einrichten, die mit AdGuard Home verbunden sind",
@@ -399,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.",
@@ -512,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?",
@@ -544,15 +564,14 @@
"milliseconds_abbreviation": "ms",
"cache_size": "Größe des Zwischenspeichers",
"cache_size_desc": "Größe des DNS-Zwischenspeichers (in Bytes)",
"cache_ttl_min_override": "TTL-Minimalwert überschreiben",
"cache_ttl_max_override": "TTL-Höchstwert überschreiben",
"cache_ttl_min_override": "TTL-Minimalwert überschreiben (in Sekunden)",
"cache_ttl_max_override": "TTL-Höchstwert überschreiben (in Sekunden)",
"enter_cache_size": "Größe des Zwischenspeichers eingeben",
"enter_cache_ttl_min_override": "TTL-Minimalwert eingeben",
"enter_cache_ttl_max_override": "TTL-Höchstwert eingeben",
"cache_ttl_min_override_desc": "Überschreibt den TTL-Minimalwert, der vom vorgeschalteten Server empfangen wurde. Dieser Wert darf nicht größer als 3600 (Sek.) (≙ 1 Stunde) betragen.",
"cache_ttl_min_override_desc": "Überschreibt den TTL-Minimalwert, der vom vorgeschalteten Server empfangen wurde. Dieser Wert darf nicht mehr als 3600 (Sek.) (≙ 1 Stunde) betragen.",
"cache_ttl_max_override_desc": "Überschreibt den TLL-Maximalwert, der vom vorgeschalteten Server empfangenen wurde",
"min_exceeds_max_value": "Minimalwert überschreitet Maximalwert",
"value_not_larger_than": "Wert darf höchstens {{maximum}} betragen",
"ttl_cache_validation": "Der minimale Cache des TTL-Wertes muss kleiner oder gleich dem maximalen Wert sein",
"filter_category_general": "Allgemein",
"filter_category_security": "Sicherheit",
"filter_category_regional": "Regional",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Listen, die auf das Sperren von Malware, Phishing- oder Scam-Domains spezialisiert sind",
"filter_category_regional_desc": "Listen, die sich auf regionale Werbeanzeigen und Tracking-Server konzentrieren",
"filter_category_other_desc": "Weitere Sperrlisten",
"setup_config_to_enable_dhcp_server": "Einrichten der Konfiguration zur Aktivierung des DHCP-Servers",
"original_response": "Ursprüngliche Antwort",
"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."
"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",
@@ -11,6 +12,8 @@
"save_config": "Save config",
"enabled_dhcp": "DHCP server enabled",
"disabled_dhcp": "DHCP server disabled",
"unavailable_dhcp": "DHCP is unavailable",
"unavailable_dhcp_desc": "AdGuard Home cannot run a DHCP server on your OS",
"dhcp_title": "DHCP server (experimental!)",
"dhcp_description": "If your router does not provide DHCP settings, you can use AdGuard's own built-in DHCP server.",
"dhcp_enable": "Enable DHCP server",
@@ -21,14 +24,18 @@
"dhcp_static_leases": "DHCP static leases",
"dhcp_leases_not_found": "No DHCP leases found",
"dhcp_config_saved": "DHCP config successfully saved",
"dhcp_ipv4_settings": "DHCP IPv4 Settings",
"dhcp_ipv6_settings": "DHCP IPv6 Settings",
"form_error_required": "Required field",
"form_error_ip4_format": "Invalid IPv4 format",
"form_error_ip6_format": "Invalid IPv6 format",
"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",
"dhcp_form_gateway_input": "Gateway IP",
"dhcp_form_subnet_input": "Subnet mask",
"dhcp_form_range_title": "Range of IP addresses",
@@ -109,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",
@@ -127,7 +134,8 @@
"encryption_settings": "Encryption settings",
"dhcp_settings": "DHCP settings",
"upstream_dns": "Upstream DNS servers",
"upstream_dns_hint": "If you keep this field empty, AdGuard Home will use <a href='https://www.quad9.net/' target='_blank'>Quad9</a> as an upstream.",
"upstream_dns_help": "Enter servers addresses one per line. <a>Learn more</a> about configuring upstream DNS servers.",
"upstream_dns_configured_in_file": "Configured in {{path}}",
"test_upstream_btn": "Test upstreams",
"upstreams": "Upstreams",
"apply_btn": "Apply",
@@ -181,6 +189,7 @@
"example_upstream_regular": "regular DNS (over UDP)",
"example_upstream_dot": "encrypted <0>DNS-over-TLS</0>",
"example_upstream_doh": "encrypted <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "encrypted <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "you can use <0>DNS Stamps</0> for <1>DNSCrypt</1> or <2>DNS-over-HTTPS</2> resolvers",
"example_upstream_tcp": "regular DNS (over TCP)",
"all_lists_up_to_date_toast": "All lists are already up-to-date",
@@ -189,6 +198,10 @@
"dns_test_not_ok_toast": "Server \"{{key}}\": could not be used, please check that you've written it correctly",
"unblock": "Unblock",
"block": "Block",
"disallow_this_client": "Disallow this client",
"allow_this_client": "Allow this client",
"block_for_this_client_only": "Block for this client only",
"unblock_for_this_client_only": "Unblock for this client only",
"time_table_header": "Time",
"date": "Date",
"domain_name_table_header": "Domain name",
@@ -208,8 +221,8 @@
"page_table_footer_text": "Page",
"rows_table_footer_text": "rows",
"updated_custom_filtering_toast": "Updated the custom filtering rules",
"rule_removed_from_custom_filtering_toast": "Rule removed from the custom filtering rules",
"rule_added_to_custom_filtering_toast": "Rule added to the custom filtering rules",
"rule_removed_from_custom_filtering_toast": "Rule removed from the custom filtering rules: {{rule}}",
"rule_added_to_custom_filtering_toast": "Rule added to the custom filtering rules: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtered by {{filter}}",
"query_log_confirm_clear": "Are you sure you want to clear the entire query log?",
@@ -230,21 +243,26 @@
"blocking_mode": "Blocking mode",
"default": "Default",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null IP",
"custom_ip": "Custom IP",
"blocking_ipv4": "Blocking IPv4",
"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",
"edns_enable": "Enable EDNS Client Subnet",
"edns_cs_desc": "If enabled, AdGuard Home will be sending clients' subnets to the DNS servers.",
"rate_limit_desc": "The number of requests per second that a single client is allowed to make (0: unlimited)",
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "Custom IP: Respond with a manually set IP address",
@@ -314,13 +332,15 @@
"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",
"encryption_https_desc": "If HTTPS port is configured, AdGuard Home admin interface will be accessible via HTTPS, and it will also provide DNS-over-HTTPS on '/dns-query' location.",
"encryption_dot": "DNS-over-TLS port",
"encryption_dot_desc": "If this port is configured, AdGuard Home will run a DNS-over-TLS server on this port.",
"encryption_doq": "DNS-over-QUIC port",
"encryption_doq_desc": "If this port is configured, AdGuard Home will run a DNS-over-QUIC server on this port. It's experimental and may not be reliable. Also, there are not too many clients that support it at the moment.",
"encryption_certificates": "Certificates",
"encryption_certificates_desc": "In order to use encryption, you need to provide a valid SSL certificates chain for your domain. You can get a free certificate on <0>{{link}}</0> or you can buy it from one of the trusted Certificate Authorities.",
"encryption_certificates_input": "Copy/paste your PEM-encoded certificates here.",
@@ -354,7 +374,7 @@
"fix": "Fix",
"dns_providers": "Here is a <0>list of known DNS providers</0> to choose from.",
"update_now": "Update now",
"update_failed": "Auto-update failed. Please <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>follow the steps</a> to update manually.",
"update_failed": "Auto-update failed. Please <a>follow these steps</a> to update manually.",
"processing_update": "Please wait, AdGuard Home is being updated",
"clients_title": "Clients",
"clients_desc": "Configure devices connected to AdGuard Home",
@@ -368,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",
@@ -399,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.",
@@ -512,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}}\"?",
@@ -546,13 +568,12 @@
"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. This value can't larger than 3600 (1 hour)",
"cache_ttl_max_override_desc": "Override TTL value (maximum) received from upstream server",
"min_exceeds_max_value": "Minimum value exceeds maximum value",
"value_not_larger_than": "Value can't be larger than {{maximum}}",
"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",
"filter_category_regional": "Regional",
@@ -561,7 +582,11 @@
"filter_category_security_desc": "Lists that specialize on blocking malware, phishing or scam domains",
"filter_category_regional_desc": "Lists that focus on regional ads and tracking servers",
"filter_category_other_desc": "Other blocklists",
"setup_config_to_enable_dhcp_server": "Setup config to enable DHCP server",
"original_response": "Original response",
"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."
}
"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,16 +1,19 @@
{
"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",
"disabled_dhcp": "Servidor DHCP deshabilitado",
"unavailable_dhcp": "DHCP no disponible",
"unavailable_dhcp_desc": "AdGuard Home no puede ejecutar un servidor DHCP en tu SO",
"dhcp_title": "Servidor DHCP (experimental)",
"dhcp_description": "Si tu router no proporciona la configuración DHCP, puedes utilizar el propio servidor DHCP incorporado de AdGuard.",
"dhcp_enable": "Habilitar servidor DHCP",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "Asignaciones DHCP estáticas",
"dhcp_leases_not_found": "No se han encontrado asignaciones DHCP",
"dhcp_config_saved": "Configuración DHCP guardado correctamente",
"dhcp_ipv4_settings": "Configuración DHCP IPv4",
"dhcp_ipv6_settings": "Configuración DHCP IPv6",
"form_error_required": "Campo obligatorio",
"form_error_ip4_format": "Formato IPv4 no válido",
"form_error_ip6_format": "Formato IPv6 no válido",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Formato de ID de cliente no válido",
"form_error_positive": "Debe ser mayor que 0",
"form_error_negative": "Debe ser igual o mayor que 0",
"range_end_error": "Debe ser mayor que el inicio de rango",
"dhcp_form_gateway_input": "IP de puerta de enlace",
"dhcp_form_subnet_input": "Máscara de subred",
"dhcp_form_range_title": "Rango de direcciones IP",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Configuración de cifrado",
"dhcp_settings": "Configuración DHCP",
"upstream_dns": "Servidores DNS de subida",
"upstream_dns_hint": "Si se mantiene este campo vacío, AdGuard Home utilizará <a href='https://www.quad9.net/' target='_blank'>Quad9</a> como DNS de subida.",
"upstream_dns_help": "Ingresa las direcciones de los servidores una por línea. <a>Más información</a> sobre la configuración de los servidores DNS de subida.",
"upstream_dns_configured_in_file": "Configurado en {{path}}",
"test_upstream_btn": "Probar DNS de subida",
"upstreams": "DNS de subida",
"apply_btn": "Aplicar",
@@ -181,6 +188,7 @@
"example_upstream_regular": "DNS regular (mediante UDP)",
"example_upstream_dot": "cifrado <0>DNS mediante TLS</0>",
"example_upstream_doh": "cifrado <0>DNS mediante HTTPS</0>",
"example_upstream_doq": "cifrado <0>DNS mediante QUIC</0>",
"example_upstream_sdns": "puedes usar <0>DNS Stamps</0> para <1>DNSCrypt</1> o resolutores <2>DNS mediante HTTPS</2>",
"example_upstream_tcp": "DNS regular (mediante TCP)",
"all_lists_up_to_date_toast": "Todas las listas ya están actualizadas",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "Servidor \"{{key}}\": no se puede utilizar, por favor revisa si lo has escrito correctamente",
"unblock": "Desbloquear",
"block": "Bloquear",
"disallow_this_client": "No permitir a este cliente",
"allow_this_client": "Permitir a este cliente",
"block_for_this_client_only": "Bloquear solo para este cliente",
"unblock_for_this_client_only": "Desbloquear solo para este cliente",
"time_table_header": "Hora",
"date": "Fecha",
"domain_name_table_header": "Nombre del dominio",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Página",
"rows_table_footer_text": "filas",
"updated_custom_filtering_toast": "Reglas de filtrado personalizado actualizadas",
"rule_removed_from_custom_filtering_toast": "Regla eliminada de las reglas de filtrado personalizado",
"rule_added_to_custom_filtering_toast": "Regla añadida a las reglas de filtrado personalizado",
"rule_removed_from_custom_filtering_toast": "Regla eliminada de las reglas de filtrado personalizado: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regla añadida a las reglas de filtrado personalizado: {{rule}}",
"query_log_response_status": "Estado: {{value}}",
"query_log_filtered": "Filtrado por {{filter}}",
"query_log_confirm_clear": "¿Está seguro de que desea borrar todo el registro de consultas?",
@@ -230,21 +242,25 @@
"blocking_mode": "Modo de bloqueo",
"default": "Predeterminado",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "IP nulo",
"custom_ip": "IP personalizada",
"blocking_ipv4": "Bloqueo de IPv4",
"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",
"edns_enable": "Habilitar subred de cliente EDNS",
"edns_cs_desc": "Si está habilitado, AdGuard Home enviará las subredes de los clientes a los servidores DNS.",
"rate_limit_desc": "Número de peticiones por segundo que un solo cliente puede hacer (0: ilimitado)",
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "IP personalizada: Responde con una dirección IP establecida manualmente",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Si el puerto HTTPS está configurado, la interfaz de administración de AdGuard Home será accesible a través de HTTPS, y también proporcionará DNS mediante HTTPS en la ubicación '/dns-query'.",
"encryption_dot": "Puerto DNS mediante TLS",
"encryption_dot_desc": "Si este puerto está configurado, AdGuard Home ejecutará un servidor DNS mediante TLS en este puerto.",
"encryption_doq": "Puerto DNS mediante QUIC",
"encryption_doq_desc": "Si este puerto está configurado, AdGuard Home ejecutará un servidor DNS mediante QUIC en este puerto. Es experimental y puede no ser confiable. Además, no hay muchos clientes que lo soporten por el momento.",
"encryption_certificates": "Certificados",
"encryption_certificates_desc": "Para utilizar el cifrado, debes proporcionar una cadena de certificado SSL válida para tu dominio. Puedes obtener un certificado gratuito en <0>{{link}}</0> o puedes comprarlo en una de las autoridades de certificación de confianza.",
"encryption_certificates_input": "Copia/pega aquí tu certificado codificado PEM.",
@@ -338,14 +356,14 @@
"encryption_issuer": "Emisor",
"encryption_hostnames": "Nombres de hosts",
"encryption_reset": "¿Está seguro de que desea restablecer la configuración de cifrado?",
"topline_expiring_certificate": "Tu certificado SSL está a punto de expirar. Actualice la <0>configuración de cifrado</0>.",
"topline_expired_certificate": "Tu certificado SSL ha expirado. Actualice la <0>configuración de cifrado</0>.",
"topline_expiring_certificate": "Tu certificado SSL está a punto de expirar. Actualiza la <0>configuración de cifrado</0>.",
"topline_expired_certificate": "Tu certificado SSL ha expirado. Actualiza la <0>configuración de cifrado</0>.",
"form_error_port_range": "Ingresa el valor del puerto en el rango de 80 a 65535",
"form_error_port_unsafe": "Este es un puerto inseguro",
"form_error_equal": "No debería ser igual",
"form_error_password": "La contraseña no coincide",
"reset_settings": "Restablecer configuración",
"update_announcement": "¡AdGuard Home {{version}} ya está disponible! <0>Haga clic aquí</0> para más información.",
"update_announcement": "¡AdGuard Home {{version}} ya está disponible! <0>Haz clic aquí</0> para más información.",
"setup_guide": "Guía de configuración",
"dns_addresses": "Direcciones DNS",
"dns_start": "El servidor DNS está iniciando",
@@ -354,7 +372,7 @@
"fix": "Corregir",
"dns_providers": "Aquí hay una <0>lista de proveedores DNS</0> conocidos para elegir.",
"update_now": "Actualizar ahora",
"update_failed": "Error en la actualización automática. Por favor <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>sigue los pasos</a> para actualizar manualmente.",
"update_failed": "Error en la actualización automática. Por favor <a>sigue estos pasos</a> para actualizar manualmente.",
"processing_update": "Por favor espera, AdGuard Home se está actualizando",
"clients_title": "Clientes",
"clients_desc": "Configurar dispositivos conectados con AdGuard Home",
@@ -368,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",
@@ -397,9 +415,10 @@
"updates_version_equal": "AdGuard Home está actualizado",
"check_updates_now": "Buscar actualizaciones ahora",
"dns_privacy": "DNS cifrado",
"setup_dns_privacy_1": "<0>DNS mediante TLS:</0> Utilice la cadena <1>{{address}}</1>.",
"setup_dns_privacy_2": "<0>DNS mediante HTTPS:</0> Utilice 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_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>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>.",
@@ -410,7 +429,7 @@
"setup_dns_privacy_other_2": "<0>dnsproxy</0> soporta todos los protocolos DNS seguros conocidos.",
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> soporta <1>DNS mediante HTTPS</1>.",
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> soporta <1>DNS mediante HTTPS</1>.",
"setup_dns_privacy_other_5": "Encontrará más implementaciones <0>aquí</0> y <1>aquí</1>.",
"setup_dns_privacy_other_5": "Encontrarás más implementaciones <0>aquí</0> y <1>aquí</1>.",
"setup_dns_notice": "Para utilizar <1>DNS mediante HTTPS</1> o <1>DNS mediante TLS</1>, debes <0>configurar el cifrado</0> en la configuración de AdGuard Home.",
"rewrite_added": "Reescritura DNS para \"{{key}}\" añadido correctamente",
"rewrite_deleted": "Reescritura DNS para \"{{key}}\" eliminado correctamente",
@@ -453,7 +472,7 @@
"filter_updated": "La lista ha sido actualizada correctamente",
"statistics_configuration": "Configuración de estadísticas",
"statistics_retention": "Retención de estadísticas",
"statistics_retention_desc": "Si disminuye el valor del intervalo, algunos datos estarán perdidos",
"statistics_retention_desc": "Si disminuye el valor del intervalo, se perderán algunos datos",
"statistics_clear": "Borrar estadísticas",
"statistics_clear_confirm": "¿Está seguro de que desea borrar las estadísticas?",
"statistics_retention_confirm": "¿Está seguro de que desea cambiar la retención de estadísticas? Si disminuye el valor del intervalo, se perderán algunos datos",
@@ -490,7 +509,7 @@
"rewrite_A": "<0>A</0>: valor especial, mantiene registros <0>A</0> del DNS de subida",
"rewrite_AAAA": "<0>AAAA</0>: valor especial, mantiene registros <0>AAAA</0> del DNS de subida",
"disable_ipv6": "Deshabilitar IPv6",
"disable_ipv6_desc": "Si esta función está habilitada, se eliminarán todas las consultas DNS para direcciones IPv6 (tipo AAAA).",
"disable_ipv6_desc": "Si esta función está habilitada, se descartarán todas las consultas DNS para direcciones IPv6 (tipo AAAA).",
"fastest_addr": "Dirección IP más rápida",
"fastest_addr_desc": "Consulta todos los servidores DNS y devuelve la dirección IP más rápida de todas las respuestas. Esto ralentizará las consultas DNS, y se debe esperar las respuestas de todos los servidores DNS, pero mejora la conectividad general.",
"autofix_warning_text": "Si haces clic en \"Corregir\", AdGuard Home configurará tu sistema para utilizar el servidor DNS de AdGuard Home.",
@@ -512,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}}\"?",
@@ -546,13 +566,12 @@
"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. Este valor no puede ser superior a 3600 (1 hora)",
"cache_ttl_max_override_desc": "Anula el valor TTL (máximo) recibido del servidor DNS de subida",
"min_exceeds_max_value": "El valor mínimo supera al valor máximo",
"value_not_larger_than": "El valor no puede ser mayor que {{maximum}}",
"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",
"filter_category_regional": "Regional",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Listas que se especializan en bloquear dominios de malware, phishing o estafa",
"filter_category_regional_desc": "Listas que se centran en anuncios regionales y servidores de rastreo",
"filter_category_other_desc": "Otras listas de bloqueo",
"setup_config_to_enable_dhcp_server": "Configuración para habilitar el servidor DHCP",
"original_response": "Respuesta original",
"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."
"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 استفاده کن",
@@ -124,7 +124,6 @@
"encryption_settings": "تنظیمات رمزگُذاری",
"dhcp_settings": "تنظیمات DHCP",
"upstream_dns": "سرورهای DNS جریان ارسالی",
"upstream_dns_hint": "اگر این فیلد را خالی نگه دارید، AdGuard Home از <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> بعنوان یک جریان ارسالی استفاده می کند. از پیشوند tls:// برای سرورهای DNS over TLS استفاده کنید.",
"test_upstream_btn": "تست جریان ارسالی",
"upstreams": "جریان ارسالی",
"apply_btn": "اِعمال",
@@ -202,8 +201,8 @@
"page_table_footer_text": "صفحه",
"rows_table_footer_text": "سطر",
"updated_custom_filtering_toast": "دستورات فیلترینگ دستی بروز رسانی شده است",
"rule_removed_from_custom_filtering_toast": "دستور از دستورات فیلترینگ دستی حذف شد",
"rule_added_to_custom_filtering_toast": "دستور به دستورات فیلترینگ دستی اضافه شد",
"rule_removed_from_custom_filtering_toast": "دستور از دستورات فیلترینگ دستی حذف شد {{rule}}",
"rule_added_to_custom_filtering_toast": "دستور به دستورات فیلترینگ دستی اضافه شد {{rule}}",
"query_log_response_status": "وضعیت: {{value}}",
"query_log_filtered": "فیلتر شده با {{filter}}",
"query_log_confirm_clear": "آیا واقعا میخواهید کل وقایع جستار را پاک کنید؟",
@@ -231,10 +230,8 @@
"rate_limit": "میزان محدودیت",
"edns_enable": "فعالسازی زیرشبکه کلاینت EDNS",
"edns_cs_desc": "اگر فعال باشد،AdGuard Home زیرشبکه های کلاینت ها را به سرورهای DNS می فرستد.",
"rate_limit_desc": "تعداد درخواست های بر ثانیه مجازی که یک کلاینت میتواند بسازد (0: نامحدود)",
"blocking_ipv4_desc": "آدرس آی پی برگشت داده شده برای درخواست مسدود شده A",
"blocking_ipv6_desc": "آدرس آی پی برگشت داده شده برای درخواست مسدود شده AAAA",
"blocking_mode_default": "پیش فرض: وقتی مسدود شود با دستور سبک-مسدودساز تبلیغ NXDOMAIN پاسخ میدهد،پاسخ با آدرس آی پی تعیین شده در دستور وقتی با دستور /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": "آی پی دستی: پاسخ با آدرس آی پی دستی تنظیم شده",
@@ -388,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",
@@ -104,12 +110,12 @@
"number_of_dns_query_blocked_24_hours": "Un nombre de requêtes DNS bloquées par les filtres adblock et les listes de blocage des hosts",
"number_of_dns_query_blocked_24_hours_by_sec": "Un nombre de requêtes DNS bloquées par le module Sécurité de navigation d'AdGuard",
"number_of_dns_query_blocked_24_hours_adult": "Un nombre de sites à contenu adulte bloqués",
"enforced_save_search": "Recherche sécurisée renforcée",
"enforced_save_search": "Recherche sécurisée forcée",
"number_of_dns_query_to_safe_search": "Un nombre de requêtes DNS faites avec la Recherche securisée",
"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,7 +133,8 @@
"encryption_settings": "Paramètres de chiffrement",
"dhcp_settings": "Paramètres DHCP",
"upstream_dns": "Serveurs DNS upstream",
"upstream_dns_hint": "Si vous laissez ce champ vide, AdGuard Home va utiliser <a href='https://www.quad9.net/' target='_blank'>Quad9</a> comme 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",
@@ -181,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",
@@ -189,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",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Page",
"rows_table_footer_text": "lignes",
"updated_custom_filtering_toast": "Règles de filtrage d'utilisateur mises à jour",
"rule_removed_from_custom_filtering_toast": "Règle retirée des règles d'utilisateur",
"rule_added_to_custom_filtering_toast": "Règle ajoutée aux règles d'utilisateur",
"rule_removed_from_custom_filtering_toast": "Règle retirée des règles d'utilisateur: {{rule}}",
"rule_added_to_custom_filtering_toast": "Règle ajoutée aux règles d'utilisateur: {{rule}}",
"query_log_response_status": "Statut : {{value}}",
"query_log_filtered": "Filtré par {{filter}}",
"query_log_confirm_clear": "Êtes-vous sûr de vouloir effacer tout le journal des requêtes ?",
@@ -230,21 +242,25 @@
"blocking_mode": "Mode du blocage",
"default": "Par défaut",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "IP nulle",
"custom_ip": "IP personnalisée",
"blocking_ipv4": "Blocage IPv4",
"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 (0 : illimité)",
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "IP personnalisée : Répondre avec une adresse IP définie manuellement",
@@ -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,13 +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_min_override_desc": "Remplacer la valeur TTL (minimum) reçue du serveur en amont. Cette valeur ne peut pas dépasser 3600 (1 heure)",
"cache_ttl_max_override_desc": "Remplacer la valeur TTL (maximale) reçue du serveur en amont",
"min_exceeds_max_value": "La valeur minimum excède la valeur maximum",
"value_not_larger_than": "La valeur ne peut pas dépasser {{maximum}}",
"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",
@@ -559,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",
@@ -11,6 +12,8 @@
"save_config": "Spremi konfiguraciju",
"enabled_dhcp": "DHCP poslužitelj je omogućen",
"disabled_dhcp": "DHCP poslužitelj je onemogućen",
"unavailable_dhcp": "DHCP je nedostupan",
"unavailable_dhcp_desc": "AdGuard Home ne može pokrenuti DHCP poslužitelj na vašem OS-u",
"dhcp_title": "DHCP poslužitelj (eksperimentalno!)",
"dhcp_description": "Ukoliko vaš router ne pruža DHCP postavke, možete koristiti AdGuardov ugrađeni DHCP poslužitelj.",
"dhcp_enable": "Omogući DHCP poslužitelj",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP static leases",
"dhcp_leases_not_found": "Nisu pronađeni DHCP leases",
"dhcp_config_saved": "Postavke DHCP poslužitelja su uspješno spremljene",
"dhcp_ipv4_settings": "DHCP IPv4 postavke",
"dhcp_ipv6_settings": "DHCP IPv6 postavke",
"form_error_required": "Obavezno polje",
"form_error_ip4_format": "Nevažeći IPv4 format",
"form_error_ip6_format": "Nevažeći IPv6 format",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Nevažeći format ID-a klijenta",
"form_error_positive": "Mora biti veće od 0",
"form_error_negative": "Mora biti jednako ili veće od 0",
"range_end_error": "Mora biti veće od početne vrijednosti raspona",
"dhcp_form_gateway_input": "Gateway IP",
"dhcp_form_subnet_input": "Subnet maskiranje",
"dhcp_form_range_title": "Raspon IP adresa",
@@ -84,7 +90,7 @@
"disable_protection": "Onemogući zaštitu",
"disabled_protection": "Onemogućena zaštita",
"refresh_statics": "Osvježi statistiku",
"dns_query": "DNS Upiti",
"dns_query": "DNS upiti",
"blocked_by": "<0>Blokirano filtrima</0>",
"stats_malware_phishing": "Blokiran zločudni program/krađe identiteta",
"stats_adult": "Blokirane web stranice za odrasle",
@@ -101,7 +107,7 @@
"number_of_dns_query_days": "Broj DNS upita obrađenih u posljednja {{count}} dana",
"number_of_dns_query_days_plural": "Broj DNS upita obrađenih u posljednja {{count}} dana",
"number_of_dns_query_24_hours": "Broj DNS upita obrađenih u posljednja 24 sata",
"number_of_dns_query_blocked_24_hours": "Broj DNS zahtjeva koji su blokirani od strane filtara za blokiranje oglasa i lista neželjenih poslužitelja",
"number_of_dns_query_blocked_24_hours": "Broj DNS zahtjeva koji su blokirani od strane filtara za blokiranje oglasa i lista nedopuštenih poslužitelja",
"number_of_dns_query_blocked_24_hours_by_sec": "Broj DNS zahtjeva koje je blokirao modul AdGuard zaštita pregledavanja",
"number_of_dns_query_blocked_24_hours_adult": "Broj blokiranih stranica s sadržajem za odrasle",
"enforced_save_search": "Omogućeno sigurno pretraživanje",
@@ -109,9 +115,9 @@
"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 neželjenih 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 odnaziva domene se šalje poslužitelju.",
"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",
"use_adguard_parental_hint": "AdGuard Home provjeriti će sadrži li domena sadržaj za odrasle. Koristi isti API za zaštitu privatnosti kao i naša usluga zaštite pregledavanja.",
"enforce_safe_search": "Omogući sigurno pretraživanje",
@@ -119,15 +125,16 @@
"no_servers_specified": "Nije odabran nijedan poslužitelj",
"general_settings": "Opće postavke",
"dns_settings": "DNS postavke",
"dns_blocklists": "DNS popisi blokiranih",
"dns_allowlists": "DNS popisi omogućenih",
"dns_blocklists_desc": "AdGuard Home će blokirati domene koje odgovaraju popisu blokiranih.",
"dns_allowlists_desc": "Domene iz DNS popisa omogućenih će biti omogućene čak i kada se nalaze na nekoj listi blokiranih.",
"dns_blocklists": "DNS popisi nedopuštenih",
"dns_allowlists": "DNS popisi dopuštenih",
"dns_blocklists_desc": "AdGuard Home će blokirati domene koje odgovaraju popisu nedopuštenih.",
"dns_allowlists_desc": "Domene iz DNS popisa dopuštenih će biti omogućene čak i kada se nalaze na nekoj listi nedopuštenih.",
"custom_filtering_rules": "Prilagođena pravila filtriranja",
"encryption_settings": "Postavke šifriranja",
"dhcp_settings": "DHCP postavke",
"upstream_dns": "Upstream DNS poslužitelji",
"upstream_dns_hint": "Ako se ovo polje ostavi prazno, AdGuard Home će koristiti <a href='https://www.quad9.net/' target='_blank'>Quad9</a> kao upstream.",
"upstream_dns_help": "Unesite adrese poslužitelja po jednu u retku. <a>Saznajte više</a> o postavljanju uzlaznih DNS poslužitelja.",
"upstream_dns_configured_in_file": "Postavljeno u {{path}}",
"test_upstream_btn": "Testiraj upstream-ove",
"upstreams": "Upstreams",
"apply_btn": "Primijeni",
@@ -150,22 +157,22 @@
"delete_table_action": "Ukloni",
"elapsed": "Proteklo",
"filters_and_hosts_hint": "AdGuard Home razumije osnovna pravila blokiranja oglasa i sintaksu hosts datoteka.",
"no_blocklist_added": "Nema dodanih popisa blokiranih",
"no_whitelist_added": "Nema dodanih popisa omogućenih",
"add_blocklist": "Dodaj popis blokiranih",
"add_allowlist": "Dodaj popis omogućenih",
"no_blocklist_added": "Nema dodanih popisa nedopuštenih",
"no_whitelist_added": "Nema dodanih popisa dopuštenih",
"add_blocklist": "Dodaj popis nedopuštenih",
"add_allowlist": "Dodaj popis dopuštenih",
"cancel_btn": "Poništi",
"enter_name_hint": "Unesite naziv",
"enter_url_or_path_hint": "Unesite URL ili putanju liste",
"check_updates_btn": "Provjeri ažuriranja",
"new_blocklist": "Novi popis blokiranih",
"new_allowlist": "Novi popis omogućenih",
"edit_blocklist": "Uredi popis blokiranih",
"edit_allowlist": "Uredi popis omogućenih",
"choose_blocklist": "Odaberite popis blokiranih",
"new_blocklist": "Novi popis nedopuštenih",
"new_allowlist": "Novi popis dopuštenih",
"edit_blocklist": "Uredi popis nedopuštenih",
"edit_allowlist": "Uredi popis dopuštenih",
"choose_blocklist": "Odaberite popis nedopuštenih",
"choose_allowlist": "Odaberite popis dopuštenih",
"enter_valid_blocklist": "Unesite valjani URL za popis blokiranih.",
"enter_valid_allowlist": "Unesite valjani URL za popis omogućenih.",
"enter_valid_blocklist": "Unesite valjani URL za popis nedopuštenih.",
"enter_valid_allowlist": "Unesite valjani URL za popis dopuštenih.",
"form_error_url_format": "Nevažeći URL format",
"form_error_url_or_path_format": "Nevažeći URL ili putanja od liste",
"custom_filter_rules": "Prilagođena pravila filtriranja",
@@ -181,6 +188,7 @@
"example_upstream_regular": "zadani DNS (putem UDP)",
"example_upstream_dot": "šifrirano <0>DNS-over-TLS</0>",
"example_upstream_doh": "šifrirano <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "šifrirano <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "možete koristiti <0>DNS Stamps</0> za <1>DNSCrypt</1> ili <2>DNS-over-HTTPS</2> rezolvere",
"example_upstream_tcp": "zadani DNS (putem TCP)",
"all_lists_up_to_date_toast": "Svi popisi su ažurirani",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "\"{{key}}\" poslužitelja: ne može se upotrijebiti, provjerite jeste li to ispravno napisali",
"unblock": "Odblokiraj",
"block": "Blokiraj",
"disallow_this_client": "Onemogući ovog klijenta",
"allow_this_client": "Omogući ovog klijenta",
"block_for_this_client_only": "Blokiraj samo za ovog klijenta",
"unblock_for_this_client_only": "Odblokiraj samo za ovog klijenta",
"time_table_header": "Vrijeme",
"date": "Datum",
"domain_name_table_header": "Naziv domene",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Stranica",
"rows_table_footer_text": "redova",
"updated_custom_filtering_toast": "Ažurirana su prilagođena pravila filtriranja",
"rule_removed_from_custom_filtering_toast": "Pravilo je uklonjeno iz prilagođenih pravila filtriranja",
"rule_added_to_custom_filtering_toast": "Pravilo je dodano u prilagođena pravila filtriranja",
"rule_removed_from_custom_filtering_toast": "Pravilo je uklonjeno iz prilagođenih pravila filtriranja: {{rule}}",
"rule_added_to_custom_filtering_toast": "Pravilo je dodano u prilagođena pravila filtriranja: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtrirao {{filter}}",
"query_log_confirm_clear": "Jeste li sigurni da želite ukloniti zapise upita?",
@@ -230,21 +242,25 @@
"blocking_mode": "Način blokiranja",
"default": "Zadano",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null IP",
"custom_ip": "Prilagođen IP",
"blocking_ipv4": "Blokiranje IPv4",
"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",
"edns_enable": "Omogući EDNS Client Subnet",
"edns_cs_desc": "Ako je omogućeno, AdGuard Home će slati podmreže klijenata na DNS poslužitelje.",
"rate_limit_desc": "Broj zahtjeva u sekundi koji su dopušteni po jednom klijentu (0: neograničeno)",
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "Prilagođeni IP: Odgovor s ručno postavljenom IP adresom",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Ako je HTTPS port postavljen, AdGuard Home administracijsko sučelje biti će dostupno putem HTTPS-a, a također će pružiti DNS-over-HTTPS na '/dns-query' lokaciji.",
"encryption_dot": "DNS-over-TLS port",
"encryption_dot_desc": "Ako je ovaj port postavljen, AdGuard Home će pokrenuti DNS-over-TLS poslužitelj na ovom portu.",
"encryption_doq": "DNS-over-QUIC port",
"encryption_doq_desc": "Ako je ovaj port postavljen, AdGuard Home će na ovom portu pokrenuti DNS-over-QUIC poslužitelj. Eksperimentalno je i možda nije pouzdano. Također, trenutno nema previše klijenata koji to podržavaju.",
"encryption_certificates": "Certifikati",
"encryption_certificates_desc": "Da biste koristili šifriranje, za svoju domenu morate osigurati važeći lanac SSL certifikata. Besplatan certifikat možete dobiti na <0>{{link}}</0> ili ga možete kupiti od jednog od pouzdanih izdavatelja certifikata.",
"encryption_certificates_input": "Zalijepite svoje PEM-kodirane certifikate ovdje.",
@@ -354,7 +372,7 @@
"fix": "Popravi",
"dns_providers": "Ovo je <0>popis poznatih DNS poslužitelja</0> za izbor.",
"update_now": "Ažuriraj sada",
"update_failed": "Ne uspješno automatsko ažuriranje. Molimo, <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>pratite ove korake</a> za ručno ažuriranje.",
"update_failed": "Neuspješno automatsko ažuriranje. Molimo <a>pratite ove korake</a> za ručno ažuriranje.",
"processing_update": "Molimo pričekajte, AdGuard Home se ažurira",
"clients_title": "Klijenti",
"clients_desc": "Postavite uređaje povezane na AdGuard Home",
@@ -399,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.",
@@ -512,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?",
@@ -540,19 +560,18 @@
"filtered": "Filtrirano",
"rewritten": "Prepisano",
"safe_search": "Sigurno pretraživanje",
"blocklist": "Popis neželjenih",
"blocklist": "Popis nedopuštenih",
"milliseconds_abbreviation": "ms",
"cache_size": "Veličina predmemorije",
"cache_size_desc": "Veličina DNS predmemorije (u bajtovima)",
"cache_ttl_min_override": "Nadjačaj minimalni TTL",
"cache_ttl_max_override": "Nadjačaj maksimalni TTL",
"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. Ova vrijednost ne može biti veća od 3600 (1 sat)",
"cache_ttl_max_override_desc": "Nadjačaj TTL vrijednost (maksimum) dobivenu od upstream poslužitelja",
"min_exceeds_max_value": "Minimalna vrijednost je veća od maksimalne",
"value_not_larger_than": "Vrijednost ne može biti veća od {{maximum}}",
"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 (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",
"filter_category_regional": "Regionalno",
@@ -560,8 +579,12 @@
"filter_category_general_desc": "Popisi koji blokiraju pratitelje i oglase na većini uređaja",
"filter_category_security_desc": "Popisi koju su specijalizirani za blokiranje zlonamjernih programa, krađe identiteta ili domena za obmanu",
"filter_category_regional_desc": "Popisi koji se fokusiraju na regionalne oglase i poslužitelje za praćenje",
"filter_category_other_desc": "Ostali popisi blokiranih",
"filter_category_other_desc": "Ostali popisi nedopuštenih",
"setup_config_to_enable_dhcp_server": "Postavite postavke za omogućavanje DHCP poslužitelja",
"original_response": "Originalni odgovor",
"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."
"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

@@ -0,0 +1,590 @@
{
"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": "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",
"disabled_dhcp": "DHCP szerver letiltva",
"unavailable_dhcp": "A DHCP nem elérhető",
"unavailable_dhcp_desc": "Az AdGuard Home nem tud DHCP szervert futtatni az operációs rendszerén",
"dhcp_title": "DHCP szerver (kísérleti!)",
"dhcp_description": "Ha a router nem nyújt DHCP beállításokat, akkor használhatja helyette az AdGuard saját, beépített DHCP szerverét.",
"dhcp_enable": "DHCP szerver engedélyezése",
"dhcp_disable": "DHCP szerver letiltása",
"dhcp_not_found": "Biztonságos a beépített DHCP szerver engedélyezése - ugyanis nem találtunk aktív DHCP szervert a hálózaton. Javasoljuk azonban, hogy ellenőrizze kézileg is, mivel az automatikus tesztünk jelenleg nem ad 100%-os garanciát.",
"dhcp_found": "Egy aktív DHCP szerver található a hálózaton. Nem biztonságos a beépített DHCP szerver engedélyezése.",
"dhcp_leases": "DHCP bérletek",
"dhcp_static_leases": "Statikus DHCP bérletek",
"dhcp_leases_not_found": "Nem találhatóak DHCP bérletek",
"dhcp_config_saved": "DHCP beállítások elmentve",
"dhcp_ipv4_settings": "DHCP IPv4 Beállítások",
"dhcp_ipv6_settings": "DHCP IPv6 Beállítások",
"form_error_required": "Kötelező mező",
"form_error_ip4_format": "Érvénytelen IPv4 formátum",
"form_error_ip6_format": "Érvénytelen IPv6 formátum",
"form_error_ip_format": "Érvénytelen IP formátum",
"form_error_mac_format": "Érvénytelen MAC formátum",
"form_error_client_id_format": "Érvénytelen kliens ID formátum",
"form_error_positive": "0-nál nagyobbnak kell lennie",
"form_error_negative": "Legalább 0-nak kell lennie",
"range_end_error": "Nagyobbnak kell lennie, mint a tartomány kezdete",
"dhcp_form_gateway_input": "Átjáró IP",
"dhcp_form_subnet_input": "Alhálózati maszk",
"dhcp_form_range_title": "IP-címek tartománya",
"dhcp_form_range_start": "Tartomány kezdete",
"dhcp_form_range_end": "Tartomány vége",
"dhcp_form_lease_title": "DHCP bérlési ideje (másodpercben)",
"dhcp_form_lease_input": "Bérlési idő",
"dhcp_interface_select": "DHCP interfész kiválasztása",
"dhcp_hardware_address": "Hardvercím",
"dhcp_ip_addresses": "IP-címek",
"ip": "IP",
"dhcp_table_hostname": "Hosztnév",
"dhcp_table_expires": "Lejár",
"dhcp_warning": "Ha mindenképpen engedélyezni szeretné a DHCP szervert, akkor győződjön meg arról, hogy nincs-e más aktív DHCP szerver a hálózaton. Ellenkező esetben tönkreteheti az eszközei internetkapcsolatát!",
"dhcp_error": "Nem tudtuk meghatározni, hogy van-e másik DHCP szerver a hálózaton.",
"dhcp_static_ip_error": "A DHCP szerver használatához statikus IP-címet kell beállítani. Nem sikerült meghatározni, hogy ez a hálózati interfész statikus IP-cím használatával van-e beállítva. Állítson be kézzel egy statikus IP-címet.",
"dhcp_dynamic_ip_found": "A rendszer dinamikus IP-cím konfigurációt használ az <0>{{interfaceName}}</0> interfészhez. A DHCP szerver használatához statikus IP-címet kell beállítani. Jelenlegi IP-címe: <0>{{ipAddress}}</0>. Automatikusan beállítjuk ezt az IP címet statikusnak, ha rányom a DHCP engedélyezése gombra.",
"dhcp_lease_added": "Statikus bérlet \"{{key}}\" sikeresen hozzáadva",
"dhcp_lease_deleted": "Statikus bérlet \"{{key}}\" sikeresen törölve",
"dhcp_new_static_lease": "Új statikus bérlet",
"dhcp_static_leases_not_found": "Nem találhatóak statikus DHCP bérletek",
"dhcp_add_static_lease": "Statikus bérlet hozzáadása",
"dhcp_reset": "Biztosan visszaállítja a DHCP beállításokat?",
"country": "Ország",
"city": "Város",
"delete_confirm": "Biztosan törli a \"{{key}}\" -t?",
"form_enter_hostname": "Adja meg a hosztnevet",
"error_details": "Hiba részletei",
"response_details": "Válasz részletei",
"request_details": "Kérés részletei",
"client_details": "Kliens részletei",
"details": "Részletek",
"back": "Vissza",
"dashboard": "Irányítópult",
"settings": "Beállítások",
"filters": "Szűrők",
"filter": "Szűrő",
"query_log": "Lekérdezési napló",
"compact": "Kompakt",
"nothing_found": "Nincs találat",
"faq": "GYIK",
"version": "Verzió",
"address": "Cím",
"protocol": "Protokoll",
"on": "BE",
"off": "KI",
"copyright": "Copyright",
"homepage": "Honlap",
"report_an_issue": "Probléma bejelentése",
"privacy_policy": "Adatvédelmi irányelvek",
"enable_protection": "Védelem engedélyezése",
"enabled_protection": "Védelem engedélyezve",
"disable_protection": "Védelem letiltása",
"disabled_protection": "Letiltott védelem",
"refresh_statics": "Statisztikák frissítése",
"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": "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",
"for_last_days_plural": "az utóbbi {{count}} napban",
"no_domains_found": "Nem található domain",
"requests_count": "Kérések száma",
"top_blocked_domains": "Legtöbbet blokkolt domainek",
"top_clients": "Legaktívabb kliensek",
"no_clients_found": "Nem található kliens",
"general_statistics": "Általános statisztikák",
"number_of_dns_query_days": "Lekérdezések száma az utolsó {{count}} napban",
"number_of_dns_query_days_plural": "Feldolgozott DNS lekérdezések száma az utolsó {{count}} napban",
"number_of_dns_query_24_hours": "Az elmúlt 24 órában feldolgozott DNS lekérdezések száma",
"number_of_dns_query_blocked_24_hours": "A hirdetésblokkoló szűrők és a hosztfájlok által letiltott DNS kérések száma",
"number_of_dns_query_blocked_24_hours_by_sec": "Az AdGuard böngészési biztonság modulja által letiltott DNS kérések száma",
"number_of_dns_query_blocked_24_hours_adult": "Blokkolt felnőtt tartalmak száma",
"enforced_save_search": "Kényszerített biztonságos keresés",
"number_of_dns_query_to_safe_search": "A biztonságos keresésre kényszerített DNS lekérdezések száma",
"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> 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",
"use_adguard_parental_hint": "Az AdGuard Home ellenőrzi, hogy a domain tartalmaz-e felnőtteknek szóló anyagokat. Ugyanazokat az adatvédelmi API-kat használja, mint a böngésző biztonsági webszolgáltatás.",
"enforce_safe_search": "Biztonságos keresés kényszerítése",
"enforce_save_search_hint": "Az AdGuard Home a következő keresőmotorokban biztosíthatja a biztonságos keresést: Google, Youtube, Bing, DuckDuckGo és Yandex.",
"no_servers_specified": "Nincsenek megadott kiszolgálók",
"general_settings": "Általános beállítások",
"dns_settings": "DNS beállítások",
"dns_blocklists": "DNS blokkolási listák",
"dns_allowlists": "DNS engedélyezési listák",
"dns_blocklists_desc": "Az AdGuard Home blokkolni fogja azokat a domaineket, amik szerepelnek a blokkolási listán.",
"dns_allowlists_desc": "A DNS engedélyezési listán szereplő domainek engedélyezve lesznek, akkor is, ha szerepelnek bármelyik blokkolási listán.",
"custom_filtering_rules": "Egyéni szűrési szabályok",
"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",
"disabled_filtering_toast": "Szűrés letiltva",
"enabled_filtering_toast": "Szűrés engedélyezve",
"disabled_safe_browsing_toast": "Bbiztonságos böngészés letiltva",
"enabled_safe_browsing_toast": "Biztonságos böngészés engedélyezve",
"disabled_parental_toast": "Szülői felügyelet letiltva",
"enabled_parental_toast": "Szülői felügyelet engedélyezve",
"disabled_safe_search_toast": "Biztonságos keresés letiltva",
"enabled_save_search_toast": "Biztonságos keresés engedélyezve",
"enabled_table_header": "Engedélyezve",
"name_table_header": "Név",
"list_url_table_header": "Lista URL-je",
"rules_count_table_header": "Szabályok száma",
"last_time_updated_table_header": "Utoljára frissítve",
"actions_table_header": "Műveletek",
"request_table_header": "Kérés",
"edit_table_action": "Szerkesztés",
"delete_table_action": "Törlés",
"elapsed": "Eltelt",
"filters_and_hosts_hint": "Az AdGuard Home tudja értelmezni az alapvető hirdetésblokkolási szabályok, valamint a hosztfájlok szintaxisát.",
"no_blocklist_added": "Nincsnek blokkolási listák hozzáadva",
"no_whitelist_added": "Nincsenek engedélyezési listák hozzáadva",
"add_blocklist": "Blokkolási lista hozzáadása",
"add_allowlist": "Engedélyezési lista hozzáadása",
"cancel_btn": "Mégse",
"enter_name_hint": "Adja meg a nevet",
"enter_url_or_path_hint": "Írjon be egy URL-t vagy egy útvonalat a listához",
"check_updates_btn": "Frissítések keresése",
"new_blocklist": "Új blokkolási lista",
"new_allowlist": "Új engedélyezési lista",
"edit_blocklist": "Blokkolási lista módosítása",
"edit_allowlist": "Engedélyezési lista módosítása",
"choose_blocklist": "Blokkolási lista választás",
"choose_allowlist": "Engedélyezési lista választás",
"enter_valid_blocklist": "Adjon meg egy érvényes URL-t a blokkolási listához.",
"enter_valid_allowlist": "Adjon meg egy érvényes URL-t az engedélyezési listához.",
"form_error_url_format": "Érvénytelen URL formátum",
"form_error_url_or_path_format": "Helytelen URL vagy elérési út a listához",
"custom_filter_rules": "Egyéni szűrési szabályok",
"custom_filter_rules_hint": "Adjon meg egy szabályt egy sorban. Használhat egyszerű hirdetésblokkolási szabályokat vagy hosztfájl szintaxist.",
"examples_title": "Példák",
"example_meaning_filter_block": "letiltja a hozzáférést az example.org domainhez, valamint annak az összes aldomainjéhez is",
"example_meaning_filter_whitelist": "feloldja a hozzáférést az example.org domainhez, valamint annak az összes aldomainjéhez is",
"example_meaning_host_block": "Az AdGuard Home mostantol a 127.0.0.1 címre irányítja az example.org domaint (de az aldomaineket nem).",
"example_comment": "! Ide írhat egy megjegyzést",
"example_comment_meaning": "csak egy megjegyzés",
"example_comment_hash": "# Ez is egy megjegyzés",
"example_regex_meaning": "megakadályozza a hozzáférést a reguláris kifejezéssel egyező domaineknél",
"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",
"updated_upstream_dns_toast": "Frissítette az upstream DNS-kiszolgálókat",
"dns_test_ok_toast": "A megadott DNS-kiszolgálók megfelelően működnek",
"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",
"domain_or_client": "Domain vagy kliens",
"type_table_header": "Típus",
"response_table_header": "Válasz",
"response_code": "Válaszkód",
"client_table_header": "Kliens",
"empty_response_status": "Üres",
"show_all_filter_type": "Összes mutatása",
"show_filtered_type": "Szűrtek megjelenítése",
"no_logs_found": "Nem található napló",
"refresh_btn": "Frissítés",
"previous_btn": "Előző",
"next_btn": "Következő",
"loading_table_status": "Betöltés...",
"page_table_footer_text": "Oldal",
"rows_table_footer_text": "sor",
"updated_custom_filtering_toast": "Egyéni szűrőszabályok frissítve",
"rule_removed_from_custom_filtering_toast": "Szabály eltávolítva az egyéni szűrőszabályok közül: {{rule}}",
"rule_added_to_custom_filtering_toast": "Szabály hozzáadva az egyéni szűrőszabályokhoz: {{rule}}",
"query_log_response_status": "Állapot: {{value}}",
"query_log_filtered": "{{filter}} által szűrve",
"query_log_confirm_clear": "Biztosan törölni szerené a lekérdezési naplót?",
"query_log_cleared": "A lekérdezési napló sikeresen törölve",
"query_log_updated": "A lekérdezési napló sikeresen frissítve lett",
"query_log_clear": "Lekérdezési napló törlése",
"query_log_retention": "Lekérdezési naplók megtartása",
"query_log_enable": "Naplózás engedélyezése",
"query_log_configuration": "Naplózás beállítása",
"query_log_disabled": "Lekérdezési napló kikapcsolva. Bekapcsolható a <0>beállításokban</0>",
"query_log_strict_search": "Használjon \"dupla idézőjelet\" a pontos kereséshez",
"query_log_retention_confirm": "Biztos benne, hogy megváltoztatja a kérések naplójának megőrzési idejét? Ha csökkentette az értéket, a megadottnál korábbi adatok elvesznek",
"anonymize_client_ip": "Kliens IP-címének anonimizálása",
"anonymize_client_ip_desc": "Ne mentse el a kliens teljes IP-címét a naplókban és a statisztikákban",
"dns_config": "DNS szerver beállításai",
"dns_cache_config": "DNS gyorsítótár beállításai",
"dns_cache_config_desc": "Itt tudja konfigurálni a DNS gyorsítótárat",
"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: 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",
"upstream_dns_client_desc": "Ha üresen hagyja ezt a mezőt, az AdGuard Home azokat a szervereket fogja használni, amik a <0>DNS beállításokban</0> vannak beállítva.",
"tracker_source": "Követő forrása",
"source_label": "Forrás",
"found_in_known_domain_db": "Benne van az ismert domainek listájában.",
"category_label": "Kategória",
"rule_label": "Szabály",
"list_label": "Lista",
"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ő 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",
"install_settings_interface_link": "Az AdGuard Home webes admin felülete elérhető a következő címe(ke)n:",
"form_error_port": "Adjon meg egy érvényes portot",
"install_settings_dns": "DNS szerver",
"install_settings_dns_desc": "Be kell állítania az eszközeit vagy a routerét, hogy használni tudja a DNS szervert a következő címeken:",
"install_settings_all_interfaces": "Minden felület",
"install_auth_title": "Hitelesítés",
"install_auth_desc": "Erősen ajánlott a jelszavas hitelesítés beállítása az AdGuard Home webes admin felületéhez. Még akkor is, ha csak a helyi hálózaton érhető el, óvja meg az illetéktelen hozzáférésektől.",
"install_auth_username": "Felhasználónév",
"install_auth_password": "Jelszó",
"install_auth_confirm": "Jelszó megerősítése",
"install_auth_username_enter": "Felhasználónév megadása",
"install_auth_password_enter": "Jelszó megadása",
"install_step": "Lépés",
"install_devices_title": "Állítsa be az eszközeit",
"install_devices_desc": "Az AdGuard Home használatának megkezdéséhez be kell állítania az eszközeit, hogy azok használni tudják.",
"install_submit_title": "Gratulálunk!",
"install_submit_desc": "A telepítési folyamat befejeződött, minden készen áll az AdGuard Home használatára.",
"install_devices_router": "Router",
"install_devices_router_desc": "Ez a beállítás lefed minden eszközt, amik az Ön routeréhez csatlakoznak, így azokat nem kell külön, kézzel beállítania.",
"install_devices_address": "Az AdGuard DNS szerver a következő címeket figyeli",
"install_devices_router_list_1": "Nyissa meg a router beállításait. Ez általában a böngészőn keresztül történik egy URL megadásával (pl. http://192.168.0.1/ vagy http://192.168.1.1/). Ez az oldal valószínűleg felhasználónevet és jelszót fog kérni. Ha nem tudja a belépési adatokat, nézze meg a router dobozát, a router alján levő fehér címkét vagy a technikai dokumentációt az interneten, végső esetben pedig visszaállíthatja a routert. Néhány router speciális alkalmazást igényel, amik lehetséges, hogy már telepítve vannak a számítógépére vagy a mobil eszközére.",
"install_devices_router_list_2": "Keresse meg a DHCP/DNS beállításokat. Keresse a DNS szót egy olyan mező mellett, amely egy 4 csoportból álló, 1-3 számjegyű számsort vár.",
"install_devices_router_list_3": "Adja meg az AdGuard Home szerver címét itt.",
"install_devices_router_list_4": "Bizonyos típusú routereknél nem állíthat be egyéni DNS-kiszolgálót. Ebben az esetben segíthet, ha az AdGuard Home-t DHCP-szerverként állítja be. Ellenkező esetben keresse meg az adott router kézikönyvében a DNS-kiszolgálók testreszabását.",
"install_devices_windows_list_1": "Nyissa meg a Vezérlőpultot a Start menün vagy a Windows keresőn keresztül.",
"install_devices_windows_list_2": "Válassza a Hálózat és internet kategóriát, majd pedig a Hálózati és megosztási központot.",
"install_devices_windows_list_3": "A képernyő bal oldalán keresse meg az Adapterbeállítások módosítása lehetőséget és kattintson rá.",
"install_devices_windows_list_4": "Válassza ki a jelenleg is használt kapcsolatot, majd jobb egérgombbal kattintson rá és a megjelenő menüből válassza a Tulajdonságok elemet.",
"install_devices_windows_list_5": "Keresse meg az Internet Protocol Version 4 (TCP/IP) elemet a listában, válassza ki, majd ismét kattintson a Tulajdonságokra.",
"install_devices_windows_list_6": "Válassza a Következő DNS címek használata lehetőséget és adja meg az AdGuard Home szerver címeit.",
"install_devices_macos_list_1": "Kattintson az Apple ikonra és válassza a Rendszerbeállításokat.",
"install_devices_macos_list_2": "Kattintson a Hálózat lehetőségre.",
"install_devices_macos_list_3": "Válassza ki az első kapcsolatot a listából és kattintson a Haladó beállításokra.",
"install_devices_macos_list_4": "Válassza ki a DNS fület és adja meg az AdGuard Home szerver címeit.",
"install_devices_android_list_1": "Az Android kezdőképernyőjén érintse meg a Beállítások gombot.",
"install_devices_android_list_2": "Érintse meg a Wi-Fi gombot a menüben. Ekkor a képernyőre kerül az összes elérhető hálózat (mobilinternethez nem lehet egyedi DNS-t megadni).",
"install_devices_android_list_3": "Nyomjon hosszan arra a hálózatra a listából, amelyikre éppen csatlakozva van, majd válassza a Hálózat módosítása lehetőséget.",
"install_devices_android_list_4": "Egyes eszközökön előfordulhat, hogy a további beállítások megtekintéséhez a Speciális/haladó beállítások részt kell megnyitni. Az Android DNS-beállításainak módosításához ekkor az IP-beállításokat DHCP-ről statikusra kell váltania.",
"install_devices_android_list_5": "Változtassa meg a DNS 1 és a DNS 2 értékét az AdGuard Home szerver címeire.",
"install_devices_ios_list_1": "A kezdőképernyőn érintse meg a Beállítások gombot.",
"install_devices_ios_list_2": "Válassza ki a Wi-Fi-t a bal oldali menüből (mobilinternetnél nem lehetséges a DNS beállítása).",
"install_devices_ios_list_3": "Érintse meg a jelenleg használt hálózat nevét.",
"install_devices_ios_list_4": "A DNS mezőbe adja meg az AdGuard Home szerver címeit.",
"get_started": "Kezdés",
"next": "Következő",
"open_dashboard": "Irányítópult megnyitása",
"install_saved": "Sikeres mentés",
"encryption_title": "Titkosítás",
"encryption_desc": "Titkosítás (HTTPS/TLS) támogatása mind a DNS, mind pedig a webes admin felület számára",
"encryption_config_saved": "Titkosítási beállítások mentve",
"encryption_server": "Szerver neve",
"encryption_server_enter": "Adja meg az Ön domain címét",
"encryption_server_desc": "A HTTPS használatához be kell írnia egy, az SSL-tanúsítvánnyal megegyező kiszolgálónevet.",
"encryption_redirect": "Automatikus átirányítás HTTPS kapcsolatra",
"encryption_redirect_desc": "Ha be van jelölve, az AdGuard Home automatikusan átirányítja a HTTP kapcsolatokat a biztonságos HTTPS protokollra.",
"encryption_https": "HTTPS port",
"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.",
"encryption_status": "Állapot",
"encryption_expire": "Lejár",
"encryption_key": "Privát kulcs",
"encryption_key_input": "Másolja ki és illessze be ide a tanúsítványa PEM-kódolt privát kulcsát.",
"encryption_enable": "Titkosítás engedélyezése (HTTPS, DNS-over-HTTPS, és DNS-over-TLS)",
"encryption_enable_desc": "Ha a titkosítás engedélyezve van, az AdGuard Home admin felülete működik HTTPS-en keresztül, és a DNS szerver is várja a kéréseket DNS-over-HTTPS-en, valamint DNS-over-TLS-en keresztül.",
"encryption_chain_valid": "A tanúsítványlánc érvényes",
"encryption_chain_invalid": "A tanúsítványlánc érvénytelen",
"encryption_key_valid": "Ez egy érvényes {{type}} privát kulcs",
"encryption_key_invalid": "Ez egy érvénytelen {{type}} privát kulcs",
"encryption_subject": "Tárgy",
"encryption_issuer": "Kibocsátó",
"encryption_hostnames": "Hosztnevek",
"encryption_reset": "Biztosan visszaállítja a titkosítási beállításokat?",
"topline_expiring_certificate": "Az SSL-tanúsítványa hamarosan lejár. Frissítse a <0>Titkosítási beállításokat</0>.",
"topline_expired_certificate": "Az SSL-tanúsítványa lejárt. Frissítse a <0>Titkosítási beállításokat</0>.",
"form_error_port_range": "A port értékét a 80-65535 tartományban adja meg",
"form_error_port_unsafe": "Ez a port nem biztonságos",
"form_error_equal": "Nem egyezhetnek",
"form_error_password": "A jelszavak nem egyeznek",
"reset_settings": "Beállítások visszaállítása",
"update_announcement": "Az AdGuard Home {{version}} verziója elérhető! <0>Kattintson ide</0> további információkért.",
"setup_guide": "Beállítási útmutató",
"dns_addresses": "DNS címek",
"dns_start": "A DNS szerver indul",
"dns_status_error": "Hiba történt a DNS szerver állapotának ellenőrzésekor",
"down": "Nem elérhető",
"fix": "Állandó",
"dns_providers": "Itt van az <0>ismert DNS szolgáltatók listája</0>, amelyekből választhat.",
"update_now": "Frissítés most",
"update_failed": "Az automatikus frissítés nem sikerült. Kérjük, hogy <a>kövesse ezeket a lépéseket</a> a manuális frissítéshez.",
"processing_update": "Kérjük várjon, az AdGuard Home frissítése folyamatban van",
"clients_title": "Kliensek",
"clients_desc": "Az AdGuard Home-hoz csatlakozó eszközök kezelése",
"settings_global": "Globális",
"settings_custom": "Egyéni",
"table_client": "Kliens",
"table_name": "Név",
"save_btn": "Mentés",
"client_add": "Kliens hozzáadása",
"client_new": "Új kliens",
"client_edit": "Kliens módosítása",
"client_identifier": "Azonosító",
"ip_address": "IP cím",
"client_identifier_desc": "A klienseket be lehet azonosítani IP-cím, CIDR, valamint MAC-cím alapján. Kérjük, vegye figyelembe, hogy a MAC-cím alapján történő azonosítás csak akkor működik, ha az AdGuard Home egyben <0>DHCP szerverként</0> is funkcionál",
"form_enter_ip": "IP-cím megadása",
"form_enter_mac": "MAC-cím megadása",
"form_enter_id": "Azonosító megadása",
"form_add_id": "Azonosító hozzáadása",
"form_client_name": "Adja meg a kliens nevét",
"name": "Név",
"client_global_settings": "Globális beállítások használata",
"client_deleted": "A(z) \"{{key}}\" kliens sikeresen el lett távolítva",
"client_added": "A(z) \"{{key}}\" kliens sikeresen hozzá lett adva",
"client_updated": "A(z) \"{{key}}\" kliens sikeresen frissítve lett",
"clients_not_found": "Nem található kliens",
"client_confirm_delete": "Biztosan törölni szeretné a(z) \"{{key}}\" klienst?",
"list_confirm_delete": "Biztosan törölni kívánja ezt a listát?",
"auto_clients_title": "Kliensek (futási idő)",
"auto_clients_desc": "Az AdGuard Home-ot használó, de a konfigurációban nem tárolt kliensek adatai",
"access_title": "Hozzáférési beállítások",
"access_desc": "Itt konfigurálhatja az AdGuard Home DNS-kiszolgáló hozzáférési szabályait.",
"access_allowed_title": "Engedélyezett kliensek",
"access_allowed_desc": "A CIDR vagy IP címek listája. Ha konfigurálva van, az AdGuard Home csak az ezekről az IP-címekről fogadja el a kéréseket.",
"access_disallowed_title": "Nem engedélyezett kliensek",
"access_disallowed_desc": "A CIDR vagy IP címek listája. Ha konfigurálva van, az AdGuard Home eldobja a lekérdezéseket ezekről az IP-címekről.",
"access_blocked_title": "Nem engedélyezett domainek",
"access_blocked_desc": "Ne keverje össze ezt a szűrőkkel. Az AdGuard Home az összes DNS kérést el fogja dobni, ami ezekkel a domainekkel kapcsolatos. Itt megadhatja a pontos domainneveket, a helyettesítő karaktereket és az urlfilter-szabályokat, pl. 'example.org', '*.example.org' or '||example.org^'.",
"access_settings_saved": "A hozzáférési beállítások sikeresen mentésre kerültek",
"updates_checked": "A frissítések sikeresen ellenőrizve lettek",
"updates_version_equal": "Az AdGuard Home naprakész",
"check_updates_now": "Frissítések ellenőrzése most",
"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>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.",
"setup_dns_privacy_ios_1": "A <0>DNSCloak</0> támogatja a <1>DNS-over-HTTPS</1>-t, de ahhoz, hogy a saját szerverhez konfigurálhassa, létre kell hoznia egy <2>DNS bélyeget</2> hozzá.",
"setup_dns_privacy_ios_2": "Az <0>AdGuard for iOS</0> támogatja a <1>DNS-over-HTTPS</1> és a <1>DNS-over-TLS</1> beállításokat.",
"setup_dns_privacy_other_title": "Egyéb megvalósítások",
"setup_dns_privacy_other_1": "Maga az AdGuard Home bármilyen platformon biztonságos DNS-kliens lehet.",
"setup_dns_privacy_other_2": "A <0>dnsproxy</0> támogatja az összes ismert biztonságos DNS protokollt.",
"setup_dns_privacy_other_3": "A <0>dnscrypt-proxy</0> támogatja a <1>DNS-over-HTTPS</1>-t.",
"setup_dns_privacy_other_4": "A <0>Mozilla Firefox</0> támogatja a <1>DNS-over-HTTPS</1>-t.",
"setup_dns_privacy_other_5": "További megvalósításokat találhat <0>ide</0> és <1>ide</1> kattintva.",
"setup_dns_notice": "Ahhoz, hogy a <1>DNS-over-HTTPS</1> vagy a <1>DNS-over-TLS</1> valamelyikét használja, muszáj <0>beállítania a titkosítást</0> az AdGuard Home beállításaiban.",
"rewrite_added": "DNS átírás a(z) \"{{key}}\" kulcshoz sikeresen hozzáadva",
"rewrite_deleted": "DNS átírás a(z) \"{{key}}\" kulcshoz sikeresen törölve",
"rewrite_add": "DNS átírás hozzáadása",
"rewrite_not_found": "Nem találhatók DNS átírások",
"rewrite_confirm_delete": "Biztosan törölni szeretné a DNS átírást ehhez: \"{{key}}\"?",
"rewrite_desc": "Lehetővé teszi, hogy egyszerűen beállítson egyéni DNS választ egy adott domain névhez.",
"rewrite_applied": "Alkalmazott átírási szabály",
"rewrite_hosts_applied": "Átírva egy hoszt szabály által",
"dns_rewrites": "DNS átírások",
"form_domain": "Adja meg a domain nevet vagy a helyettesítő karaktert",
"form_answer": "Adjon meg egy IP-címet vagy egy domain nevet",
"form_error_domain_format": "Érvénytelen domain formátum",
"form_error_answer_format": "Érvénytelen válasz formátum",
"configure": "Beállítás",
"main_settings": "Fő beállítások",
"block_services": "Speciális szolgáltatások blokkolása",
"blocked_services": "Blokkolt szolgáltatások",
"blocked_services_desc": "Lehetővé teszi a népszerű oldalak és szolgáltatások blokkolását.",
"blocked_services_saved": "Blokkolt szolgáltatások sikeresen mentve",
"blocked_services_global": "A globálisan tiltott szolgáltatások használata",
"blocked_service": "Blokkolt szolgáltatás",
"block_all": "Összes blokkolása",
"unblock_all": "Összes feloldása",
"encryption_certificate_path": "Tanúsítvány útvonala",
"encryption_private_key_path": "Privát kulcs útvonala",
"encryption_certificates_source_path": "Tanúsítványfájl útvonalának megadása",
"encryption_certificates_source_content": "Tanúsítvány tartalmának megadása",
"encryption_key_source_path": "Privát kulcsfájl beállítása",
"encryption_key_source_content": "Privát kulcs tartalmának megadása",
"stats_params": "Statisztikai beállítások",
"config_successfully_saved": "A beállítások sikeresen el lettek mentve",
"interval_24_hour": "24 óra",
"interval_days": "{{count}} nap",
"interval_days_plural": "{{count}} nap",
"domain": "Domain",
"answer": "Válasz",
"filter_added_successfully": "A lista sikeresen hozzá lett adva",
"filter_removed_successfully": "A lista sikeresen el lett távolítva",
"filter_updated": "A lista sikeresen frissítve lett",
"statistics_configuration": "Statisztikai beállítások",
"statistics_retention": "Statisztika megőrzése",
"statistics_retention_desc": "Ha csökkenti az intervallum értékét, az előtte levő adatok elvesznek",
"statistics_clear": " Statisztikák visszaállítása",
"statistics_clear_confirm": "Biztosan vissza akarja állítani a statisztikákat?",
"statistics_retention_confirm": "Biztos benne, hogy megváltoztatja a statisztika megőrzési idejét? Ha csökkentette az értéket, a megadottnál korábbi adatok elvesznek",
"statistics_cleared": "A statisztikák sikeresen vissza lettek állítva",
"interval_hours": "{{count}} óra",
"interval_hours_plural": "{{count}} óra",
"filters_configuration": "Szűrők beállításai",
"filters_enable": "Szűrők engedélyezése",
"filters_interval": "Szűrőfrissítési gyakoriság",
"disabled": "Kikapcsolva",
"username_label": "Felhasználónév",
"username_placeholder": "Felhasználónév megadása",
"password_label": "Jelszó",
"password_placeholder": "Jelszó megadása",
"sign_in": "Bejelentkezés",
"sign_out": "Kijelentkezés",
"forgot_password": "Elfelejtette a jelszót?",
"forgot_password_desc": "Kérjük, hogy kövesse <0>ezeket a lépéseket</0> a jelszó visszaállításához.",
"location": "Helyzet",
"orgname": "Szervezet neve",
"netname": "Hálózat neve",
"network": "Hálózat",
"descr": "Leírás",
"whois": "Whois",
"filtering_rules_learn_more": "<0>Tudjon meg többet</0> a saját hosztlisták létrehozásáról.",
"blocked_by_response": "Blokkolva a CNAME vagy a válasz IP-címe alapján",
"blocked_by_cname_or_ip": "CNAME vagy IP által blokkolva",
"try_again": "Próbálja újra",
"domain_desc": "Adja meg a domain nevet vagy a helyettesítő karaktert ahhoz a címhez, amit át kíván íratni.",
"example_rewrite_domain": "csak ehhez a domainhez írja át a válaszokat.",
"example_rewrite_wildcard": "az <0>example.org</0> összes aldomainjéhez átírja a válaszokat.",
"rewrite_ip_address": "IP-cím: használja ezt az IP-t A vagy AAAA válaszban",
"rewrite_domain_name": "Domain név: CNAME rekord hozzáadása",
"rewrite_A": "<0>A</0>: speciális érték, megtartja az upstream felől érkező <0>A</0> rekordokat",
"rewrite_AAAA": "<0>AAAA</0>: speciális érték, megtartja az upstream felől érkező <0>AAAA</0> rekordokat",
"disable_ipv6": "IPv6 letiltása",
"disable_ipv6_desc": "Ha ez a szolgáltatás engedélyezve van, akkor az összes IPv6-cím (AAAA típus) DNS-lekérdezése elveszik.",
"fastest_addr": "Leggyorsabb IP-cím",
"fastest_addr_desc": "Kérdezze le az összes DNS-kiszolgálót, és adja vissza a leggyorsabb IP-címet a válaszok közül. Ez lelassítja a DNS-lekérdezéseket, mivel az összes DNS-kiszolgáló esetében meg kell várnunk a válaszokat, de javítja az összeköttetést.",
"autofix_warning_text": "Ha a \"Javítás\" lehetőségre kattint, az AdGuard Home megpróbálja beállítani a rendszerét, hogy használja az AdGuard Home DNS szervert.",
"autofix_warning_list": "A következő feladatokat hajtja végre: <0>A DNSStubListener rendszer kikapcsolása</0><0>Beállítja a DNS-kiszolgáló címét 127.0.0.1-re.</0><0>Lecseréli az /etc/resolv.conf szimbolikus útvonalat erre: /run/systemd/resolve/resolv.conf</0><0>A DNSStubListener leállítása (a rendszer által feloldott szolgáltatás újratöltése)</0>",
"autofix_warning_result": "Mindennek eredményeként az Ön rendszeréből származó összes DNS-kérést alapértelmezés szerint az AdGuard Home dolgozza fel.",
"tags_title": "Címkék",
"tags_desc": "Kiválaszthatja a klienseknek megfelelő címkéket. A címkék beilleszthetők a szűrési szabályokba, és lehetővé teszik azok pontosabb alkalmazását. <0>További információ</0>",
"form_select_tags": "Válasszon kliens címkéket",
"check_title": "Szűrés ellenőrzése",
"check_desc": "Ellenőrzi, hogy a hosztnév szűrve van-e",
"check": "Ellenőrzés",
"form_enter_host": "Adja meg a hosztnevet",
"filtered_custom_rules": "Szűrve van az egyéni szűrési szabályok alapján",
"choose_from_list": "Választás a listából",
"add_custom_list": "Egyedi lista hozzáadása",
"host_whitelisted": "Ez a hoszt a kivételek között szerepel",
"check_ip": "IP-címek: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"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?",
"client_blocked": "A(z) \"{{ip}}\" kliens sikeresen blokkolva",
"client_unblocked": "A(z) \"{{ip}}\" kliens blokkolása sikeresen feloldva",
"static_ip": "Statikus IP-cím",
"static_ip_desc": "Az AdGuard Home egy szerver, tehát statikus IP-címre van szüksége a megfelelő működéshez. Ellenkező esetben a router valamikor más IP-címet rendelhet ehhez az eszközhöz.",
"set_static_ip": "Statikus IP-cím beállítása",
"install_static_ok": "Jó hír! A statikus IP-cím már be van állítva",
"install_static_error": "Az AdGuard Home nem tudja automatikusan konfigurálni ezt a hálózati felületet. Kérjük, nézzen utána, hogyan kell ezt manuálisan elvégezni.",
"install_static_configure": "Úgy észleltük, hogy dinamikus IP-cím van használatban — <0>{{ip}}</0>. Szeretné ezt statikus IP-címként használni?",
"confirm_static_ip": "Az AdGuard Home beállítja az {{ip}} IP-címet az Ön statikus IP-címének. Biztosan folytatni kívánja?",
"list_updated": "{{count}} lista frissítve lett",
"list_updated_plural": "{{count}} lista frissítve lett",
"dnssec_enable": "DNSSEC engedélyezése",
"dnssec_enable_desc": "Állítsa be a DNSSEC jelzőt a kimenő DNS-lekérdezésekbe, és ellenőrizze az eredményt (szükséges a DNSSEC-kompatibilis feloldás)",
"validated_with_dnssec": "DNSSEC által ellenőrizve",
"all_queries": "Minden kérés",
"show_blocked_responses": "Blokkolva",
"show_whitelisted_responses": "Kivételezett",
"show_processed_responses": "Feldolgozva",
"blocked_safebrowsing": "Blokkolva a biztonságos böngészés által",
"blocked_adult_websites": "Blokkolva a felnőtt tartalmak által",
"blocked_threats": "Blokkolt fenyegetések",
"allowed": "Engedve",
"filtered": "Megszűrt",
"rewritten": "Átírt",
"safe_search": "Biztonságos keresés",
"blocklist": "Tiltólista",
"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 (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",
"filter_category_other": "Egyéb",
"filter_category_general_desc": "Olyan listák, amelyek blokkolják a nyomkövetést és a hirdetéseket a legtöbb eszközön",
"filter_category_security_desc": "Olyan listák, amelyek a kártékony, adathalász vagy átverős oldalak tiltására vannak kifejlesztve",
"filter_category_regional_desc": "Olyan listák, amelyek a regionális hirdetések, valamint a nyomkövető szerverek ellen vannak kifejlesztve",
"filter_category_other_desc": "További tiltólisták",
"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.",
"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,14 +1,19 @@
{
"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",
"load_balancing_desc": "Permintaan satu server pada satu waktu. AdGuard Home akan menggunakan algoritma acak tertimbang untuk memilih server sehingga server tercepat akan lebih sering digunakan.",
"bootstrap_dns": "Server DNS bootstrap",
"bootstrap_dns_desc": "Server Bootstrap DNS dapat digunakan untuk meresolve alamat IP pada DoH/DoT resolvers yang Anda tentukan sebagai upstreams.",
"check_dhcp_servers": "Cek untuk server DHCP",
"save_config": "Simpan pengaturan",
"enabled_dhcp": "Server DHCP diaktifkan",
"disabled_dhcp": "Server DHCP dinonaktifkan",
"unavailable_dhcp": "DHCP tidak tersedia",
"unavailable_dhcp_desc": "Adguard Home tidak dapat menjalankan server DHCP pada OS Anda",
"dhcp_title": "Server DHCP",
"dhcp_description": "Jika router Anda tidak mendukung pengaturan DHCP, Anda dapat menggunakan server DHCP bawaan AdGuard.",
"dhcp_enable": "Aktifkan server DHCP",
@@ -19,6 +24,8 @@
"dhcp_static_leases": "DHCP static leases",
"dhcp_leases_not_found": "DHCP lease tidak ditemukan",
"dhcp_config_saved": "Pengaturan server DHCP tersimpan",
"dhcp_ipv4_settings": "Pengaturan DHCP IPv4",
"dhcp_ipv6_settings": "Pengaturan DHCP IPv6",
"form_error_required": "Kolom yang harus diisi",
"form_error_ip4_format": "Format IPv4 tidak valid",
"form_error_ip6_format": "Format IPv6 tidak valid",
@@ -27,6 +34,7 @@
"form_error_client_id_format": "Format client ID tidak valid",
"form_error_positive": "Harus lebih dari 0",
"form_error_negative": "Harus berjumlah 0 atau lebih besar dari 0",
"range_end_error": "Harus lebih besar dari rentang awal",
"dhcp_form_gateway_input": "IP gateway",
"dhcp_form_subnet_input": "Subnet mask",
"dhcp_form_range_title": "Rentang alamat IP",
@@ -51,9 +59,11 @@
"dhcp_add_static_lease": "Tambah static lease",
"dhcp_reset": "Apakah anda yakin ingin mengatur ulang konfigurasi DHCP anda?",
"country": "Negara",
"city": "Kota",
"delete_confirm": "Apakah anda yakin ingin menghapus \"{{key}}\"?",
"form_enter_hostname": "Masukkan hostname",
"error_details": "Detail kesalahan",
"response_details": "Detail respon",
"request_details": "Detai permintaan",
"client_details": "Detail klien",
"details": "Detail",
@@ -63,6 +73,8 @@
"filters": "Penyaring",
"filter": "Filter",
"query_log": "Catatan Kueri",
"compact": "Rapat",
"nothing_found": "Tidak ditemukan",
"faq": "Tanya Jawab",
"version": "versi",
"address": "Alamat",
@@ -103,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",
@@ -114,12 +126,17 @@
"general_settings": "Pengaturan umum",
"dns_settings": "Pengaturan DNS",
"dns_blocklists": "Daftar blokir DNS",
"dns_allowlists": "Daftar putih DNS",
"dns_blocklists_desc": "AdGuard Home akan memblokir domain yang cocok dengan daftar hitam.",
"dns_allowlists_desc": "Domain dari daftar putih DNS akan diizinkan bahkan jika mereka ada juga di daftar hitam.",
"custom_filtering_rules": "Aturan penyaringan khusus",
"encryption_settings": "Pengaturan enkripsi",
"dhcp_settings": "Pengaturan DHCP",
"upstream_dns": "Server DNS hulu",
"upstream_dns_hint": "Jika Anda mengosongkan kolom ini, AdGuard Home akan menggunakan <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> sebagai hulu. Gunakan tls:// untuk server DNS over TLS.",
"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",
"disabled_filtering_toast": "Penyaringan nonaktif",
"enabled_filtering_toast": "Penyaringan aktif",
@@ -131,6 +148,7 @@
"enabled_save_search_toast": "Pencarian aman diaktifkan",
"enabled_table_header": "Diaktifkan",
"name_table_header": "Nama",
"list_url_table_header": "Daftar URL",
"rules_count_table_header": "Jumlah Aturan",
"last_time_updated_table_header": "Terakhir diperbaharui",
"actions_table_header": "Aksi",
@@ -139,10 +157,23 @@
"delete_table_action": "Hapus",
"elapsed": "Berlalu",
"filters_and_hosts_hint": "AdGuard Home memahami aturan dasar adblock dan sintak file hosts.",
"no_blocklist_added": "Tiada daftar hitam ditambahkan",
"no_whitelist_added": "Tiada daftar putih ditambahkan",
"add_blocklist": "Tambah daftar hitam",
"add_allowlist": "Tambah daftar putih",
"cancel_btn": "Batal",
"enter_name_hint": "Masukkan nama",
"enter_url_or_path_hint": "Masukan sebuah URL atau jalur absolut dari daftar",
"check_updates_btn": "Cek pembaruan",
"new_blocklist": "Daftar hitam baru",
"new_allowlist": "Daftar putih baru",
"edit_blocklist": "Edit daftar hitam",
"edit_allowlist": "Edit daftar putih",
"choose_blocklist": "Pilih daftar hitam",
"choose_allowlist": "Pilih daftar putih",
"enter_valid_blocklist": "Masukkan valid URL ke daftar hitam.",
"enter_valid_allowlist": "Masukkan valid URL ke daftar putih.",
"form_error_url_format": "Format URL tidak valid",
"form_error_url_or_path_format": "URL atau jalur absolut dari daftar tidak valid",
"custom_filter_rules": "Aturan penyaringan khusus",
"custom_filter_rules_hint": "Masukkan satu aturan dalam sebuah baris. Anda dapat menggunakan baik aturan adblock maupun sintaks file hosts.",
@@ -157,19 +188,26 @@
"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",
"updated_upstream_dns_toast": "Server DNS hulu terbarui",
"dns_test_ok_toast": "Server DNS yang ditentukan bekerja dengan benar",
"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",
"domain_or_client": "Domain atau klien",
"type_table_header": "Tipe",
"response_table_header": "Respon",
"response_code": "Kode respon",
"client_table_header": "Klien",
"empty_response_status": "Kosong",
"show_all_filter_type": "Tampilkan semua",
@@ -182,12 +220,13 @@
"page_table_footer_text": "Halaman",
"rows_table_footer_text": "baris",
"updated_custom_filtering_toast": "Perbarui aturan penyaringan khusus",
"rule_removed_from_custom_filtering_toast": "Aturan dihapus dari aturan penyaringan khusus",
"rule_added_to_custom_filtering_toast": "Aturan ditambah ke aturan penyaringan khusus",
"rule_removed_from_custom_filtering_toast": "Aturan dihapus dari aturan penyaringan khusus: {{rule}}",
"rule_added_to_custom_filtering_toast": "Aturan ditambah ke aturan penyaringan khusus: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Difilter oleh {{filter}}",
"query_log_confirm_clear": "Apakah Anda yakin ingin menghapus seluruh kueri log?",
"query_log_cleared": "Kueri log telah berhasil dihapus",
"query_log_updated": "Log permintaan telah berhasil diperbarui",
"query_log_clear": "Hapus kueri log",
"query_log_retention": "Retensi kueri log",
"query_log_enable": "Aktifkan log",
@@ -195,19 +234,43 @@
"query_log_disabled": "Kueri log dinonaktifkan dan dapat dikonfigurasi di <0>pengaturan</0>",
"query_log_strict_search": "Gunakan tanda kutip ganda untuk pencarian ketat",
"query_log_retention_confirm": "Apakah Anda yakin ingin mengubah retensi kueri log? Jika Anda menurunkan nilai interval, beberapa data akan hilang",
"anonymize_client_ip": "Anonim IP klien",
"anonymize_client_ip_desc": "Jangan simpan alamat lengkap IP klien dalam log dan statistik",
"dns_config": "Konfigurasi server DNS",
"dns_cache_config": "Konfigurasi cache DNS",
"dns_cache_config_desc": "Disini Anda bisa mengonfigurasi cache DNS",
"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 (0: tidak terbatas)",
"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": "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",
"upstream_dns_client_desc": "Jika Anda biarkan bidang ini kosong, AdGuard Home akan memakai server yang dikonfigurasi di<0>Pengaturan DNS</0>.",
"tracker_source": "Sumber pelacak",
"source_label": "Sumber",
"found_in_known_domain_db": "Ditemukan di database domain dikenal",
"category_label": "Kategori",
"rule_label": "Aturan",
"list_label": "Daftar",
"unknown_filter": "Penyaringan {{filterId}} tidak dikenal",
"known_tracker": "Pelacak yang dikenal",
"install_welcome_title": "Selamat datang di AdGuard Home!",
@@ -274,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.",
@@ -307,7 +372,7 @@
"fix": "Perbaiki",
"dns_providers": "Berikut adalah <0>daftar penyedia DNS yang dikenal</0> untuk dipilih.",
"update_now": "Perbarui sekarang",
"update_failed": "Pembaruan otomatis telah gagal. Harap <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>ikuti petunjuk</a> untuk perbarui secara manual.",
"update_failed": "Pembaruan otomatis gagal. Silahkan <a>ikuti petunjuk ini</a> untuk perbarui secara manual.",
"processing_update": "Silahkan tunggu, AdGuard Home sedang diperbarui",
"clients_title": "Klien",
"clients_desc": "Atur perangkat yang terhubung ke AdGuard Home",
@@ -324,6 +389,8 @@
"client_identifier_desc": "Klien dapat diidentifikasi dengan alamat IP atau alamat MAC. Harap dicatat bahwa menggunakan MAC sebagai pengidentifikasi hanya dimungkinkan jika AdGuard Home juga merupakan <0>server DHCP</0>",
"form_enter_ip": "Masukkan IP",
"form_enter_mac": "Masukkan MAC",
"form_enter_id": "Masukkan pengenal",
"form_add_id": "Tambah pengenal",
"form_client_name": "Masukkan nama klien",
"name": "Nama",
"client_global_settings": "Gunakan pengaturan global",
@@ -332,6 +399,7 @@
"client_updated": "Klien \"{{key}}\" berhasil diperbarui",
"clients_not_found": "Tidak ada klien ditemukan",
"client_confirm_delete": "Apakah anda yakin ingin menghapus klien \"{{key}}\"?",
"list_confirm_delete": "Anda yakin ingin menghapus daftar ini?",
"auto_clients_title": "Klien (waktu berjalan)",
"auto_clients_desc": "Data pada klien yang menggunakan AdGuard Home, tetapi tidak disimpan dalam konfigurasi",
"access_title": "Pengaturan akses",
@@ -349,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.",
@@ -399,6 +468,8 @@
"domain": "Domain",
"answer": "Jawab",
"filter_added_successfully": "Filter telah berhasil ditambahkan",
"filter_removed_successfully": "Daftar ini telah sukses dihapus",
"filter_updated": "Daftar telah sukses diperbarui",
"statistics_configuration": "Konfigurasi statistik",
"statistics_retention": "Statistik disimpan",
"statistics_retention_desc": "Jika Anda menurunkan nilai interval, beberapa data akan hilang",
@@ -428,29 +499,92 @@
"whois": "Whois",
"filtering_rules_learn_more": "<0>Pelajari lebih lanjut</0> tentang membuat daftar hitam host Anda sendiri.",
"blocked_by_response": "Diblokir oleh CNAME atau IP sebagai respon",
"blocked_by_cname_or_ip": "Diblokir oleh CNAME atau IP",
"try_again": "Coba lagi",
"domain_desc": "Masukkan nama domain atau wildcard yang ingin Anda tulis ulang.",
"example_rewrite_domain": "tulis ulang respon hanya untuk domain ini saja.",
"example_rewrite_wildcard": "tulis ulang respon untuk semua subdomain <0>contoh.org</0>.",
"rewrite_ip_address": "Alamat IP: pakai IP ini dalam respons A atau AAAA",
"rewrite_domain_name": "Nama domain: tambah ke rekaman CNAME",
"rewrite_A": "<0>A</0>: nilai khusus, biarkan <0>A</0> merekam dari upstream",
"rewrite_AAAA": "<0>AAAA</0>: nilai khusus, biarkan <0>AAAA</0> merekam dari upstream",
"disable_ipv6": "Matikan IPv6",
"disable_ipv6_desc": "Apabila fitur ini dinyalakan, semua permintaan DNS untuk alamat-alamat IPv6 (tipe AAAA) akan diputus.",
"fastest_addr": "Alamat IP tercepat",
"fastest_addr_desc": "Permintaan semua server DNS dan kembalinya alamat IP tercepat di antara semua respons",
"autofix_warning_text": "Apabila anda menekan \"Perbaiki\", AdGuardHome akan mengatur sistem anda untuk menggunakan server DNS AdGuardHome.",
"autofix_warning_list": "Ini akan melakukan tugas berikut: <0>Nonaktifkan sistem DNSStubListener</0> <0> Atur alamat server DNS ke 127.0.0.1</0> <0>Ganti target tautan simbolis /etc/resolv.conf pakai /run/systemd/resolve/resolv.conf</0> <0>Hentikan DNSStubListener (muat ulang layanan sistemd-resolve service)</0>",
"autofix_warning_result": "Hasilnya, semua permintaan DNS dari sistem anda akan diproses oleh AdGuardHome secara standar.",
"tags_title": "Tag",
"tags_desc": "Anda dapat memilih tag sesuai dengan klien. Tag dapat dimasukkan dalam aturan pemfilteran dan memungkinkan Anda untuk menerapkannya lebih akurat. <0>Pelajari lebih</0>",
"form_select_tags": "Pilih tag klien",
"check_title": "Periksa penyaringan",
"check_desc": "Periksa apakah nama host telah tersaring",
"check": "Periksa",
"form_enter_host": "Masukkan nama host",
"filtered_custom_rules": "Tersaring oleh aturan penyaring Buatan",
"choose_from_list": "Pilih dari daftar",
"add_custom_list": "Tambah daftar buatan",
"host_whitelisted": "Host didaftar putihkan",
"check_ip": "Alamat IP: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"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}}\"?",
"client_blocked": "Klien \"{{ip}}\" sukses di blokir",
"client_unblocked": "Klien \"{{ip}}\" sukses di unblock",
"static_ip": "Alamat IP statis",
"static_ip_desc": "AdGuard Home adalah server jadi perlu alamat IP statis agar berfungsi dengan benar. Jika tidak, pada titik tertentu, router Anda dapat menetapkan alamat IP yang berbeda untuk perangkat ini.",
"set_static_ip": "Atur alamat IP statik",
"install_static_ok": "Kabar baik! Alamat IP statis sudah dikonfigurasi",
"install_static_error": "AdGuard Home tidak dapat mengonfigurasinya secara otomatis untuk antarmuka jaringan ini. Silakan cari instruksi tentang cara melakukan ini secara manual.",
"install_static_configure": "Kami mendeteksi alamat IP dinamis digunakan - <0>{{ip}}</0>. Anda ingin menggunakannya sebagai alamat statis Anda?",
"confirm_static_ip": "AdGuard Home akan mengonfigurasi {{ip}} menjadi alamat IP statis Anda. Anda ingin melanjutkan?",
"list_updated": "{{count}} daftar terbarui",
"list_updated_plural": "{{count}} daftar terbarui",
"dnssec_enable": "Aktifkan DNSSEC",
"dnssec_enable_desc": "Atur bendera DNSSEC di permintaan keluar DNS dan periksa hasilnya (resolver berkemampuan DNSSEC diperlukan)",
"validated_with_dnssec": "Tervalidasi dengan DNSSEC",
"all_queries": "Semua permintaan",
"show_blocked_responses": "Diblokir",
"show_whitelisted_responses": "Dalam Daftar Putih",
"show_processed_responses": "Terproses",
"blocked_safebrowsing": "Terblokir oleh Safebrowsing",
"blocked_adult_websites": "Situs Dewasa Terblokir",
"blocked_threats": "Blokir Ancaman",
"allowed": "Dibolehkan",
"filtered": "Tersaring",
"rewritten": "Tulis ulang",
"safe_search": "Pencarian aman",
"blocklist": "Daftar blokir",
"milliseconds_abbreviation": "ms"
"milliseconds_abbreviation": "ms",
"cache_size": "Ukuran cache",
"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 (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",
"filter_category_other": "Lainnya",
"filter_category_general_desc": "Daftar yang memblokir pelacakan dan iklan di sebagian besar perangkat",
"filter_category_security_desc": "Daftar yang khusus pada pemblokiran malware, phishing, atau domain penipuan",
"filter_category_regional_desc": "Daftar yang berfokus pada iklan regional dan server pelacakan",
"filter_category_other_desc": "Daftar hitam lain",
"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.",
"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,26 +1,31 @@
{
"client_settings": "Impostazioni client",
"example_upstream_reserved": "Puoi specificare un server DNS<0>per uno specifico dominio(i)</0>",
"upstream_parallel": "Usa le query parallele per accelerare la risoluzione interrogando simultaneamente tutti i server",
"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. AdGuardHome userà l'algoritmo soppesato casualmente per scegliere il server così che quello più veloce sarà usato più spesso.",
"bootstrap_dns": "Server DNS di avvio",
"bootstrap_dns_desc": "Server DNS usati per risolvere gli indirizzi IP dei risolutori DoH/DoT specificati come upstreams.",
"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 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 abilitato",
"disabled_dhcp": "Server DHCP disabilitato",
"enabled_dhcp": "Server DHCP attivo",
"disabled_dhcp": "Server DHCP disattivato",
"unavailable_dhcp": "DHCP non disponibile",
"unavailable_dhcp_desc": "AdGuard Home non può eseguire un server DHCP sul tuo sistema operativo",
"dhcp_title": "Server DHCP",
"dhcp_description": "Se il tuo router non supporta la configurazione delle impostazioni del DHCP puoi usare il server DHCP incluso in AdGuard.",
"dhcp_enable": "Abilita server DHCP",
"dhcp_disable": "Disabilita server DHCP",
"dhcp_description": "Se il tuo router non supporta la configurazione delle impostazioni del DHCP puoi utilizzare il server DHCP incluso in AdGuard.",
"dhcp_enable": "Attiva server DHCP",
"dhcp_disable": "Disattiva server DHCP",
"dhcp_not_found": "Nessun server DHCP attivo trovato nella rete. Puoi attivare il server DHCP built-in senza problemi.",
"dhcp_found": "Trovati server DHCP attivi nella rete. Non è consigliato attivare il server DHCP built-in",
"dhcp_leases": "Leases DHCP",
"dhcp_static_leases": "Leases DHCP statici",
"dhcp_leases_not_found": "Nessun lease DHCP trovato",
"dhcp_config_saved": "Configurazione server DHCP salvata",
"dhcp_ipv4_settings": "Impostazioni DHCP IPv4",
"dhcp_ipv6_settings": "Impostazioni DHCP IPv6",
"form_error_required": "Campo richiesto",
"form_error_ip4_format": "Formato IPv4 non valido",
"form_error_ip6_format": "Formato IPv6 non valido",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Formato ID cliente non valido",
"form_error_positive": "Deve essere maggiore di 0",
"form_error_negative": "Deve essere maggiore o uguale a 0 (zero)",
"range_end_error": "Deve essere maggiore dell'intervallo di inizio",
"dhcp_form_gateway_input": "IP Gateway",
"dhcp_form_subnet_input": "Subnet mask",
"dhcp_form_range_title": "Range indirizzi IP",
@@ -42,10 +48,10 @@
"ip": "IP",
"dhcp_table_hostname": "Nome host",
"dhcp_table_expires": "Scaduto",
"dhcp_warning": "Se si desidera abilitare il server DHCP integrato, assicurarsi che non vi siano altri server DHCP attivi. Altrimenti, possono sussistere problemi di rete per i dispositivi collegati!",
"dhcp_warning": "Se si desidera attivare il server DHCP integrato, assicurarsi che non vi siano altri server DHCP attivi. Altrimenti, possono sussistere problemi di rete per i dispositivi collegati!",
"dhcp_error": "Impossibile determinare se è presente un altro server DHCP nella rete.",
"dhcp_static_ip_error": "Pe rutilizzare un server DHCP, bisogna impostare un indirizzo IP statico. Non siamo riusciti a determinare se questa interfaccia di rete sia configurata per utilizzare un indirizzo IP statico. Per favore impostare un indirizzo IP statico manualmente.",
"dhcp_dynamic_ip_found": "Il tuo sistema utilizza indirizzi IP dinamici per questa interfaccia <0>{{interfaceName}}</0>. Per utilizzare un server DHCP bisogna impostare un indirizzo IP statico. Il tuo indirizzo attuale è <0>{{ipAddress}}</0>. Imposteremo automaticamente questo indirizzo come statico premendo il pulsante Abilita DHCP",
"dhcp_dynamic_ip_found": "Il tuo sistema utilizza indirizzi IP dinamici per questa interfaccia <0>{{interfaceName}}</0>. Per utilizzare un server DHCP bisogna impostare un indirizzo IP statico. Il tuo indirizzo attuale è <0>{{ipAddress}}</0>. Imposteremo automaticamente questo indirizzo come statico premendo il pulsante Attiva DHCP.",
"dhcp_lease_added": "Lease statici \"{{key}}\" aggiunti correttamente",
"dhcp_lease_deleted": "Lease statico \"{{key}}\" eliminato correttamente",
"dhcp_new_static_lease": "Nuovo lease statico",
@@ -66,11 +72,11 @@
"settings": "Impostazioni",
"filters": "Filtri",
"filter": "Filtro",
"query_log": "Query Log",
"query_log": "Registro Richieste",
"compact": "Compatto",
"nothing_found": "Non è stato trovato nulla",
"faq": "FAQ",
"version": "versione",
"version": "Versione",
"address": "Indirizzo",
"protocol": "Protocollo",
"on": "ATTIVO",
@@ -78,13 +84,13 @@
"copyright": "Copyright",
"homepage": "Pagina iniziale",
"report_an_issue": "Segnala un problema",
"privacy_policy": "Politica sulla privacy",
"enable_protection": "Abilita protezione",
"enabled_protection": "Protezione abilitata",
"disable_protection": "Disabilita protezione",
"disabled_protection": "Protezione disabilitata",
"privacy_policy": "Politica sulla riservatezza",
"enable_protection": "Attiva protezione",
"enabled_protection": "Protezione attiva",
"disable_protection": "Disattiva protezione",
"disabled_protection": "Protezione disattivata",
"refresh_statics": "Aggiorna statistiche",
"dns_query": "Query DNS",
"dns_query": "Richieste DNS",
"blocked_by": "<0>Bloccato dai Filtri</0>",
"stats_malware_phishing": "Malware/phishing bloccati",
"stats_adult": "Siti per adulti bloccati",
@@ -98,47 +104,48 @@
"top_clients": "Client più utilizzati",
"no_clients_found": "Nessun client trovato",
"general_statistics": "Statistiche generali",
"number_of_dns_query_days": "Numero delle query DNS elaborate negli ultimi {{count}} giorni",
"number_of_dns_query_days_plural": "Numero delle query DNS elaborate negli ultimi {{count}} giorni",
"number_of_dns_query_24_hours": "Numero di query DNS elaborate nelle ultime 24 ore",
"number_of_dns_query_blocked_24_hours": "Numero di richieste DNS bloccate dai filtri adblock e dalle liste di host bloccati",
"number_of_dns_query_blocked_24_hours_by_sec": "Numero di richieste DNS bloccate dal modulo AdGuard browsing security",
"number_of_dns_query_days": "Numero di richieste DNS elaborate negli ultimi {{count}} giorni",
"number_of_dns_query_days_plural": "Numero di richieste DNS elaborate negli ultimi {{count}} giorni",
"number_of_dns_query_24_hours": "Numero di richieste DNS elaborate nelle ultime 24 ore",
"number_of_dns_query_blocked_24_hours": "Numero di richieste DNS bloccate dai filtri per annunci e dalle liste di host bloccati",
"number_of_dns_query_blocked_24_hours_by_sec": "Numero di richieste DNS bloccate dal modulo AdGuard \"sicurezza di navigazione\"",
"number_of_dns_query_blocked_24_hours_adult": "Numero di siti per adulti bloccati",
"enforced_save_search": "Ricerca sicura forzata",
"number_of_dns_query_to_safe_search": "Numero di richieste DNS dai motori di ricerca per i quali la Ricerca Sicura è stata forzata",
"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>.",
"use_adguard_browsing_sec": "Usa il servizio AdGuard Browsing Security",
"use_adguard_browsing_sec_hint": "AdGuard Home controllerà se il dominio è stato bloccato dal servizio web browsing security. Per eseguire il controllo userà delle API privacy-friendly: verrà inviato al server solo un breve prefisso dell'hash SHA256 del nome del dominio.",
"use_adguard_parental": "Usa il servizio parental control di AdGuard",
"use_adguard_parental_hint": "AdGuard Home controllerà se il dominio contiene materiale per adulti. Usa le stesse API privacy-friendly del servizio web browsing security.",
"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",
"use_adguard_parental_hint": "AdGuard Home verificherà se il dominio contiene materiale per adulti. Utilizza le stesse API privacy-friendly del servizio web \"sicurezza di navigazione\".",
"enforce_safe_search": "Forza ricerca sicura",
"enforce_save_search_hint": "AdGuard Home può forzare la ricerca sicura sui seguenti motori di ricerca: Google, YouTube, Bing e Yandex",
"no_servers_specified": "Nessun server specificato",
"general_settings": "Impostazioni generali",
"dns_settings": "Impostazioni DNS",
"dns_blocklists": "Lista di blocco DNS",
"dns_allowlists": "Lista DNS consentiti",
"dns_blocklists_desc": "AdGuard Home bloccherà i domini che corrispondenti alla lista di blocco.",
"dns_blocklists": "Lista Nera DNS",
"dns_allowlists": "Lista Bianca DNS",
"dns_blocklists_desc": "AdGuard Home bloccherà i domini che corrispondenti alla lista nera.",
"dns_allowlists_desc": "I domini DNS consentiti saranno consentiti anche se sono nella lista di blocco.",
"custom_filtering_rules": "Regole filtri personalizzati",
"encryption_settings": "Impostazioni di criptazione",
"encryption_settings": "Impostazioni di crittografia",
"dhcp_settings": "Impostazioni DHCP",
"upstream_dns": "Server DNS upstream",
"upstream_dns_hint": "Se lasci vuoto questo campo, AdGuard Home imposterà i <a href='https://1.1.1.1/' target='_blank'>DNS di Cloudflare</a> come upstream. Inserisci il prefisso tls:// per i server con DNS over TLS",
"upstream_dns_help": "Immetti un indirizzo server per linea. <a>Per saperne di più</a> sulla configurazione dei server DNS upstream.",
"upstream_dns_configured_in_file": "Configurato su {{path}}",
"test_upstream_btn": "Testa gli upstream",
"upstreams": "Upstream",
"apply_btn": "Applica",
"disabled_filtering_toast": "Disabilita filtri",
"enabled_filtering_toast": "Abilita filtri",
"disabled_safe_browsing_toast": "Disabilita navigazione sicura",
"enabled_safe_browsing_toast": "Abilita navigazione sicura",
"disabled_parental_toast": "Disabilita il filtro famiglia",
"enabled_parental_toast": "Abilita il filtro famiglia",
"disabled_safe_search_toast": "Disabilita Ricerca Sicura",
"enabled_save_search_toast": "Abilita Ricerca Sicura",
"disabled_filtering_toast": "Disattiva filtri",
"enabled_filtering_toast": "Attiva filtri",
"disabled_safe_browsing_toast": "Disattiva navigazione sicura",
"enabled_safe_browsing_toast": "Attiva navigazione sicura",
"disabled_parental_toast": "Disattiva il Controllo Parentale",
"enabled_parental_toast": "Attiva Controllo Parentale",
"disabled_safe_search_toast": "Disattiva Ricerca Sicura",
"enabled_save_search_toast": "Attiva Ricerca Sicura",
"enabled_table_header": "Attivo",
"name_table_header": "Nome",
"list_url_table_header": "Elenco URL",
@@ -149,9 +156,9 @@
"edit_table_action": "Modifica",
"delete_table_action": "Elimina",
"elapsed": "Trascorso",
"filters_and_hosts_hint": "AdGuard Home è in grado di comprendere la sintassi delle regole di adblock o quelle dei file hosts",
"filters_and_hosts_hint": "AdGuard Home è in grado di comprendere la sintassi delle regole di blocco per annunci o quelle dei file hosts.",
"no_blocklist_added": "Non è stata aggiunta alcuna lista di blocco",
"no_whitelist_added": "Non è stata aggiunta alcuna lista dei consentiti",
"no_whitelist_added": "Non è stata aggiunta alcuna lista bianca",
"add_blocklist": "Aggiungi lista di blocco",
"add_allowlist": "Aggiungi lista dei consentiti",
"cancel_btn": "Annulla",
@@ -169,7 +176,7 @@
"form_error_url_format": "Formato url non valido",
"form_error_url_or_path_format": "URL o percorso assoluto della lista non valido",
"custom_filter_rules": "Regole filtri personalizzate",
"custom_filter_rules_hint": "Inserisci una regola per riga. Puoi usare la sintassi delle regole di adblock o quelle dei file hosts.",
"custom_filter_rules_hint": "Inserisci una regola per riga. Puoi utilizzare la sintassi delle regole di blocco per annunci o quelle dei file hosts.",
"examples_title": "Esempi",
"example_meaning_filter_block": "blocca accesso al dominio example.org e a tutti i suoi sottodomini",
"example_meaning_filter_whitelist": "permette l'accesso al dominio example.org e a tutti i suoi sottodimini",
@@ -181,14 +188,19 @@
"example_upstream_regular": "DNS regolari (via UDP)",
"example_upstream_dot": "<0>DNS_over_TLS</0> crittografato",
"example_upstream_doh": "<0>DNS-over-HTTPS</0> crittografato",
"example_upstream_sdns": "puoi usare <0>DNS Stamps</0> per <1>DNSCrypt</1> oppure dei resolver con <2>DNS-over-HTTPS</2>",
"example_upstream_doq": "<0>DNS_over_QUIC</0> crittografato",
"example_upstream_sdns": "puoi utilizzare <0>DNS Stamps</0> per <1>DNSCrypt</1> oppure dei resolver con <2>DNS-over-HTTPS</2>",
"example_upstream_tcp": "DNS regolari (via TCP)",
"all_lists_up_to_date_toast": "Tutte le liste sono aggiornate",
"updated_upstream_dns_toast": "Server DNS upstream aggiornati",
"dns_test_ok_toast": "I server DNS specificati funzionano correttamente",
"dns_test_not_ok_toast": "Server \"{{key}}\": non può essere usato, assicurati di averlo digitato correttamente",
"dns_test_not_ok_toast": "Server \"{{key}}\": non può essere utilizzato, assicurati di averlo digitato correttamente",
"unblock": "Sblocca",
"block": "Blocca",
"disallow_this_client": "Blocca questo client",
"allow_this_client": "Consenti questo client",
"block_for_this_client_only": "Blocca solo per questo client",
"unblock_for_this_client_only": "Sblocca solo per questo client",
"time_table_header": "Ora",
"date": "Data",
"domain_name_table_header": "Nome dominio",
@@ -200,7 +212,7 @@
"empty_response_status": "Vuoto",
"show_all_filter_type": "Mostra tutti",
"show_filtered_type": "Mostra filtrati",
"no_logs_found": "Nessun log trovato",
"no_logs_found": "Nessun registro trovato",
"refresh_btn": "Aggiorna",
"previous_btn": "Precedente",
"next_btn": "Successivo",
@@ -208,43 +220,47 @@
"page_table_footer_text": "Pagina",
"rows_table_footer_text": "righe",
"updated_custom_filtering_toast": "Le regole dei filtri personalizzate sono state aggiornate",
"rule_removed_from_custom_filtering_toast": "Regola rimossa dalle regole dei filtri personalizzate",
"rule_added_to_custom_filtering_toast": "Regola aggiunta alle regole dei filtri personalizzate",
"query_log_response_status": "Status: {{value}}",
"rule_removed_from_custom_filtering_toast": "Regola rimossa dalle regole dei filtri personalizzate: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regola aggiunta alle regole dei filtri personalizzate: {{rule}}",
"query_log_response_status": "Stato: {{value}}",
"query_log_filtered": "Filtrato da {{filter}}",
"query_log_confirm_clear": "Sei sicuro di voler eliminare la query log?",
"query_log_cleared": "La query log è stata cancellata correttamente",
"query_log_updated": "Il log query è stato aggiornato con successo",
"query_log_clear": "Cancella query logs",
"query_log_retention": "Ritenzione query logs",
"query_log_enable": "Abilita log",
"query_log_configuration": "Configurazione logs",
"query_log_disabled": "La query log è stata disabilitata e può essere configurata nel <0>impostazioni</0>",
"query_log_strict_search": "Utilizzare le virgolette doppie per la ricerca rigorosa",
"query_log_retention_confirm": "Sei sicuro di voler modificare il registro di query? Se si diminuisce il valore di intervallo, alcuni dati saranno persi",
"query_log_confirm_clear": "Sei sicuro di voler eliminare il registro richieste?",
"query_log_cleared": "Il registro richieste è stato correttamente cancellato",
"query_log_updated": "Il registro richieste è stato aggiornato con successo",
"query_log_clear": "Cancella registri richieste",
"query_log_retention": "Conservazione dei registri richieste",
"query_log_enable": "Attiva registro",
"query_log_configuration": "Configurazione registri",
"query_log_disabled": "Il registro richieste è stato disattivato e può essere configurata dalle <0>impostazioni</0>",
"query_log_strict_search": "Utilizzare le doppie virgolette per una ricerca precisa",
"query_log_retention_confirm": "Sei sicuro di voler modificare il registro delle richieste? Se il valore di intervallo dovesse diminuire, alcuni dati andranno persi",
"anonymize_client_ip": "Anonimizza client IP",
"anonymize_client_ip_desc": "Non salvare l'indirizzo IP completo del client nei log e nelle statistiche",
"anonymize_client_ip_desc": "Non salvare l'indirizzo IP completo del client nel registro e nelle statistiche",
"dns_config": "Configurazione server DNS",
"dns_cache_config": "Configurazione cache DNS",
"dns_cache_config_desc": "Qui puoi configurare la cache DNS",
"blocking_mode": "Modalità di blocco",
"default": "Predefinito",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Nessun IP",
"custom_ip": "IP personalizzato",
"blocking_ipv4": "Blocca IPv4",
"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",
"edns_enable": "Abilita client di sottorete EDNS",
"edns_cs_desc": "Se abilitato, AdGuard Home invierà le sottoreti cdei client ai server DNS.",
"rate_limit_desc": "Il numero di richieste al secondo chheun singolo client può fare (0: illimitato)",
"edns_enable": "Attiva client di sottorete EDNS",
"edns_cs_desc": "Se attivato, AdGuard Home invierà le sottoreti dei client ai server DNS.",
"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 NXDOMAIN quando bloccato da una regola di Adblock; 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)",
"blocking_mode_custom_ip": "IP personalizzato: Rispondi con un indirizzo IP impostato manualmente",
@@ -286,12 +302,12 @@
"install_devices_router_list_2": "Trova le impostazioni DHCP / DNS. Cerca le lettere DNS accanto a un campo che consente due o tre serie di numeri, ciascuno suddiviso in quattro gruppi di 1-3 cifre.",
"install_devices_router_list_3": "Inserisci qui gli indirizzi del tuo server AdGuard Home.",
"install_devices_router_list_4": "Non puoi impostare un server DNS personalizzato o alcun tipo di router. In questi casi potrebbe essere di aiuto impostare la pagina principale di AdGuard come <0>server DHCP</0>. In alternativa, dovresti cercare sul manuale il modo per personalizzare i server DNS per il tuo particolare modello di router.",
"install_devices_windows_list_1": "Aprire il Pannello di controllo tramite il menu Start o la ricerca di Windows.",
"install_devices_windows_list_1": "Apri il Pannello di controllo tramite il menu Start o la ricerca di Windows.",
"install_devices_windows_list_2": "Vai a Rete e categoria Internet e poi a Centro connessioni di rete e condivisione.",
"install_devices_windows_list_3": "Sul lato sinistro dello schermo, trova le impostazioni della scheda Cambia e fai clic su di esso.",
"install_devices_windows_list_4": "Seleziona la tua connessione attiva, fai clic destro su di essa e scegli Proprietà.",
"install_devices_windows_list_5": "Trova Protocollo Internet versione 4 (TCP / IP) nell'elenco, selezionalo e quindi fai nuovamente clic su Proprietà.",
"install_devices_windows_list_6": "Scegli Usa i seguenti indirizzi del server DNS e inserisci gli indirizzi del tuo server AdGuard Home.",
"install_devices_windows_list_6": "Scegli \"Utilizza i seguenti indirizzi del server DNS\" ed inserisci gli indirizzi del tuo server AdGuard Home.",
"install_devices_macos_list_1": "Fai clic sull'icona Apple e vai su Preferenze di Sistema.",
"install_devices_macos_list_2": "Clicca sulla rete.",
"install_devices_macos_list_3": "Seleziona la prima connessione nel tuo elenco e fai clic su Avanzate.",
@@ -302,7 +318,7 @@
"install_devices_android_list_4": "Su alcuni dispositivi, potrebbe essere necessario selezionare la casella Avanzate per visualizzare ulteriori impostazioni. Per regolare le impostazioni del tuo DNS Android, dovrai cambiare le impostazioni IP da DHCP a Statico.",
"install_devices_android_list_5": "Cambia i valori DNS 1 e DNS 2 negli indirizzi del tuo server AdGuard Home.",
"install_devices_ios_list_1": "Dalla schermata principale, tocca Impostazioni.",
"install_devices_ios_list_2": "Scegli Wi-Fi nel menu a sinistra (impossibile configurare DNS per reti mobili).",
"install_devices_ios_list_2": "Scegli Wi-Fi nel menu a sinistra (impossibile configurare DNS per reti mobile).",
"install_devices_ios_list_3": "Toccare il nome della rete attualmente attiva.",
"install_devices_ios_list_4": "Nel campo DNS inserisci gli indirizzi del tuo server AdGuard Home.",
"get_started": "Inizia",
@@ -321,15 +337,17 @@
"encryption_https_desc": "Se la porta HTTPS è configurata, l'interfaccia di amministrazione di AdGuard Home sarà accessibile tramite HTTPS e fornirà anche DNS-over-HTTPS nella posizione \"/ dns-query\".",
"encryption_dot": "DNS-su porta-TLS",
"encryption_dot_desc": "Se questa porta è configurata, AdGuard Home eseguirà un server DNS-over-TLS su questa porta.",
"encryption_doq": "DNS-su porta-QUIC",
"encryption_doq_desc": "Se questa porta è configurata, AdGuard Home eseguirà un server DNS su porta QUIC. Questa opzione è sperimentale e potrebbe non risultare affidabile. Inoltre, al momento non sono molti i client a supportarla.",
"encryption_certificates": "Certificati",
"encryption_certificates_desc": "Per utilizzare la crittografia, è necessario fornire una catena di certificati SSL valida per il proprio dominio. Puoi ottenere un certificato gratuito su <0> {{link}} </ 0> o puoi acquistarlo da una delle Autorità di certificazione attendibili.",
"encryption_certificates_input": "Copia / incolla qui i certificati codificati PEM.",
"encryption_status": "Stato",
"encryption_expire": "Scaduto",
"encryption_key": "Chiave privata",
"encryption_key_input": "Copia / incolla qui la tua chiave privata codificata PEM del tuo certificato.",
"encryption_enable": "Abilita crittografia (HTTPS, DNS-su-HTTPS e DNS-su-TLS)",
"encryption_enable_desc": "Se la crittografia è abilitata, l'interfaccia di amministrazione di AdGuard Home funzionerà su HTTPS e il server DNS ascolterà le richieste su DNS-over-HTTPS e DNS-over-TLS.",
"encryption_key_input": "Copia/Incolla qui la tua chiave privata codificata PEM per il tuo certificato.",
"encryption_enable": "Attiva crittografia (HTTPS, DNS-su-HTTPS e DNS-su-TLS)",
"encryption_enable_desc": "Se la crittografia è attiva, l'interfaccia di amministrazione di AdGuard Home funzionerà su HTTPS e il server DNS ascolterà le richieste su DNS-over-HTTPS e DNS-over-TLS.",
"encryption_chain_valid": "La catena di certificati è valida",
"encryption_chain_invalid": "La catena di certificati non è valida",
"encryption_key_valid": "Questa è una chiave privata {{type}} valida",
@@ -354,7 +372,7 @@
"fix": "Risolvi",
"dns_providers": "Qui c'è una <0>list di provider DNS</0> da cui scegliere",
"update_now": "Aggiorna ora",
"update_failed": "L' auto aggiornamento è fallito. Perfavore <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>segui questi passi</a>per aggiornare manualmente.",
"update_failed": "Aggiornamento automatico non riuscito. Si prega di <a>seguire questi passi</a>per aggiornare manualmente.",
"processing_update": "Perfavore aspetta, AdGuard Home si sta aggiornando",
"clients_title": "Client",
"clients_desc": "Configura i dispositivi connessi ad AdGuard Home",
@@ -375,7 +393,7 @@
"form_add_id": "Aggiungi identificatore",
"form_client_name": "Inserisci nome client",
"name": "Nome",
"client_global_settings": "Usa le impostazioni globali",
"client_global_settings": "Utilizza le impostazioni globali",
"client_deleted": "Client \"{{key}}\" eliminato correttamente",
"client_added": "Client \"{{key}}\" aggiunto correttamente",
"client_updated": "Client \"{{key}}\" aggiornato correttamente",
@@ -391,7 +409,7 @@
"access_disallowed_title": "Client non permessi",
"access_disallowed_desc": "Una lista in CIDR o indirizzi IP. Se configurata AdGuard Home non accetterà richieste da questi indirizzi ip.",
"access_blocked_title": "Domini bloccati",
"access_blocked_desc": "Non confondere questi elementi con i filtri. AdGuard Home eliminerà le query DNS con questi domini nell'elaborazione della query.",
"access_blocked_desc": "Non confondere questi elementi con i filtri. AdGuard Home eliminerà le richieste DNS con questi domini in fase di elaborazione della richiesta.",
"access_settings_saved": "Impostazioni di accesso salvate correttamente",
"updates_checked": "Aggiornamenti controllati con successo",
"updates_version_equal": "AdGuard Home è aggiornato",
@@ -399,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.",
@@ -452,18 +471,18 @@
"filter_removed_successfully": "La lista è stata correttamente rimossa",
"filter_updated": "Il filtro è stato aggiornato correttamente",
"statistics_configuration": "Configurazione delle statistiche",
"statistics_retention": "Conservazione statistiche",
"statistics_retention_desc": "Se si diminuisce il valore di intervallo, alcuni dati saranno persi",
"statistics_retention": "Conservazione delle statistiche",
"statistics_retention_desc": "Se il valore di intervallo dovesse diminuire, alcuni dati andranno persi",
"statistics_clear": " Azzera statistiche",
"statistics_clear_confirm": "Sei sicuro di voler azzerare le statistiche?",
"statistics_retention_confirm": "Sei sicuro di modificare la conservazione statistiche? Se si diminuisce il valore di intervallo, alcuni dati saranno persi",
"statistics_retention_confirm": "Sei sicuro di voler modificare la conservazione delle statistiche? Se il valore di intervallo dovesse diminuire, alcuni dati andranno persi",
"statistics_cleared": "Statistiche azzerate correttamente",
"interval_hours": "{{count}} ora",
"interval_hours_plural": "{{count}} ore",
"filters_configuration": "Configurazione filtri",
"filters_enable": "Abilita i filtri",
"filters_enable": "Attiva i filtri",
"filters_interval": "Intervallo aggiornamento filtri",
"disabled": "Disabilitato",
"disabled": "Disattivato",
"username_label": "Nome utente",
"username_placeholder": "Inserisci nome utente",
"password_label": "Password",
@@ -478,8 +497,9 @@
"network": "Rete",
"descr": "Descrizione",
"whois": "Chi è",
"filtering_rules_learn_more": "<0>Leggi altro</0> su come creare i tuoi host blacklist.",
"filtering_rules_learn_more": "<0>Leggi altro</0> su come creare le tue liste host.",
"blocked_by_response": "Bloccato per CNAME o IP in risposta",
"blocked_by_cname_or_ip": "Bloccato da CNAME o IP",
"try_again": "Riprova",
"domain_desc": "Inserire il nome di dominio o carattere jolly che si vuole riscrivere.",
"example_rewrite_domain": "riscrivi risposte per questo dominio soltanto.",
@@ -488,8 +508,8 @@
"rewrite_domain_name": "Nome dominio: aggiungi una registrazione CNAME",
"rewrite_A": "<0>A</0>: valore speciale, mantieni registrazioni <0>A</0> dall'upstream",
"rewrite_AAAA": "<0>AAAA</0>: valore speciale, mantieni registrazioni <0>AAAA</0> dall'upstream",
"disable_ipv6": "Disabilita IPv6",
"disable_ipv6_desc": "Se questa funzione è abilitata, tutte le query DNS per gli indirizzi IPv6 (tipo AAAA) verranno eliminate.",
"disable_ipv6": "Disattiva IPv6",
"disable_ipv6_desc": "Se questa funzionalità attiva, tutte le richieste DNS per gli indirizzi IPv6 (tipo AAAA) verranno eliminate.",
"fastest_addr": "Indirizzo IP più veloce",
"fastest_addr_desc": "Interroga tutti i server DNS ed ottieni l'indirizzo IP più veloce tra tutte le risposte",
"autofix_warning_text": "Se fai clic su \"Correggi\", AdGuardHome configurerà il tuo sistema per utilizzare il server DNS AdGuardHome.",
@@ -505,12 +525,13 @@
"filtered_custom_rules": "Filtrato dalle regole filtro personalizzate",
"choose_from_list": "Scegli dalla lista",
"add_custom_list": "Aggiungi lista personalizzata",
"host_whitelisted": "L'host è presente nella whitelist",
"host_whitelisted": "L'host è stato aggiunto alla lista bianca",
"check_ip": "Indirizzi IP: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"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}}\"?",
@@ -521,15 +542,16 @@
"set_static_ip": "Imposta un indirizzo IP statico",
"install_static_ok": "Buone notizie! L'indirizzo IP statico è già configurato",
"install_static_error": "AdGuard Home non può configurarlo automaticamente per questa interfaccia di rete. Si prega di cercare un'istruzione su come farlo manualmente.",
"install_static_configure": "Abbiamo rilevato che viene utilizzato un indirizzo IP dinamico - <0> {{ip}} </0>. Vuoi usarlo come indirizzo statico?",
"confirm_static_ip": "AdGuard Home configurerà {{ip}} come indirizzo IP statico. Vuoi procedere?",
"install_static_configure": "Abbiamo rilevato l'utilizzo di un indirizzo IP dinamico - <0> {{ip}} </0>. Desideri impostarlo come indirizzo statico?",
"confirm_static_ip": "AdGuard Home configurerà {{ip}} come indirizzo IP statico. Desideri procedere?",
"list_updated": "{{count}} lista aggiornata",
"list_updated_plural": "{{count}} liste aggiornate",
"dnssec_enable": "Abilita DNSSEC",
"dnssec_enable_desc": "Imposta la spunta DNSSEC nelle interrogazioni DNS in uscita e verifica il risultato (è richiesta l'attivazione del risolutore DNSSEC)",
"dnssec_enable": "Attiva DNSSEC",
"dnssec_enable_desc": "Spunta l'opzione DNSSEC nelle interrogazioni DNS in uscita e verifica il risultato (è richiesta l'attivazione del risolutore DNSSEC)",
"validated_with_dnssec": "Verificato con DNSSEC",
"all_queries": "Tutte le richieste",
"show_blocked_responses": "Bloccato",
"show_whitelisted_responses": "Nella whitelist",
"show_whitelisted_responses": "Nella Lista Bianca",
"show_processed_responses": "Processato",
"blocked_safebrowsing": "Blocco Navigazione sicura",
"blocked_adult_websites": "Siti per adulti bloccati",
@@ -544,20 +566,25 @@
"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 valore TTL (minimo) ricevuto dall'upstream del server. Questo valore non può superare 3600 (1 ora)",
"cache_ttl_max_override_desc": "Sovrascrivi valore TTL (massimo) ricevuto dall'upstream del server",
"min_exceeds_max_value": "Il valore minimo eccede quello massimo",
"value_not_larger_than": "Il valore non può essere maggiore di {{maximum}}",
"filter_category_general": "Generale",
"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",
"filter_category_regional": "Regionale",
"filter_category_other": "Altro",
"filter_category_general_desc": "Liste che bloccano tracciamenti e pubblicità sulla maggioranza dei dispositivi",
"filter_category_general_desc": "Liste per blocco tracciamenti e annunci sulla maggioranza dei dispositivi",
"filter_category_security_desc": "Liste specializzate sul blocco di malware, phishing o domini scam",
"filter_category_regional_desc": "Liste focalizzare su pubblicità regionali e server traccianti",
"filter_category_regional_desc": "Liste focalizzate su annunci regionali e server traccianti",
"filter_category_other_desc": "Altre liste di blocco",
"click_to_view_queries": "Clicca per visualizzare query"
"setup_config_to_enable_dhcp_server": "Configurazione dell'installazione per abilitare il server DHCP",
"original_response": "Responso originale",
"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

@@ -11,6 +11,8 @@
"save_config": "設定を保存する",
"enabled_dhcp": "DHCPサーバを有効にしました",
"disabled_dhcp": "DHCPサーバを無効にしました",
"unavailable_dhcp": "DHCPは利用できません",
"unavailable_dhcp_desc": "AdGuard Homeはお使いのOS上でDHCPサーバを実行できません。",
"dhcp_title": "DHCPサーバ実験的",
"dhcp_description": "あなたのルータがDHCPの設定を提供していないのなら、AdGuardに内蔵されているDHCPサーバを利用できます。",
"dhcp_enable": "DHCPサーバを有効にする",
@@ -21,6 +23,8 @@
"dhcp_static_leases": "DHCP静的割り当て",
"dhcp_leases_not_found": "DHCP割当はありません",
"dhcp_config_saved": "DHCP設定の保存に成功しました",
"dhcp_ipv4_settings": "DHCP IPv4 設定",
"dhcp_ipv6_settings": "DHCP IPv6 設定",
"form_error_required": "必須項目",
"form_error_ip4_format": "IPv4フォーマットではありません",
"form_error_ip6_format": "IPv6フォーマットではありません",
@@ -29,6 +33,7 @@
"form_error_client_id_format": "Client IDの形式が無効です",
"form_error_positive": "0より大きい必要があります",
"form_error_negative": "0以上である必要があります",
"range_end_error": "範囲開始よりも大きくなければなりません",
"dhcp_form_gateway_input": "ゲートウェイIP",
"dhcp_form_subnet_input": "サブネットマスク",
"dhcp_form_range_title": "IPアドレスの範囲",
@@ -109,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ペアレンタルコントロール・ウェブサービスを使用する",
@@ -127,7 +132,8 @@
"encryption_settings": "暗号化設定",
"dhcp_settings": "DHCP設定",
"upstream_dns": "上流DNSサーバ",
"upstream_dns_hint": "このフィールドを未入力のままにすると、AdGuard Homeは上流として<a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a>を使用します。DNS over TLSサーバには、「tls://」プレフィックスを使用してください。",
"upstream_dns_help": "サーバのアドレスは1行に1つずつ入力してください。上流DNSサーバの構成についての詳細は<a>こちら</a>をご確認ください。",
"upstream_dns_configured_in_file": "{{path}} にて設定されています",
"test_upstream_btn": "上流サーバをテストする",
"upstreams": "上流",
"apply_btn": "適用する",
@@ -148,7 +154,7 @@
"request_table_header": "リクエスト",
"edit_table_action": "編集する",
"delete_table_action": "削除する",
"elapsed": "経過",
"elapsed": "経過時間",
"filters_and_hosts_hint": "AdGuard Homeは、基本的な広告ブロックルールとhostsファイルの構文を理解します。",
"no_blocklist_added": "ブロックリストには何も追加されていません",
"no_whitelist_added": "許可リストには何も追加されていません",
@@ -181,6 +187,7 @@
"example_upstream_regular": "通常のDNSUDPでの問い合わせ",
"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_sdns": "<1>DNSCrypt</1> または <2>DNS-over-HTTPS</2> リゾルバのために <0>DNS Stamps</0> を使えます",
"example_upstream_tcp": "通常のDNSTCPでの問い合わせ",
"all_lists_up_to_date_toast": "すべてのリストは既に最新です",
@@ -189,6 +196,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": "ドメイン名",
@@ -208,8 +219,8 @@
"page_table_footer_text": "ページ",
"rows_table_footer_text": "行",
"updated_custom_filtering_toast": "カスタム・フィルタリングルールを更新しました",
"rule_removed_from_custom_filtering_toast": "ルールをカスタム・フィルタリングルールから除去しました",
"rule_added_to_custom_filtering_toast": "ルールをカスタム・フィルタリングルールに追加しました",
"rule_removed_from_custom_filtering_toast": "ルールをカスタム・フィルタリングルールから除去しました {{rule}}",
"rule_added_to_custom_filtering_toast": "ルールをカスタム・フィルタリングルールに追加しました {{rule}}",
"query_log_response_status": "ステータス: {{value}}",
"query_log_filtered": "{{filter}}によるフィルタ",
"query_log_confirm_clear": "クエリ・ログ全体を消去してもよろしいですか?",
@@ -230,6 +241,7 @@
"blocking_mode": "ブロックモード",
"default": "デフォルト",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null IP",
"custom_ip": "カスタムIP",
"blocking_ipv4": "ブロック中のIPv4",
@@ -241,10 +253,11 @@
"rate_limit": "頻度制限",
"edns_enable": "EDNSクライアント・サブネットを有効にする",
"edns_cs_desc": "有効にすると、AdGuard HomeはクライアントのサブネットをDNSサーバへ送信します。",
"rate_limit_desc": "単一のクライアントに許可される1秒あたりのリクエスト数0無制限",
"rate_limit_desc": "単一のクライアントに対して許可される1秒あたりのリクエスト数「0」に設定すると無制限になります",
"blocking_ipv4_desc": "ブロックされたAリクエストに対して応答されるIPアドレス",
"blocking_ipv6_desc": "ブロックされたAAAAリクエストに対して応答されるIPアドレス",
"blocking_mode_default": "デフォルトAdblockスタイルのルールによってブロックされると、NXDOMAINで応答します。 /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の場合は::",
"blocking_mode_custom_ip": "カスタムIP手動で設定されたIPアドレスで応答します",
@@ -321,6 +334,8 @@
"encryption_https_desc": "HTTPSポートが設定されていると、AdGuard Home 管理インターフェースはHTTPS経由でアクセス可能になり、そして「/dns-query」の場所にDNS-over-HTTPSも提供されます。",
"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形式の証明書をコピーペーストしてください。",
@@ -354,7 +369,7 @@
"fix": "改善",
"dns_providers": "こちらは、選択可能な<0>既知のDNSプロバイダの一覧</0>です。",
"update_now": "今すぐ更新する",
"update_failed": "自動更新に失敗しました。手動で更新するには、<a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>手順に従って</a>ください。",
"update_failed": "自動更新に失敗しました。手動で更新するには、<a>手順に従って</a>ください。",
"processing_update": "AdGuard Homeを更新しています。しばらくお待ちください",
"clients_title": "クライアント",
"clients_desc": "AdGuard Homeに接続されているデバイスを設定します",
@@ -399,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>サポートを追加します。",
@@ -495,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": "クライアントのタグを選択する",
@@ -544,15 +559,9 @@
"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値最小を上書き。この値は36001時間を超えることはできません。",
"cache_ttl_max_override_desc": "上流サーバから受信したTTL値最大を上書き。",
"min_exceeds_max_value": "最小値が最大値を超えています",
"value_not_larger_than": "値は{{maximum}}より大きくすることはできません",
"cache_ttl_min_override": "最小TTLの上書き(秒単位)",
"cache_ttl_max_override": "最大TTLの上書き(秒単位)",
"ttl_cache_validation": "最小キャッシュTTL値は最大値以下にする必要があります",
"filter_category_general": "一般",
"filter_category_security": "セキュリティ",
"filter_category_regional": "地域別",
@@ -562,5 +571,8 @@
"filter_category_regional_desc": "それぞれの地域の広告と追跡サーバをターゲットするリストです。",
"filter_category_other_desc": "その他のブロックリストです。",
"original_response": "当初の応答",
"click_to_view_queries": "クエリを表示するにはクリックしてください"
"click_to_view_queries": "クエリを表示するにはクリックしてください",
"port_53_faq_link": "多くの場合、ポート53は \"DNSStubListener\" または \"systemd-resolved\" サービスによって利用されています。これを解決する方法については、<0>この手順</0>をお読みください。",
"adg_will_drop_dns_queries": "AdGuard Homeは、このクライアントからすべてのDNSクエリを落とします。",
"experimental": "実験用"
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "클라이언트 설정",
"example_upstream_reserved": "<0>특정 도메인에 대한</0> DNS 업스트림을 지정할 수 있습니다.",
"example_upstream_comment": "설명을 맞춤 지정할 수 있습니다.",
"upstream_parallel": "쿼리 처리 속도를 높이려면 모든 업스트림 서버에서 동시에 병렬 쿼리를 사용해주세요.",
"parallel_requests": "병렬 처리 요청",
"load_balancing": "로드 밸런싱",
@@ -11,6 +12,8 @@
"save_config": "구성 저장",
"enabled_dhcp": "DHCP 서버 활성화됨",
"disabled_dhcp": "DHCP 서버 비활성화됨",
"unavailable_dhcp": "DHCP가 사용 불가능합니다.",
"unavailable_dhcp_desc": "AdGuard Home은 이 OS에서 DHCP 서버를 구동할 수 없습니다.",
"dhcp_title": "DHCP 서버 (시험!)",
"dhcp_description": "라우터가 DHCP 설정을 제공하지 않으면 AdGuard의 자체 기본 제공 DHCP 서버를 사용할 수 있습니다.",
"dhcp_enable": "DHCP 서버 활성화",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP 고정 임대",
"dhcp_leases_not_found": "DHCP 임대를 찾을 수 없음",
"dhcp_config_saved": "DHCP 서버 설정 저장됨",
"dhcp_ipv4_settings": "DHCP IPv4 설정",
"dhcp_ipv6_settings": "DHCP IPv6 설정",
"form_error_required": "필수 필드",
"form_error_ip4_format": "잘못된 IPv4 형식",
"form_error_ip6_format": "잘못된 IPv6 형식",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "잘못된 클라이언트 ID 형식",
"form_error_positive": "0보다 커야 합니다",
"form_error_negative": "반드시 0 이상이여야 합니다",
"range_end_error": "입력 값은 범위의 시작 지점보다 큰 값 이여야 합니다.",
"dhcp_form_gateway_input": "게이트웨이 IP",
"dhcp_form_subnet_input": "서브넷 마스크",
"dhcp_form_range_title": "IP 주소 범위",
@@ -109,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 자녀 보호 웹 서비스 사용",
@@ -127,7 +133,8 @@
"encryption_settings": "암호화 설정",
"dhcp_settings": "DHCP 설정",
"upstream_dns": "업스트림 DNS 서버",
"upstream_dns_hint": "이 항목을 비워 두면 AdGuard Home에서 <a href='https://1.1.1.1/' target='_blank'> Cloudflare DNS </a>를 업스트림으로 사용합니다.",
"upstream_dns_help": "서버 주소를 한 줄에 하나씩 입력해주십시오. 업스트림 DNS 서버 구성에 대해 <a>자세히 알아보십시오</a>.",
"upstream_dns_configured_in_file": "{{path}}에서 구성됨",
"test_upstream_btn": "업스트림 테스트",
"upstreams": "업스트림",
"apply_btn": "적용",
@@ -181,6 +188,7 @@
"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_sdns": "<1>DNSCrypt</1>나 <2>DNS-over-HTTPS</2> 리졸버를 위해 <0>DNS 스탬프</0>를 사용할 수 있습니다",
"example_upstream_tcp": "사용자 지정 DNS (TCP를 통한 접속)",
"all_lists_up_to_date_toast": "모든 리스트가 이미 최신입니다",
@@ -189,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": "도메인명",
@@ -208,8 +220,8 @@
"page_table_footer_text": "페이지",
"rows_table_footer_text": "행",
"updated_custom_filtering_toast": "사용자 정의 필터링 규칙 업데이트",
"rule_removed_from_custom_filtering_toast": "사용자 정의 필터링 규칙에서 규칙 제거",
"rule_added_to_custom_filtering_toast": "사용자 정의 필터링 규칙에 추가된 규칙",
"rule_removed_from_custom_filtering_toast": "사용자 정의 필터링 규칙에서 규칙 제거 {{rule}}",
"rule_added_to_custom_filtering_toast": "사용자 정의 필터링 규칙에 추가된 규칙 {{rule}}",
"query_log_response_status": "상태: {{value}}",
"query_log_filtered": "필터: {{filter}}",
"query_log_confirm_clear": "정말로 모든 쿼리 로그를 비우시겠습니까?",
@@ -230,12 +242,15 @@
"blocking_mode": "차단 모드",
"default": "기본",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "빈 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": "한도 제한",
@@ -244,7 +259,8 @@
"rate_limit_desc": "단일 클라이언트에서 허용 가능한 초 당 요청 생성 숫자 (0: 무제한)",
"blocking_ipv4_desc": "차단된 A 요청에 대해서 반환할 IP 주소",
"blocking_ipv6_desc": "차단된 AAAA 요청에 대해서 반환할 IP 주소",
"blocking_mode_default": "기본: Adblock 스타일 규칙에 의해 차단되면 NXDOMAIN으로 응답합니다; /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는 ::) 로 응답합니다",
"blocking_mode_custom_ip": "커스텀 IP: 직접 설정한 IP 주소로 응답합니다",
@@ -321,6 +337,8 @@
"encryption_https_desc": "HTTPS 포트가 구성되면 HTTPS를 통해 AdGuard Home 관리자 인터페이스에 액세스할 수 있으며, '/dns-query' 위치에 DNS-over-HTTPS도 제공합니다.",
"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으로 인코딩된 인증서 여기에 복사/붙여넣기하세요.",
@@ -354,7 +372,7 @@
"fix": "수정",
"dns_providers": "여기에 선택가능한 DNS 목록 </0>이 있습니다.",
"update_now": "지금 업데이트",
"update_failed": "자동 업데이트 실패 되었습니다. <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'> 단계를 따라 수동으로 업데이트하세요</a>",
"update_failed": "자동 업데이트 실패 되었습니다. <a> 단계를 따라 수동으로 업데이트하세요</a>",
"processing_update": "잠시만 기다려주세요, AdGuard Home가 업데이트 중입니다.",
"clients_title": "클라이언트",
"clients_desc": "AdGuard Home에 연결할 기기들을 설정",
@@ -399,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>지원 추가합니다.",
@@ -512,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}}\"의 차단을 해제하시겠습니까?",
@@ -544,15 +564,14 @@
"milliseconds_abbreviation": "ms",
"cache_size": "캐시 크기",
"cache_size_desc": "DNS 캐시 크기 (바이트)",
"cache_ttl_min_override": "최소 TTL 무시",
"cache_ttl_max_override": "최대 TTL 무시",
"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 값(최소)을 무시합니다. 이 값은 3600(1시간)보다 클 수 없습니다",
"cache_ttl_min_override_desc": "업스트림 서버에서 수신한 TTL 값(최소)을 무시합니다",
"cache_ttl_max_override_desc": "업스트림 서버에서 수신한 TTL 값(최대)을 무시합니다",
"min_exceeds_max_value": "최소값이 최대값을 초과합니다",
"value_not_larger_than": "값은 {{maximum}}보다 클 수 없습니다",
"ttl_cache_validation": "최소 캐시 TTL 값은 최대 값보다 이하여야 합니다",
"filter_category_general": "일반 목록",
"filter_category_security": "보안 목록",
"filter_category_regional": "지역 목록",
@@ -561,6 +580,11 @@
"filter_category_security_desc": "멀웨어, 피싱 또는 사기 도메인을 차단하는 목록",
"filter_category_regional_desc": "지역 광고 및 추적 서버에 중점을 둔 목록",
"filter_category_other_desc": "기타 차단 목록",
"setup_config_to_enable_dhcp_server": "DHCP 서버를 활성화하기 위한 초기 설정",
"original_response": "원래 응답",
"click_to_view_queries": "쿼리를 보려면 클릭합니다"
"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",
@@ -11,6 +12,8 @@
"save_config": "Configuratie opslaan",
"enabled_dhcp": "DHCP server inschakelen",
"disabled_dhcp": "DHCP server uitschakelen",
"unavailable_dhcp": "DHCP is niet beschikbaar",
"unavailable_dhcp_desc": "AdGuard Home kan geen DHCP-server draaien op uw OS",
"dhcp_title": "DHCP server (experimenteel!)",
"dhcp_description": "Indien je router geen DHCP instellingen heeft,kan je AdGuard's eigen ingebouwde DHCP server gebruiken.",
"dhcp_enable": "DHCP server inschakelen",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP statische lease",
"dhcp_leases_not_found": "Geen DHCP lease gevonden",
"dhcp_config_saved": "DHCP server configuratie opgeslagen",
"dhcp_ipv4_settings": "DHCP IPv4 instellingen",
"dhcp_ipv6_settings": "DHCP IPv6 instellingen",
"form_error_required": "Vereist veld",
"form_error_ip4_format": "Ongeldig IPv4 formaat",
"form_error_ip6_format": "Ongeldig IPv6 formaat",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Opmaak cliënt-ID is ongeldig",
"form_error_positive": "Moet groter zijn dan 0",
"form_error_negative": "Moet 0 of hoger dan 0 zijn",
"range_end_error": "Moet groter zijn dan het startbereik",
"dhcp_form_gateway_input": "Gateway IP",
"dhcp_form_subnet_input": "Subnet mask",
"dhcp_form_range_title": "Bereik van IP adressen",
@@ -36,7 +42,7 @@
"dhcp_form_range_end": "Laatste adres",
"dhcp_form_lease_title": "DHCP lease tijd (in seconden)",
"dhcp_form_lease_input": "Lease tijd totaal",
"dhcp_interface_select": "Selecteer DHCP interface",
"dhcp_interface_select": "DHCP interface selecteren",
"dhcp_hardware_address": "Hardware adres",
"dhcp_ip_addresses": "IP adressen",
"ip": "IP",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Encryptie Instellingen",
"dhcp_settings": "DHCP Instellingen",
"upstream_dns": "Upstream DNS servers",
"upstream_dns_hint": "Indien je dit veld leeg laat, zal AdGuard Home <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> gebruiken als upstream.",
"upstream_dns_help": "Server adressen invoeren, een per regel. <a>Meer weten</a> over het configureren van upstream DNS servers.",
"upstream_dns_configured_in_file": "Geconfigureerd in {{path}}",
"test_upstream_btn": "Test upstream",
"upstreams": "Upstreams",
"apply_btn": "Toepassen",
@@ -181,6 +188,7 @@
"example_upstream_regular": "standaard DNS (over UDP)",
"example_upstream_dot": "versleutelde <0>DNS_over_TLS</0>",
"example_upstream_doh": "versleutelde <0>DNS_over_HTTPS</0>",
"example_upstream_doq": "versleutelde <0>DNS-via-QUIC</0>",
"example_upstream_sdns": "je kunt <0>DNS Stamps</0> voor <1>DNSCrypt</1> of <2>DNS-over-HTTPS</2> resolvers",
"example_upstream_tcp": "standaard DNS (over TCP)",
"all_lists_up_to_date_toast": "Alle lijsten zijn reeds up-to-date",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "Server \"{{key}}\": kon niet worden gebruikt, controleer of u het correct hebt geschreven",
"unblock": "Deblokkeren",
"block": "Blokkeren",
"disallow_this_client": "Toepassing/systeem niet toelaten",
"allow_this_client": "Toepassing/systeem toelaten",
"block_for_this_client_only": "Alleen voor deze toepassing/dit systeem blokkeren",
"unblock_for_this_client_only": "Alleen voor deze toepassing/dit systeem deblokkeren",
"time_table_header": "Tijd",
"date": "Datum",
"domain_name_table_header": "Domein naam",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Pagina",
"rows_table_footer_text": "rijen",
"updated_custom_filtering_toast": "Aangepaste filter regels zijn bijgewerkt",
"rule_removed_from_custom_filtering_toast": "Regel verwijderd uit de aangepaste filterregels",
"rule_added_to_custom_filtering_toast": "Regel toegevoegd aan de aangepaste filterregels",
"rule_removed_from_custom_filtering_toast": "Regel verwijderd uit de aangepaste filterregels: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regel toegevoegd aan de aangepaste filterregels: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Gefilterd door {{filter}}",
"query_log_confirm_clear": "Weet u zeker dat u het hele query logboek wilt legen?",
@@ -230,21 +242,25 @@
"blocking_mode": "Blocking modus",
"default": "Standaard",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Nul IP",
"custom_ip": "Aangepast IP",
"blocking_ipv4": "Blokkeren IP4",
"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",
"edns_enable": "Zet EDNS client subnet aan",
"edns_cs_desc": "Indien ingeschakeld stuurt AdGuard Home het subnet van de client naar de DNS-servers.",
"rate_limit_desc": "Het aantal verzoeken per seconde die een enkele client mag doen (0: onbeperkt)",
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "Aangepast IP: Reageer met een handmatige ingesteld IP adres",
@@ -289,12 +305,12 @@
"install_devices_windows_list_1": "Open het Configuratiescherm via het menu Start of Windows zoeken.",
"install_devices_windows_list_2": "Ga naar de categorie Netwerk en Internet en vervolgens naar Netwerkcentrum.",
"install_devices_windows_list_3": "Zoek aan de linkerkant van het scherm Adapter-instellingen wijzigen en klik erop.",
"install_devices_windows_list_4": "Selecteer uw actieve verbinding, klik er met de rechtermuisknop op en kies Eigenschappen.",
"install_devices_windows_list_4": "Selecteer jouw actieve verbinding, klik er met de rechtermuisknop op en kies Eigenschappen.",
"install_devices_windows_list_5": "Zoek Internet Protocol versie 4 (TCP / IP) in de lijst, selecteer het en klik vervolgens opnieuw op Eigenschappen.",
"install_devices_windows_list_6": "Kies Gebruik de volgende DNS-serveradressen en voer uw AdGuard Home-serveradressen in.",
"install_devices_macos_list_1": "Klik op het Apple-pictogram en ga naar Systeemvoorkeuren.",
"install_devices_macos_list_2": "Klik op Netwerk.",
"install_devices_macos_list_3": "Selecteer de eerste verbinding in uw lijst en klik op Geavanceerd.",
"install_devices_macos_list_3": "Selecteer de eerste verbinding in jouw lijst en klik op Geavanceerd.",
"install_devices_macos_list_4": "Selecteer het tabblad DNS en voer uw AdGuard Home-serveradressen in.",
"install_devices_android_list_1": "Tik op het startscherm van het Android-menu op Instellingen.",
"install_devices_android_list_2": "Tik op wifi in het menu. Het scherm met alle beschikbare netwerken wordt getoond (het is niet mogelijk om een aangepaste DNS in te stellen voor een mobiele verbinding).",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Als de HTTPS-poort is geconfigureerd, is de AdGuard Home beheerders interface toegankelijk via HTTPS en biedt deze ook DNS-over-HTTPS op de locatie '/ dns-query'.",
"encryption_dot": "DNS-over-TLS poort",
"encryption_dot_desc": "Indien deze poort is geconfigureerd, zal AdGuard Home gebruik maken van een DNS-over-TLS server via deze poort.",
"encryption_doq": "DNS-via-QUIC poort",
"encryption_doq_desc": "Als deze poort is geconfigureerd, zal AdGuard Home een DNS-via-QUIC server gebruiken via deze poort. Dit is experimenteel en kan onbetrouwbaar zijn. Er zijn overigens nog niet veel systemen die dit nu al ondersteunen.",
"encryption_certificates": "Certificaten",
"encryption_certificates_desc": "Om encryptie te gebruiken, moet u een geldige SSL certificaat voor uw domein opgeven. U kunt een gratis certificaat krijgen op <0> {{link}} </0> of u kunt het kopen bij een van de vertrouwde certificaatautoriteiten.",
"encryption_certificates_input": "Kopieër en plak je PEM-gecodeerde certificaten hier.",
@@ -354,7 +372,7 @@
"fix": "Los op",
"dns_providers": "hier is een <0>lijst of gekende DNS providers</0> waarvan je kan kiezen.",
"update_now": "Update nu",
"update_failed": "Auto-update is mislukt. Volg <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>de volgende stappen</a> om manueel te updaten.",
"update_failed": "Auto-update is mislukt. <a>Volg deze stappen</a> om manueel te updaten.",
"processing_update": "Even geduld, AdGuard Home wordt bijgewerkt",
"clients_title": "Gebruikers",
"clients_desc": "Configureer apparaten die gebruik maken van AdGuard Home",
@@ -400,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.",
@@ -498,7 +517,7 @@
"autofix_warning_result": "Als gevolg hiervan worden alle DNS-verzoeken van je systeem standaard door AdGuard Home verwerkt.",
"tags_title": "Labels",
"tags_desc": "Je kunt tags selecteren die overeenkomen met de client. Tags kunnen worden opgenomen in de filterregels en je kunt ze dan nauwkeuriger toepassen. <0> Meer informatie </0>",
"form_select_tags": "Kies client tags",
"form_select_tags": "Client tags selecteren",
"check_title": "Controleer de filtering",
"check_desc": "Controleer of de hostnaam wordt gefilterd",
"check": "Controleren",
@@ -512,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?",
@@ -546,13 +566,12 @@
"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": "Overschrijft TTL waarde (minimaal) ontvangen van de upstream server. Deze waarde mag niet hoger als 3600 (1 uur) zijn",
"cache_ttl_max_override_desc": "Overschrijft TTL waarde (maximaal) ontvangen van de upstream server",
"min_exceeds_max_value": "Minimale waarde overschrijdt de maximale waarde",
"value_not_larger_than": "Waarde mag niet hoger zijn dan {{maximum}}",
"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",
"filter_category_regional": "Regionaal",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Lijsten gespecialiseerd in het blokkeren van malware, phising of scam domeinen",
"filter_category_regional_desc": "Lijsten die focussen op regionale ads en tracking servers",
"filter_category_other_desc": "Overige blokkeerlijsten",
"setup_config_to_enable_dhcp_server": "Configuratie instelling om DHCP-server in te schakelen",
"original_response": "Oorspronkelijke reactie",
"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."
"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",
@@ -11,6 +12,8 @@
"save_config": "Lagre oppsettet",
"enabled_dhcp": "DHCP-tjeneren ble skrudd på",
"disabled_dhcp": "DHCP-tjeneren ble skrudd av",
"unavailable_dhcp": "DHCP er utilgjengelig",
"unavailable_dhcp_desc": "AdGuard Home kan ikke kjøre en DHCP-tjener på ditt OS",
"dhcp_title": "DHCP-tjener (eksperimentell!)",
"dhcp_description": "Dersom ruteren din ikke har DHCP-innstillinger, kan du bruke AdGuard Home sin egen innebygde DHCP-tjener.",
"dhcp_enable": "Skru på DHCP-tjeneren",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "Statiske DHCP-leieavtaler",
"dhcp_leases_not_found": "Ingen DHCP-leieavtaler ble funnet",
"dhcp_config_saved": "Lagret DHCP-tjeneroppsettet",
"dhcp_ipv4_settings": "DHCP IPv4-innstillinger",
"dhcp_ipv6_settings": "DHCP IPv6-innstillinger",
"form_error_required": "Påkrevd felt",
"form_error_ip4_format": "Ugyldig IPv4-format",
"form_error_ip6_format": "Ugyldig IPv6-format",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Ugyldig ID-klientformat",
"form_error_positive": "Må være høyere enn 0",
"form_error_negative": "Må være ≥0",
"range_end_error": "Må være høyere enn rekkeviddens start",
"dhcp_form_gateway_input": "Gateway-IP",
"dhcp_form_subnet_input": "Nettverksmaske",
"dhcp_form_range_title": "Spennvidden til IP-adressene",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Krypteringsinnstillinger",
"dhcp_settings": "DHCP-innstillinger",
"upstream_dns": "Oppstrøms-DNS-tjenere",
"upstream_dns_hint": "Hvis du lar dette feltet stå tomt, vil AdGuard Home will bruke <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> som en oppstrømstjener.",
"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",
"apply_btn": "Benytt",
@@ -163,6 +170,7 @@
"edit_blocklist": "Rediger blokkeringsliste",
"edit_allowlist": "Rediger hviteliste",
"choose_blocklist": "Velg blokkeringslister",
"choose_allowlist": "Velg hvitelister",
"enter_valid_blocklist": "Skriv inn en gyldig nettadresse til blokkeringslisten.",
"enter_valid_allowlist": "Skriv inn en gyldig nettadresse til hvitelisten.",
"form_error_url_format": "Ugyldig URL-format",
@@ -180,6 +188,7 @@
"example_upstream_regular": "vanlig DNS (over UDP)",
"example_upstream_dot": "kryptert <0>DNS-over-TLS</0>",
"example_upstream_doh": "kryptert <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "kryptert <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "du kan bruke <0>DNS-stempler</0> med <1>DNSCrypt</1> eller <2>DNS-over-HTTPS</2>-behandlere",
"example_upstream_tcp": "vanlig DNS (over TCP)",
"all_lists_up_to_date_toast": "Alle listene er allerede oppdatert",
@@ -188,6 +197,10 @@
"dns_test_not_ok_toast": "Tjeneren «{{key}}» kunne ikke brukes, vennligst dobbeltsjekk at du har skrevet den riktig",
"unblock": "Tillat",
"block": "Blokker",
"disallow_this_client": "Ikke tillat denne klienten",
"allow_this_client": "Tillat denne klienten",
"block_for_this_client_only": "Blokker kun for denne klienten",
"unblock_for_this_client_only": "Opphev blokkering kun for denne enheten",
"time_table_header": "Tidspunkt",
"date": "Dato",
"domain_name_table_header": "Domenenavn",
@@ -207,8 +220,8 @@
"page_table_footer_text": "Side",
"rows_table_footer_text": "rekker",
"updated_custom_filtering_toast": "Oppdaterte de selvvalgte filtreringsreglene",
"rule_removed_from_custom_filtering_toast": "Oppføringen ble fjernet fra de selvvalgte filtreringsreglene",
"rule_added_to_custom_filtering_toast": "Oppføringen ble lagt til i de selvvalgte filtreringsreglene",
"rule_removed_from_custom_filtering_toast": "Oppføringen ble fjernet fra de selvvalgte filtreringsreglene: {{rule}}",
"rule_added_to_custom_filtering_toast": "Oppføringen ble lagt til i de selvvalgte filtreringsreglene: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtrert av {{filter}}",
"query_log_confirm_clear": "Er du sikker på at du vil slette hele forespørselsloggen?",
@@ -224,15 +237,20 @@
"anonymize_client_ip": "Anonymiser klient-IP-en",
"anonymize_client_ip_desc": "Ikke lagre den fulle IP-adressen til klienten i loggføringer eller statistikker",
"dns_config": "DNS-tjeneroppsett",
"dns_cache_config": "DNS-mellomlageroppsett",
"dns_cache_config_desc": "Her kan du justere DNS-mellomlageret",
"blocking_mode": "Blokkeringsmodus",
"default": "Standardmodus",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null-IP",
"custom_ip": "Tilpasset IP",
"blocking_ipv4": "IPv4-blokkering",
"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",
@@ -241,7 +259,7 @@
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "Tilpasset IP: Svar med en manuelt valgt IP-adresse",
@@ -318,6 +336,8 @@
"encryption_https_desc": "Dersom HTTPS-porten er satt opp, vil AdGuard Home sitt admin-grensesnitt være tilgjengelig gjennom HTTPS, og vil også sørge for DNS-over-HTTPS på «/dns-query»-plasseringen.",
"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.",
@@ -351,7 +371,7 @@
"fix": "Fiks",
"dns_providers": "Her er en <0>liste over kjente DNS-leverandører</0> som du kan velge blant.",
"update_now": "Oppdater nå",
"update_failed": "Auto-oppdatering mislyktes. Vennligst <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>følg trinnene</a> for manuelle oppdateringer.",
"update_failed": "Auto-oppdatering mislyktes. Vennligst <a>følg trinnene</a> for manuelle oppdateringer.",
"processing_update": "Vennligst vent, AdGuard Home blir oppdatert",
"clients_title": "Klienter",
"clients_desc": "Konfigurer enheter som er koblet til AdGuard Home",
@@ -396,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.",
@@ -446,6 +465,7 @@
"domain": "Domene",
"answer": "Svar",
"filter_added_successfully": "Filteret har blitt vellykket lagt til",
"filter_removed_successfully": "Listen ble vellykket fjernet",
"filter_updated": "Listen ble vellykket oppdatert",
"statistics_configuration": "Statistikk-oppsett",
"statistics_retention": "Statistikkbeholding",
@@ -476,10 +496,15 @@
"whois": "Whois",
"filtering_rules_learn_more": "<0>Lær mer</0> om å lage dine egne filterlister for AdGuard Home.",
"blocked_by_response": "Blokkert av responsens CNAME eller IP",
"blocked_by_cname_or_ip": "Blokkert av CNAME eller IP",
"try_again": "Prøv på nytt",
"domain_desc": "Skriv inn domenenavnet eller jokertegnet som du vil skal skrives om.",
"example_rewrite_domain": "omskriv svarene til kun dette domenenavnet.",
"example_rewrite_wildcard": "omskriv svarene til alle <0>example.org</0>-underdomener.",
"rewrite_ip_address": "IP-adresse: Bruk denne IP-en i en A- eller AAAA-respons",
"rewrite_domain_name": "Domenenavn: Legg til en CNAME-statutt",
"rewrite_A": "<0>A</0>: spesialverdi, behold <0>A</0>-statutter fra oppstrømstjeneren",
"rewrite_AAAA": "<0>AAAA</0>: spesialverdi, behold <0>AAAA</0>-statutter fra oppstrømstjeneren",
"disable_ipv6": "Skru av IPv6",
"disable_ipv6_desc": "Hvis dette er skrudd på, vil alle DNS-forespørslene til IPv6-adresser (AAAA-type) bli droppet.",
"fastest_addr": "Raskeste IP-adresse",
@@ -503,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}}»?",
@@ -520,6 +546,7 @@
"dnssec_enable": "Skru på DNSSEC",
"dnssec_enable_desc": "Fest på DNSSEC-flagg til utgående DNS-forespørsler og sjekk resultatet (En DNS-oppstrømstjener med DNSSEC-støtte er påkrevd)",
"validated_with_dnssec": "Validert med DNSSEC",
"all_queries": "Alle forespørsler",
"show_blocked_responses": "Blokkért",
"show_whitelisted_responses": "Hvitelistet",
"show_processed_responses": "Bearbeidet",
@@ -533,11 +560,28 @@
"blocklist": "Blokkeringsliste",
"milliseconds_abbreviation": "ms",
"cache_size": "Mellomlagerstørrelse",
"enter_cache_size": "Skriv inn mellomlagerstørrelse",
"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 (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",
"filter_category_other": "Andre",
"filter_category_general_desc": "Lister som blokkerer sporing og reklamer på de fleste enheter",
"filter_category_security_desc": "Lister som spesialiserer seg på å blokkere skadevare-, phishing- eller svindeldomener",
"filter_category_regional_desc": "Lister som fokuserer på regionale reklamer og sporingstjenere",
"filter_category_other_desc": "Andre blokkeringslister",
"click_to_view_queries": "Klikk for å vise forespørsler"
"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",
@@ -11,6 +12,8 @@
"save_config": "Zapisz konfigurację",
"enabled_dhcp": "Serwer DHCP włączony",
"disabled_dhcp": "Serwer DHCP wyłączony",
"unavailable_dhcp": "Serwer DHCP jest niedostępny",
"unavailable_dhcp_desc": "AdGuard Home nie może uruchomić serwera DHCP na Twoim systemie operacyjnym",
"dhcp_title": "Serwer DHCP ",
"dhcp_description": "Jeśli router nie zapewnia ustawień DHCP, możesz użyć wbudowanego serwera DHCP AdGuard.",
"dhcp_enable": "Włącz serwer DHCP",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "Dzierżawy statyczne DHCP",
"dhcp_leases_not_found": "Nie znaleziono dzierżaw DHCP",
"dhcp_config_saved": "Konfiguracja DHCP pomyślnie zapisana",
"dhcp_ipv4_settings": "Ustawienia serwera DHCP IPv4",
"dhcp_ipv6_settings": "Ustawienia serwera DHCP IPv6",
"form_error_required": "Pole jest wymagane",
"form_error_ip4_format": "Nieprawidłowy format IPv4",
"form_error_ip6_format": "Nieprawidłowy format IPv6",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Nieprawidłowy format identyfikatora klienta",
"form_error_positive": "Musi być większa niż 0",
"form_error_negative": "Musi być równy 0 lub większy",
"range_end_error": "Zakres musi być większy niż początkowy",
"dhcp_form_gateway_input": "Adres IP bramy",
"dhcp_form_subnet_input": "Maska podsieci",
"dhcp_form_range_title": "Zakres adresów IP",
@@ -108,8 +114,8 @@
"number_of_dns_query_to_safe_search": "Liczba żądań DNS do wyszukiwarek, dla których zastosowano wymuszenie bezpiecznego wyszukiwania",
"average_processing_time": "Średni czas przetwarzania",
"average_processing_time_hint": "Średni czas przetwarzania żądania DNS liczony w milisekundach",
"block_domain_use_filters_and_hosts": "Blokuj 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> ",
"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>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",
@@ -127,7 +133,8 @@
"encryption_settings": "Ustawienia szyfrowania",
"dhcp_settings": "Ustawienia DHCP",
"upstream_dns": "Główne serwery DNS",
"upstream_dns_hint": "Jeśli to pole pozostawisz puste, AdGuard Home wykorzysta usługę <a href='https://www.quad9.net/' target='_blank'>Quad9</a> jako główny serwer 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",
@@ -177,10 +184,11 @@
"example_comment": "! Tutaj jest komentarz",
"example_comment_meaning": "komentarz",
"example_comment_hash": "# Również komentarz",
"example_regex_meaning": "blokuj dostęp do domen pasujących do określonego wyrażenia regularnego",
"example_regex_meaning": "zablokuj dostęp do domen pasujących do określonego wyrażenia regularnego",
"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",
@@ -189,6 +197,10 @@
"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",
"date": "Data",
"domain_name_table_header": "Nazwa domeny",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Strona",
"rows_table_footer_text": "wierszy",
"updated_custom_filtering_toast": "Zaktualizowano niestandardowe reguły filtrowania",
"rule_removed_from_custom_filtering_toast": "Reguła usunięta z niestandardowych reguł filtrowania",
"rule_added_to_custom_filtering_toast": "Reguła dodana do niestandardowych reguł filtrowania",
"rule_removed_from_custom_filtering_toast": "Reguła usunięta z niestandardowych reguł filtrowania: {{rule}}",
"rule_added_to_custom_filtering_toast": "Reguła dodana do niestandardowych reguł filtrowania: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtrowane przez {{filter}}",
"query_log_confirm_clear": "Czy na pewno chcesz wyczyścić cały dziennik zapytań?",
@@ -230,21 +242,25 @@
"blocking_mode": "Tryb blokowania",
"default": "Domyślny",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Null IP",
"custom_ip": "Niestandardowy adres IP",
"blocking_ipv4": "Blokowanie IPv4",
"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 (0: nieograniczona)",
"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 NXDOMAIN, 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)",
"blocking_mode_custom_ip": "Niestandardowy adres IP: Odpowiedz ręcznie ustawionym adresem IP",
@@ -321,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.",
@@ -354,7 +372,7 @@
"fix": "Napraw",
"dns_providers": "Oto lista <0>znanych dostawców DNS</0> do wyboru.",
"update_now": "Aktualizuj teraz",
"update_failed": "Automatyczna aktualizacja nie powiodła się. Proszę <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>wykonaj kroki</a> aby zaktualizować ręcznie.",
"update_failed": "Automatyczna aktualizacja nie powiodła się. Proszę <a>wykonaj kroki</a> aby zaktualizować ręcznie.",
"processing_update": "Poczekaj, trwa aktualizacja AdGuard Home",
"clients_title": "Klienci",
"clients_desc": "Skonfiguruj urządzenia podłączone do AdGuard Home",
@@ -399,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.",
@@ -427,7 +446,7 @@
"form_error_answer_format": "Nieprawidłowy format odpowiedzi",
"configure": "Skonfiguruj",
"main_settings": "Ustawienia główne",
"block_services": "Blokuj określone usługi",
"block_services": "Zablokuj określone usługi",
"blocked_services": "Zablokowane usługi",
"blocked_services_desc": "Pozwala szybko zablokować popularne witryny i usługi.",
"blocked_services_saved": "Zablokowane usługi zostały pomyślnie zapisane",
@@ -444,7 +463,7 @@
"stats_params": "Konfiguracja statystyk",
"config_successfully_saved": "Konfiguracja została pomyślnie zapisana",
"interval_24_hour": "24 godziny",
"interval_days": "{{count}} dzień",
"interval_days": "{{count}} dni",
"interval_days_plural": "{{count}} dni",
"domain": "Domena",
"answer": "Odpowiedź",
@@ -512,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}}\"?",
@@ -546,13 +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_min_override_desc": "Nadpisz wartość TTL (minimalną) otrzymaną od serwera nadrzędnego. Wartość nie może być większa niż 3600 (1 godzina)",
"cache_ttl_max_override_desc": "Nadpisz wartość TTL (maksymalną) otrzymaną od serwera nadrzędnego",
"min_exceeds_max_value": "Minimalna wartość przekracza maksymalną wartość",
"value_not_larger_than": "Wartość nie może być większa niż {{maximum}}",
"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",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Listy, które specjalizują się w blokowaniu domen ze złośliwym oprogramowaniem, phishingiem lub oszustwami",
"filter_category_regional_desc": "Listy, które koncentrują się na reklamach regionalnych i serwerach ze skryptami śledzącymi",
"filter_category_other_desc": "Inne listy zablokowanych",
"setup_config_to_enable_dhcp_server": "Ustaw konfigurację serwera DHCP, aby go włączyć",
"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ć."
"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.",
"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,7 +133,8 @@
"encryption_settings": "Configurações de criptografia",
"dhcp_settings": "Configurações de DHCP",
"upstream_dns": "Servidores DNS upstream",
"upstream_dns_hint": "Se você deixar este campo em branco, o AdGuard Home irá usar o <a href='https://www.quad9.net/' target='_blank'>Quad9</a> como 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",
@@ -162,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",
@@ -181,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",
@@ -189,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",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Página",
"rows_table_footer_text": "linhas",
"updated_custom_filtering_toast": "Regras de filtragem personalizadas atualizadas",
"rule_removed_from_custom_filtering_toast": "Regra removida das regras de filtragem personalizadas",
"rule_added_to_custom_filtering_toast": "Regra adicionada às regras de filtragem personalizadas",
"rule_removed_from_custom_filtering_toast": "Regra removida das regras de filtragem personalizadas: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regra adicionada às regras de filtragem personalizadas: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtrado por {{filter}}",
"query_log_confirm_clear": "Você tem certeza que deseja limpar o registro de consulta?",
@@ -230,12 +242,15 @@
"blocking_mode": "Modo de bloqueio",
"default": "Padrão",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "IP nulo",
"custom_ip": "IP personalizado",
"blocking_ipv4": "Bloqueando IPv4",
"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",
@@ -244,7 +259,8 @@
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "IP personalizado: Responder com um endereço IP definido manualmente",
@@ -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.",
@@ -354,7 +372,7 @@
"fix": "Corrigido",
"dns_providers": "Aqui está uma <0>lista de provedores de DNS conhecidos</0> para escolher.",
"update_now": "Atualizar agora",
"update_failed": "A atualização automática falhou. Por favor, <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>siga estes passos</a> para atualizar manualmente.",
"update_failed": "A atualização automática falhou. Por favor, <a>siga estes passos</a> para atualizar manualmente.",
"processing_update": "Por favor, aguarde enquanto o AdGuard Home está sendo atualizado",
"clients_title": "Clientes",
"clients_desc": "Configure dispositivos conectados ao AdGuard",
@@ -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,13 +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_min_override_desc": "Substituição do valor TTL (mínimo) recebido do servidor servidor DNS primário. Esse valor não pode exceder 3600 (1 hora)",
"cache_ttl_max_override_desc": "Substituição do valor TTL (máximo) recebido do servidor de DNS primário",
"min_exceeds_max_value": "O valor mínimo excede o valor máximo",
"value_not_larger_than": "O valor não pode ser maior que {{maximum}}",
"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",
@@ -559,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,10 +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_hint": "Se deixar este campo vazio, o AdGuard Home irá usar <a href='https://www.quad9.net/' target='_blank'>Quad9</a> como 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",
@@ -122,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",
@@ -144,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",
@@ -168,12 +220,13 @@
"page_table_footer_text": "Página",
"rows_table_footer_text": "linhas",
"updated_custom_filtering_toast": "Regras de filtragem personalizadas actualizadas",
"rule_removed_from_custom_filtering_toast": "Regra removida das regras de filtragem personalizadas",
"rule_added_to_custom_filtering_toast": "Regra adicionada às regras de filtragem personalizadas",
"rule_removed_from_custom_filtering_toast": "Regra removida das regras de filtragem personalizadas: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regra adicionada às regras de filtragem personalizadas: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"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",
@@ -181,13 +234,24 @@
"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",
@@ -195,12 +259,20 @@
"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",
@@ -222,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.",
@@ -254,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.",
@@ -264,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.",
@@ -280,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",
@@ -297,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 href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>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",
@@ -324,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",
@@ -341,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.",
@@ -361,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",
@@ -382,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",
@@ -399,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",
@@ -419,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",
@@ -11,6 +12,8 @@
"save_config": "Salvare configurare",
"enabled_dhcp": "Server DHCP activat",
"disabled_dhcp": "Server DHCP dezactivat",
"unavailable_dhcp": "DHCP este indisponibil",
"unavailable_dhcp_desc": "AdGuard Home nu poate rula un server DHCP pe OS-ul dvs.",
"dhcp_title": "Server DHCP (experimental!)",
"dhcp_description": "Dacă routerul dvs. nu furnizează setări DHCP, puteți utiliza serverul DHCP încorporat AdGuard.",
"dhcp_enable": "Activați serverul DHCP",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP statice închiriate",
"dhcp_leases_not_found": "Nu s-au găsit DHCP închiriate",
"dhcp_config_saved": "Configurare DHCP salvată cu succes",
"dhcp_ipv4_settings": "Setări DHCP IPv4",
"dhcp_ipv6_settings": "Setări DHCP IPv6",
"form_error_required": "Câmp necesar",
"form_error_ip4_format": "Format IPv4 invalid",
"form_error_ip6_format": "Format IPv6 invalid",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Format ID de client invalid",
"form_error_positive": "Trebuie să fie mai mare de 0",
"form_error_negative": "Trebuie să fie egală cu 0 sau mai mare",
"range_end_error": "Trebuie să fie mai mare decât începutul intervalului",
"dhcp_form_gateway_input": "IP Gateway",
"dhcp_form_subnet_input": "Mască subnet",
"dhcp_form_range_title": "Interval de adrese IP",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Setări de criptare",
"dhcp_settings": "Setări DHCP",
"upstream_dns": "Servere upstream DNS",
"upstream_dns_hint": "Dacă mențineți acest câmp gol, AdGuard Home va folosi <a href='https://www.quad9.net/' target='_blank'>Quad9</a> ca upstream.",
"upstream_dns_help": "Introduceți adresele serverelor una pe linie. <a>Aflați mai multe</a> despre configurarea serverelor DNS în amonte.",
"upstream_dns_configured_in_file": "Configurat în {{path}}",
"test_upstream_btn": "Testați upstreams",
"upstreams": "Upstreams",
"apply_btn": "Aplică",
@@ -181,6 +188,7 @@
"example_upstream_regular": "DNS clasic (over UDP)",
"example_upstream_dot": "<0>DNS-over-TLS</0> criptat",
"example_upstream_doh": "<0>DNS-over-HTTPS</0> criptat",
"example_upstream_doq": "<0>DNS-over-QUIC</0> criptat",
"example_upstream_sdns": "puteți utiliza <0>DNS Stamps</0> pentru rezolvere <1>DNSCrypt</1> sau <2>DNS-over-HTTPS</2>",
"example_upstream_tcp": "DNS clasic (over TCP)",
"all_lists_up_to_date_toast": "Toate listele sunt deja la zi",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "Serverul \"{{key}}\": nu a putut fi utilizat, verificați dacă l-ați scris corect",
"unblock": "Deblocați",
"block": "Blocați",
"disallow_this_client": "Nu permiteți acest client",
"allow_this_client": "Permiteți acest client",
"block_for_this_client_only": "Blocați numai pentru acest client",
"unblock_for_this_client_only": "Deblocați numai pentru acest client",
"time_table_header": "Ora",
"date": "Data",
"domain_name_table_header": "Nume domeniu",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Pagina",
"rows_table_footer_text": "linii",
"updated_custom_filtering_toast": "Reguli personalizate de filtrare aduse la zi",
"rule_removed_from_custom_filtering_toast": "Regulă scoasă din regullei personalizate de filtrare",
"rule_added_to_custom_filtering_toast": "Regulă adăugată la regulile de filtrare personalizate",
"rule_removed_from_custom_filtering_toast": "Regulă scoasă din regullei personalizate de filtrare: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regulă adăugată la regulile de filtrare personalizate: {{rule}}",
"query_log_response_status": "Statut: {{value}}",
"query_log_filtered": "Filtrat de {{filter}}",
"query_log_confirm_clear": "Sunteți sigur că doriți să ștergeți întregul jurnal de interogări?",
@@ -230,21 +242,25 @@
"blocking_mode": "Modul de blocare",
"default": "Implicit",
"nxdomain": "NXDOMAIN",
"refused": "REFUZAT",
"null_ip": "IP nul",
"custom_ip": "IP personalizat",
"blocking_ipv4": "Blocarea IPv4",
"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",
"edns_enable": "Activați clientul subnet EDNS",
"edns_cs_desc": "Dacă este activat, AdGuard Home va trimite subnet-ul clienților către serverele DNS.",
"rate_limit_desc": "Numărul de solicitări pe secundă pe care un singur client este permis să le facă (0: nelimitat)",
"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 NXDOMAIN 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)",
"blocking_mode_custom_ip": "IP personalizat: răspunde cu o adresă IP setată manual",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Dacă portul HTTPS este configurat, interfața administrator AdGuard Home va fi accesibilă prin HTTPS și va oferi de asemenea DNS-over-HTTPS în locația '/DNS-query'.",
"encryption_dot": "Port DNS-over-TLS",
"encryption_dot_desc": "Dacă acest port este configurat, AdGuard Home va rula un server DNS-over-TLS pe acest port.",
"encryption_doq": "Port DNS-over-QUIC",
"encryption_doq_desc": "Dacă acest port este configurat, AdGuard Home va rula un server DNS-over-QUIC pe acest port. Este experimental și este posibil să nu fie fiabil. De asemenea, nu există prea mulți clienți care să-l susțină în acest moment.",
"encryption_certificates": "Certificate",
"encryption_certificates_desc": "Pentru a utiliza criptarea, trebuie furnizate o serie de certificate SSL valabile pentru domeniul dvs.. Puteți obține un certificat gratuit pe <0>{{link}}</0> sau îl puteți cumpăra de la una din Autoritățile Certificate de încredere.",
"encryption_certificates_input": "Copiați/lipiți certificatele dvs. PEM-codate aici.",
@@ -354,7 +372,7 @@
"fix": "Fix",
"dns_providers": "Iată o <0>listă de furnizori DNS cunoscuți</0> ce pot fi aleși.",
"update_now": "Actualizați acum",
"update_failed": "Auto-actualizarea a eșuat. Vă rugăm să <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>urmați aceste etape</a> pentru a actualiza manual.",
"update_failed": "Auto-actualizarea a eșuat. Vă rugăm să <a>urmați aceste etape</a> pentru a actualiza manual.",
"processing_update": "Vă rugăm să așteptați, AdGuard Home se actualizează...",
"clients_title": "Clienți",
"clients_desc": "Configură aparatele conectate la AdGuard Home",
@@ -399,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.",
@@ -512,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}}\"?",
@@ -544,15 +564,14 @@
"milliseconds_abbreviation": "ms",
"cache_size": "Mărime cache",
"cache_size_desc": "Mărime cache DNS (în octeți)",
"cache_ttl_min_override": "Suprascrieți TTL minim",
"cache_ttl_max_override": "Suprascrieți TTL maxim",
"enter_cache_size": "Introduceți mărime cache",
"enter_cache_ttl_min_override": "Introduceți TTL minim",
"enter_cache_ttl_max_override": "Introduceți TTL maxim",
"cache_ttl_min_override_desc": "Suprascrie valoarea TTL (minimă) primită de la serverul din amonte. valoare nu poate fi mai mare de 3600 (1 oră)",
"cache_ttl_max_override_desc": "Suprascrie valoarea TTL (maximă) primită de la serverul din amonte",
"min_exceeds_max_value": "Valoarea minimă depășește valoarea maximă",
"value_not_larger_than": "Valoarea nu poate fi mai mare decât {{maximum}}",
"cache_ttl_min_override": "Suprascrieți minimum TTL",
"cache_ttl_max_override": "Suprascrieți maximum TTL",
"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",
"filter_category_regional": "Regional",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Liste specializate în blocarea domeniilor malware, phishing sau înșelătorie",
"filter_category_regional_desc": "Liste focalizate pe reclame regionale și servere de urmărire",
"filter_category_other_desc": "Alte liste de blocări",
"setup_config_to_enable_dhcp_server": "Setați configurația pentru a activa serverul DHCP",
"original_response": "Răspuns original",
"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."
"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",
@@ -11,6 +12,8 @@
"save_config": "Сохранить конфигурацию",
"enabled_dhcp": "DHCP-сервер включен",
"disabled_dhcp": "DHCP-сервер отключен",
"unavailable_dhcp": "DHCP недоступен",
"unavailable_dhcp_desc": "AdGuard Home не может запустить DHCP-сервер на вашей ОС",
"dhcp_title": "DHCP-сервер (экспериментальный!)",
"dhcp_description": "Если ваш роутер не предоставляет настройки DHCP, вы можете использовать собственный встроенный DHCP-сервер AdGuard.",
"dhcp_enable": "Включить DHCP-сервер",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "Статические аренды DHCP",
"dhcp_leases_not_found": "Аренда DHCP не обнаружена",
"dhcp_config_saved": "Конфигурация DHCP-сервера успешно сохранена",
"dhcp_ipv4_settings": "Настройки DHCP IPv4",
"dhcp_ipv6_settings": "Настройки DHCP IPv6",
"form_error_required": "Обязательное поле",
"form_error_ip4_format": "Неверный формат IPv4",
"form_error_ip6_format": "Неверный формат IPv6",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Неверный формат ID клиента",
"form_error_positive": "Должно быть больше 0",
"form_error_negative": "Должно быть не меньше 0",
"range_end_error": "Должно превышать начало диапазона",
"dhcp_form_gateway_input": "IP-адрес шлюза",
"dhcp_form_subnet_input": "Маска подсети",
"dhcp_form_range_title": "Диапазон IP-адресов",
@@ -109,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 ",
@@ -127,7 +133,8 @@
"encryption_settings": "Настройки шифрования",
"dhcp_settings": "Настройки DHCP",
"upstream_dns": "Upstream DNS-серверы",
"upstream_dns_hint": "Если вы оставите это поле пустым, то AdGuard Home использует <a href='https://www.quad9.net/' target='_blank'>Quad9</a> в качестве DNS сервера.",
"upstream_dns_help": "Введите адреса серверов по одному на строке. <a>Узнать больше</a> о настройке upstream DNS-серверов.",
"upstream_dns_configured_in_file": "Настроен в {{path}}",
"test_upstream_btn": "Тест upstream серверов",
"upstreams": "Upstreams",
"apply_btn": "Применить",
@@ -181,6 +188,7 @@
"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_sdns": "вы можете использовать <0>DNS Stamps</0> для <1>DNSCrypt</1> или <2>DNS-over-HTTPS</2> резолверов",
"example_upstream_tcp": "обычный DNS (поверх TCP)",
"all_lists_up_to_date_toast": "Все списки уже обновлены",
@@ -189,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": "Домен",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Страница",
"rows_table_footer_text": "строк",
"updated_custom_filtering_toast": "Внесены изменения в пользовательские правила",
"rule_removed_from_custom_filtering_toast": равило удалено из авторского списка правил фильтрации",
"rule_added_to_custom_filtering_toast": "Пользовательское правило добавлено",
"rule_removed_from_custom_filtering_toast": ользовательское правило удалено: {{rule}}",
"rule_added_to_custom_filtering_toast": "Пользовательское правило добавлено: {{rule}}",
"query_log_response_status": "Статус: {{value}}",
"query_log_filtered": "Отфильтровано с помощью {{filter}}",
"query_log_confirm_clear": "Вы уверены, что хотите очистить весь журнал запросов?",
@@ -230,12 +242,15 @@
"blocking_mode": "Режим блокировки",
"default": "Стандартный",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Нулевой 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": "Скачать .mobileconfig для DNS-over-HTTPS",
"download_mobileconfig_dot": "Скачать .mobileconfig для DNS-over-TLS",
"plain_dns": "Нешифрованный DNS",
"form_enter_rate_limit": "Введите rate limit",
"rate_limit": "Rate limit",
@@ -244,7 +259,8 @@
"rate_limit_desc": "Ограничение на количество запросов в секунду для каждого клиента (0 — неограниченно)",
"blocking_ipv4_desc": "IP-адрес, возвращаемый при блокировке A-запроса",
"blocking_ipv6_desc": "IP-адрес, возвращаемый при блокировке AAAA-запроса",
"blocking_mode_default": "Стандартный: Отвечает с NXDOMAIN, когда заблокировано правилом в стиле Adblock; отвечает с IP-адресом, указанным в правиле, когда заблокировано правилом в стиле /etc/hosts\n",
"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-адресом",
@@ -321,6 +337,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-кодировке.",
@@ -354,7 +372,7 @@
"fix": "Исправить",
"dns_providers": "<0>Список известных DNS-провайдеров</0> на выбор.",
"update_now": "Обновить сейчас",
"update_failed": "Ошибка авто-обновления. Пожалуйста, <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>следуйте инструкции</a> для обновления вручную.",
"update_failed": "Ошибка авто-обновления. Пожалуйста, <a>следуйте инструкции</a> для обновления вручную.",
"processing_update": "Пожалуйста, подождите, AdGuard Home обновляется",
"clients_title": "Клиенты",
"clients_desc": "Настройте устройства, использующие AdGuard Home",
@@ -399,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.",
@@ -512,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}}\"?",
@@ -530,7 +550,7 @@
"dnssec_enable_desc": "Установите флаг DNSSEC в исходящих DNS-запросах и проверьте результат (требуется резолвер с поддержкой DNSSEC)",
"validated_with_dnssec": "Подтверждено с помощью DNSSEC",
"all_queries": "Все запросы",
"show_blocked_responses": "Blocked",
"show_blocked_responses": "Заблокировано",
"show_whitelisted_responses": "В белом списке",
"show_processed_responses": "Обработан",
"blocked_safebrowsing": "Заблокировано согласно базе данных Safebrowsing",
@@ -544,15 +564,14 @@
"milliseconds_abbreviation": "мс",
"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-значение (минимальное), полученное с upstream-сервера. Это значение не может быть больше 3600 (1 часа)",
"cache_ttl_max_override_desc": "Переопределить TTL-значение (максимальное), полученное с upstream-сервера",
"min_exceeds_max_value": "Минимальное значение превышает максимальное значение",
"value_not_larger_than": "Значение не может быть больше {{maximum}}",
"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-сервера при кешировании DNS-ответов",
"cache_ttl_max_override_desc": "Установить максимальное TTL-значение (в секундах) для записей в DNS-кэше",
"ttl_cache_validation": "Минимальное значение TTL кеша должно быть меньше или равно максимальному значению",
"filter_category_general": "Общие",
"filter_category_security": "Безопасность",
"filter_category_regional": "Региональные",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Списки, которые специализируются на блокировке вредоносных программ, фишинговых или мошеннических доменов",
"filter_category_regional_desc": "Списки, которые фокусируются на региональной рекламе и серверах отслеживания",
"filter_category_other_desc": "Другие списки блокировки",
"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 AdGuard Home сбросит все DNS-запросы от этого клиента.",
"client_not_in_allowed_clients": "Клиент не разрешён, так как его нет в списке \"Разрешённых клиентов\".",
"experimental": "Экспериментальный"
}

View File

@@ -0,0 +1,503 @@
{
"client_settings": "අනුග්‍රාහක සැකසුම්",
"parallel_requests": "සමාන්තර ඉල්ලීම්",
"load_balancing": "ධාරිතාව තුලනය",
"check_dhcp_servers": "ග.ධා.වි.කෙ. සේවාදායකයන් සඳහා පරීක්ෂා කරන්න",
"save_config": "වින්‍යාසය සුරකින්න",
"enabled_dhcp": "ග.ධා.වි.කෙ. සේවාදායකය සබල කර ඇත",
"disabled_dhcp": "ග.ධා.වි.කෙ. සේවාදායකය අබල කර ඇත",
"unavailable_dhcp_desc": "ඇඩ්ගාර්ඩ් හෝම් හට ඔබගේ මෙහෙයුම් පද්ධතියේ ග.ධා.වි.කෙ. සේවාදායකයක් ධාවනය කළ නොහැක",
"dhcp_title": "ග.ධා.වි.කෙ. සේවාදායකය (පර්යේෂණාත්මක!)",
"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 ආකෘතියකි",
"form_error_ip_format": "වලංගු නොවන අ.ජා. කෙ. (IP) ආකෘතියකි",
"form_error_mac_format": "වලංගු නොවන MAC ආකෘතියකි",
"form_error_client_id_format": "වලංගු නොවන අනුග්‍රාහක හැඳුනුම් ආකෘතියකි",
"form_error_positive": "0 ට වඩා වැඩි විය යුතුය",
"form_error_negative": "0 හෝ ඊට වැඩි විය යුතුය",
"dhcp_form_range_title": "අ.ජා. කෙ. (IP) ලිපින පරාසය",
"dhcp_form_range_start": "පරාසය ආරම්භය",
"dhcp_form_range_end": "පරාසය අවසානය",
"dhcp_interface_select": "ග.ධා.වි.කෙ. අතුරුමුහුණත තෝරන්න",
"dhcp_hardware_address": "දෘඩාංග ලිපිනය",
"dhcp_ip_addresses": "අ.ජා. කෙ. (IP) ලිපින",
"ip": "අ.ජා. කෙ. (IP)",
"dhcp_table_hostname": "ධාරක නාමය",
"dhcp_table_expires": "කල් ඉකුත් වීම",
"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}}\" මකා දැමීමට අවශ්‍ය බව ඔබට විශ්වාසද?",
"form_enter_hostname": "ධාරක නාමය ඇතුළත් කරන්න",
"error_details": "දෝෂ විස්තර",
"response_details": "ප්‍රතිචාරය‌ෙහි විස්තර",
"request_details": "ඉල්ලීමෙහි විස්තර",
"client_details": "අනුග්‍රාහකයේ විස්තර",
"details": "විස්තර",
"back": "ආපසු",
"dashboard": "උපකරණ පුවරුව",
"settings": "සැකසුම්",
"filters": "පෙරහන්",
"filter": "පෙරහන",
"query_log": "විමසුම් ලොගය",
"compact": "සංක්ෂිප්ත",
"nothing_found": "කිසිවක් සොයාගත නොහැක",
"faq": "නිති අසන පැණ",
"version": "අනුවාදය",
"address": "ලිපිනය",
"protocol": "කෙටුම්පත",
"on": "සක්‍රියයි",
"off": "අක්‍රියයි",
"copyright": "ප්‍රකාශන හිමිකම",
"homepage": "මුල් පිටුව",
"report_an_issue": "ගැටලුවක් වාර්තා කරන්න",
"privacy_policy": "රහස්‍යතා ප්‍රතිපත්තිය",
"enable_protection": "ආරක්ෂණය සබල කරන්න",
"enabled_protection": "ආරක්ෂණය සබල කර ඇත",
"disable_protection": "ආරක්ෂණය අබල කරන්න",
"disabled_protection": "ආරක්ෂණය අබල කර ඇත",
"refresh_statics": "සංඛ්‍යාලේඛන නැවුම් කරන්න",
"dns_query": "ව.නා.ප. (DNS) විමසුම්",
"blocked_by": "<0>පෙරහන් මගින් අවහිර කරන ලද</0>",
"stats_malware_phishing": "අවහිර කළ ද්වේශාංග/තතුබෑම්",
"stats_adult": "අවහිර කළ වැඩිහිටි වෙබ් අඩවි",
"stats_query_domain": "ජනප්‍රිය විමසන ලද වසම්",
"for_last_24_hours": "පසුගිය පැය 24 සඳහා",
"for_last_days": "පසුගිය දින {{count}} සඳහා",
"for_last_days_plural": "පසුගිය දින {{count}} සඳහා",
"no_domains_found": "වසම් කිසිවක් සොයා ගත නොහැකි විය",
"requests_count": "ඉල්ලීම් ගණන",
"top_blocked_domains": "ජනප්‍රිය අවහිර කළ වසම්",
"top_clients": "ජනප්‍රිය අනුග්‍රාහකයන්",
"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": "ආරක්ෂිත සෙවීම බලාත්මක කළ සෙවුම් යන්ත්‍ර සඳහා ව.නා.ප. ඉල්ලීම් ගණන",
"average_processing_time": "සාමාන්‍ය සැකසුම් කාලය",
"average_processing_time_hint": "ව.නා.ප. ඉල්ලීමක් සැකසීමේ සාමාන්‍ය කාලය මිලි තත්පර වලින්",
"block_domain_use_filters_and_hosts": "පෙරහන් සහ ධාරක ගොනු භාවිතා කරමින් වසම් අවහිර කරන්න",
"filters_block_toggle_hint": "ඔබට අවහිර කිරීමේ නීති <a>පෙරහන්</a> තුළ පිහිටුවිය හැකිය.",
"use_adguard_browsing_sec": "AdGuard browsing security වෙබ් සේවාව භාවිතා කරන්න",
"use_adguard_parental": "AdGuard parental control වෙබ් සේවාව භාවිතා කරන්න",
"use_adguard_parental_hint": "වසමේ වැඩිහිටියන්ට අදාල කරුණු අඩංගු දැයි ඇඩ්ගාර්ඩ් හෝම් විසින් පරීක්ෂා කරනු ඇත. එය browsing security වෙබ් සේවාව මෙන් රහස්‍යතා හිතකාමී යෙ.ක්‍ර. අ.මු. (API) භාවිතා කරයි.",
"enforce_safe_search": "ආරක්ෂිත සෙවීම බලාත්මක කරන්න",
"enforce_save_search_hint": "ඇඩ්ගාර්ඩ් හෝම් හට පහත සෙවුම් යන්ත්‍ර තුළ ආරක්ෂිත සෙවීම බලාත්මක කළ හැකිය: ගූගල්, යූටියුබ්, බින්ග්, ඩක්ඩක්ගෝ, යාන්ඩෙක්ස් සහ පික්සාබේ.",
"no_servers_specified": "සේවාදායක කිසිවක් නිශ්චිතව දක්වා නැත",
"general_settings": "පොදු සැකසුම්",
"dns_settings": "DNS සැකසුම්",
"dns_blocklists": "DNS අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තු",
"dns_allowlists": "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": "ආරක්ෂිත සෙවීම අබල කර ඇත",
"enabled_save_search_toast": "ආරක්ෂිත සෙවීම සබල කර ඇත",
"enabled_table_header": "සබල කර ඇත",
"name_table_header": "නම",
"list_url_table_header": "URL ලැයිස්තුව",
"rules_count_table_header": "නීති ගණන",
"last_time_updated_table_header": "අවසන් වරට යාවත්කාලීන කරන ලද",
"actions_table_header": "ක්‍රියාමාර්ග",
"request_table_header": "ඉල්ලීම",
"edit_table_action": "සංස්කරණය කරන්න",
"delete_table_action": "මකන්න",
"elapsed": "ගත වූූූ කාලය",
"filters_and_hosts_hint": "ඇඩ්ගාර්ඩ් හෝම් මූලික දැන්වීම් වාරණ නීති සහ ධාරක ගොනු පද ගැලපුම් තේරුම් ගනී.",
"no_blocklist_added": "අවහිර කිරීමේ ලැයිස්තු එකතු කර නැත",
"no_whitelist_added": "අවසර දීමේ ලැයිස්තු එකතු කර නැත",
"add_blocklist": "අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුවක් එකතු කරන්න",
"add_allowlist": "අවසර දීමේ ලැයිස්තුවක් එකතු කරන්න",
"cancel_btn": "අහෝසි කරන්න",
"enter_name_hint": "නම ඇතුළත් කරන්න",
"enter_url_or_path_hint": "ලැයිස්තුවක URL හෝ ස්ථීර මාර්ගයක් ඇතුළත් කරන්න",
"check_updates_btn": "යාවත්කාල පරීක්ෂා කරන්න",
"new_blocklist": "නව අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුව",
"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": "ඇඩ්ගාර්ඩ් හෝම් දැන් example.org වසම සඳහා 127.0.0.1 ලිපිනය ලබා දෙනු ඇත (නමුත් එහි උප ලිපින නොවේ).",
"example_comment": "! මෙතැන අදහස් දැක්වීමක්",
"example_comment_meaning": "විස්තර කිරීමක්",
"example_comment_hash": "# එසේම අදහස් දැක්වීමක්",
"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_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": "වසම් නාමය",
"domain_or_client": "වසම හෝ අනුග්‍රාහකය",
"type_table_header": "වර්ගය",
"response_table_header": "ප්‍රතිචාරය",
"response_code": "ප්‍රතිචාර කේතය",
"client_table_header": "අනුග්‍රාහකය",
"empty_response_status": "හිස්",
"show_all_filter_type": "සියල්ල පෙන්වන්න",
"refresh_btn": "නැවුම් කරන්න",
"previous_btn": "පෙර",
"next_btn": "ඊළඟ",
"loading_table_status": "පූරණය ‌වෙමින්...",
"page_table_footer_text": "පිටුව",
"rows_table_footer_text": "පේළි",
"updated_custom_filtering_toast": "අභිරුචි පෙරීමේ නීති යාවත්කාල කරන ලදි",
"rule_removed_from_custom_filtering_toast": "අභිරුචි පෙරීමේ නීති තුළින් නීතියක් ඉවත් කරන ලදි {{rule}}",
"rule_added_to_custom_filtering_toast": "අභිරුචි පෙරීමේ නීති තුළට මෙම නීතිය එකතු කරන ලදි {{rule}}",
"query_log_response_status": "තත්ත්වය: {{value}}",
"query_log_filtered": "{{filter}} මගින් පෙරහන් කරන ලදි",
"query_log_confirm_clear": "සම්පූර්ණ විමසුම් ලොගය ඉවත් කිරීමට අවශ්‍ය යැයි ඔබට විශ්වාසද?",
"query_log_clear": "විමසුම් ලොග ඉවත් කරන්න",
"query_log_retention": "විමසුම් ලොග රඳවා තබා ගැනීම",
"query_log_enable": "ලොගය සබල කරන්න",
"query_log_configuration": "ලොග වින්‍යාසය",
"query_log_disabled": "විමසුම් ලොගය අබල කර ඇති අතර එය <0>සැකසුම්</0> තුළ වින්‍යාසගත කළ හැකිය",
"query_log_strict_search": "ඉතා නිවැරදිව සෙවීම සඳහා ද්විත්ව උද්ධෘතය භාවිතා කරන්න",
"query_log_retention_confirm": "විමසුම් ලොගය රඳවා තබා ගැනීම වෙනස් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද? ඔබ කාල පරතරයෙහි අගය අඩු කළහොත් සමහර දත්ත නැති වී යනු ඇත",
"anonymize_client_ip": "අනුග්‍රාහකයෙහි අ.ජා. කෙ. (IP) නිර්නාමික කරන්න",
"anonymize_client_ip_desc": "ලොග සහ සංඛ්‍යාලේඛන තුළ අනුග්‍රාහකයේ සම්පූර්ණ අ.ජා. කෙ. ලිපිනය සුරකීමෙන් වලකින්න",
"dns_config": "ව.නා.ප. සේවාදායක වින්‍යාසය",
"blocking_mode": "අවහිර කරන ආකාරය",
"default": "සුපුරුදු",
"nxdomain": "නොපවතින වසම",
"refused": "REFUSED",
"null_ip": "අභිශූන්‍යය අ.ජා. කෙ.",
"custom_ip": "අභිරුචි අ.ජා. කෙ.",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"form_enter_rate_limit": "අනුපාත සීමාව ඇතුළත් කරන්න",
"rate_limit": "අනුපාත සීමාව",
"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": "අභිශූන්‍යය අ.ජා. කෙ. : ශුන්‍ය අ.ජා. කෙ. ලිපිනය සමඟ ප්‍රතිචාර දක්වයි (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": "ඇඩ්ගාර්ඩ් හෝම් වෙත සාදරයෙන් පිළිගනිමු!",
"install_welcome_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු ජාලය පුරා ඇති දැන්වීම් සහ ලුහුබැඳීම අවහිර කරන ව.නා.ප. සේවාදායකි. ඔබගේ මුළු ජාලය සහ සියලුම උපාංග පාලනය කිරීමට ඉඩ සලසා දීම එහි පරමාර්ථය යි, එයට අනුග්‍රාහක පාර්ශවීය වැඩසටහනක් භාවිතා කිරීම අවශ්‍ය නොවේ.",
"install_settings_title": "පරිපාලක වෙබ් අතුරු මුහුණත",
"install_settings_listen": "සවන් දෙන අතුරු මුහුණත",
"install_settings_port": "කවුළුව",
"form_error_port": "වලංගු කවුළුවක අගයක් ඇතුළත් කරන්න",
"install_settings_dns": "ව.නා.ප. සේවාදායකය",
"install_settings_dns_desc": "පහත ලිපිනයන්හි ව.නා.ප. සේවාදායකය භාවිතා කිරීම සඳහා ඔබගේ උපාංග හෝ රවුටරය වින්‍යාසගත කිරීමට අවශ්‍ය වනු ඇත:",
"install_settings_all_interfaces": "සියලුම අතුරුමුහුණත්",
"install_auth_title": "සත්‍යාපනය",
"install_auth_desc": "ඔබගේ ඇඩ්ගාර්ඩ් හෝම් පරිපාලක වෙබ් අතුරු මුහුණතට මුරපද සත්‍යාපනය වින්‍යාසගත කිරීම අතිශයින් නිර්දේශ කෙරේ. එය ඔබගේ ස්ථානීය ජාල‌යෙන් පමණක් ප්‍රවේශ විය හැකි වුවද, එය තව දුරටත් සීමා රහිත ප්‍රවේශයකින් ආරක්ෂා කර ගැනීම වැදගත් ය.",
"install_auth_username": "පරිශීලක නාමය",
"install_auth_password": "මුරපදය",
"install_auth_confirm": "මුරපදය තහවුරු කරන්න",
"install_auth_username_enter": "පරිශීලක නාමය ඇතුළත් කරන්න",
"install_auth_password_enter": "මුරපදය ඇතුළත් කරන්න",
"install_step": "පියවර",
"install_devices_title": "ඔබගේ උපාංග වින්‍යාසගත කරන්න",
"install_devices_desc": "ඇඩ්ගාර්ඩ් හෝම් භාවිතා කිරීම ආරම්භයට, ඔබගේ උපාංග එය පරිශ්‍රීලනයට වින්‍යාසගත කිරීම අවශ්‍ය වේ.",
"install_submit_title": "සුභ පැතුම්!",
"install_submit_desc": "පිහිටුවීමේ ක්‍රියා පටිපාටිය අවසන් වී ඇති අතර ඔබ ඇඩ්ගාර්ඩ් හෝම් භාවිතය ආරම්භ කිරීමට සූදානම්ය.",
"install_devices_router": "මාර්ගකාරකය",
"install_devices_router_desc": "මෙම පිහිටුම ඔබගේ නිවසේ මාර්ගකාරකයට සම්බන්ධ සියලුම උපාංග ස්වයංක්‍රීයව ආවරණය කරන අතර ඔබට ඒවා අතින් වින්‍යාසගත කිරීමට අවශ්‍ය නොවනු ඇත.",
"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": "'පහත සඳහන් ව.නා.ප. සේවාදායක ලිපින භාවිතා කරන්න' යන්න තෝරා ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින ඇතුළත් කරන්න.",
"install_devices_macos_list_1": "ඇපල් අයිකනය මත ක්ලික් කර පද්ධති මනාපයන් වෙත යන්න.",
"install_devices_macos_list_2": "ජාලය මත ක්ලික් කරන්න.",
"install_devices_macos_list_3": "ඔබගේ ලැයිස්තුවේ පළමු සම්බන්ධතාවය තෝරා උසස් මත ක්ලික් කරන්න.",
"install_devices_macos_list_4": "ව.නා.ප. (DNS) තීරුව තෝරා ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින ඇතුළත් කරන්න.",
"install_devices_android_list_1": "ඇන්ඩ්‍රොයිඩ් මෙනුවෙහි මුල් තිරයෙන්, සැකසීම් මත තට්ටු කරන්න.",
"install_devices_android_list_2": "මෙනුවේ වයි-ෆයි මත තට්ටු කරන්න. පවතින සියලුම ජාල ලැයිස්තුගත කර ඇති තිරය පෙන්වනු ඇත (ජංගම සම්බන්ධතාවය සඳහා අභිරුචි ව.නා.ප. සැකසිය නොහැක).",
"install_devices_android_list_3": "ඔබ සම්බන්ධ වී ඇති ජාලය මත දිගු වේලාවක් ඔබන්න, ඉන්පසුව ජාලය වෙනස් කිරීම මත තට්ටු කරන්න.",
"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": "වම්පස මෙනුවෙහි වයි-ෆයි තෝරන්න (ජංගම දුරකථන සඳහා ව.නා.ප. වින්‍යාසගත කිරීමට නොහැකිය).",
"install_devices_ios_list_3": "දැනට ක්‍රියාකාරී ජාලයයහෙි නම මත තට්ටු කරන්න.",
"install_devices_ios_list_4": "ව.නා.ප. (DNS) ක්ෂේත්‍රය තුළ ඔබගේ ඇඩ්ගාර්ඩ් හෝම් සේවාදායක ලිපින ඇතුළත් කරන්න.",
"get_started": "ආරම්භ කර ගන්න",
"next": "ඊළඟ",
"open_dashboard": "උපකරණ පුවරුව විවෘත කරන්න",
"install_saved": "සාර්ථකව සුරකින ලදි",
"encryption_title": "සංකේතාංකනය",
"encryption_desc": "ගුප්තකේතනය (HTTPS/TLS) සඳහා ව.නා.ප. සහ පරිපාලක වෙබ් අතුරු මුහුණත සහය දක්වයි",
"encryption_config_saved": "සංකේතාංකන වින්‍යාසය සුරකින ලදි",
"encryption_server": "සේවාදායක‌‌‌‌යේ නම",
"encryption_server_enter": "ඔබගේ වසම් නාමය ඇතුළත් කරන්න",
"encryption_redirect": "ස්වයංක්‍රීයව HTTPS වෙත හරවා යවන්න",
"encryption_redirect_desc": "සබල කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් ඔබව ස්වයංක්‍රීයව HTTP සිට HTTPS ලිපින වෙත හරවා යවනු ඇත.",
"encryption_https": "HTTPS කවුළුව",
"encryption_https_desc": "HTTPS කවුළුව වින්‍යාසගත කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් පරිපාලක අතුරුමුහුණත HTTPS හරහා ප්‍රවේශ විය හැකි අතර එය '/dns-query' ස්ථානයේ DNS-over-HTTPS ද ලබා දෙනු ඇත.",
"encryption_dot": "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": "තත්ත්වය",
"encryption_expire": "කල් ඉකුත් වීම",
"encryption_key": "පුද්ගලික යතුර",
"encryption_key_input": "ඔබගේ සහතිකය සඳහා PEM-කේතාංකනය කළ පුද්ගලික යතුර පිටපත් කර මෙහි අලවන්න.",
"encryption_enable": "සංකේතාංකනය සබල කරන්න (HTTPS, 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": "මාතෘකාව",
"encryption_issuer": "නිකුත් කරන්නා",
"encryption_hostnames": "ධාරක නාම",
"encryption_reset": "සංකේතාංකන සැකසුම් යළි පිහිටුවීමට අවශ්‍ය බව ඔබට විශ්වාස ද?",
"topline_expiring_certificate": "ඔබගේ SSL සහතිකය කල් ඉකුත්වීමට ආසන්න වී ඇත. <0>සංකේතාංකන සැකසුම්</0> යාවත්කාල කරන්න.",
"topline_expired_certificate": "ඔබගේ SSL සහතිකය කල් ඉකුත් වී ඇත. <0>සංකේතාංකන සැකසුම්</0> යාවත්කාල කරන්න.",
"form_error_port_range": "80-65535 පරාසය‌ෙ‌හි කවුළුවක අගයක් ඇතුළත් කරන්න",
"form_error_port_unsafe": "මෙය අනාරක්ෂිත කවුළුවකි",
"form_error_equal": "සමාන නොවිය යුතුය",
"form_error_password": "මුරපදය නොගැලපුුුුුුණි",
"reset_settings": "සැකසුම් යළි පිහිටුවන්න",
"update_announcement": "ඇඩ්ගාර්ඩ් හෝම් {{version}} දැන් ලබා ගත හැකිය! වැඩි විස්තර සඳහා <0>මෙහි ක්ලික් කරන්න</0>.",
"setup_guide": "පිහිටුවීමේ මාර්ගෝපදේශය",
"dns_addresses": "DNS ලිපින",
"dns_start": "ව.නා.ප. සේවාදායකය ආරම්භ වෙමින් පවතී",
"dns_status_error": "ව.නා.ප. සේවාදායකයේ තත්වය පරීක්ෂා කිරීමේදී දෝෂයකි",
"down": "පහත",
"fix": "නිරාකරණය කරන්න",
"dns_providers": "මෙහි තෝරා ගැනීමට <0>දැනුවත් ව.නා.ප. සපයන්නන්ගේ ලැයිස්තුවක්</0> ඇත.",
"update_now": "දැන් \tයාවත්කාල කරන්න",
"update_failed": "ස්වයංක්‍රීය යාවත්කාල කිරීම අසාර්ථක විය. අතින් යාවත්කාල කිරීමට කරුණාකර <a>පියවර අනුගමනය කරන්න</a>.",
"processing_update": "කරුණාකර රැඳී සිටින්න, ඇඩ්ගාර්ඩ් හෝම් යාවත්කාලීන වෙමින් පවතී",
"clients_title": "අනුග්‍රාහකයන්",
"clients_desc": "ඇඩ්ගාර්ඩ් හෝම් වෙත සම්බන්ධ කර ඇති උපාංග වින්‍යාසගත කරන්න",
"settings_global": "ගෝලීය",
"settings_custom": "අභිරුචි",
"table_client": "අනුග්‍රාහකය",
"table_name": "නම",
"save_btn": "සුරකින්න",
"client_add": "අනුග්‍රාහකයක් එකතු කරන්න",
"client_new": "නව අනුග්‍රාහකය",
"client_edit": "අනුග්‍රාහකය සංස්කරණය කරන්න",
"client_identifier": "හඳුන්වනය",
"ip_address": "අ.ජා. කෙ. (IP) ලිපිනය",
"client_identifier_desc": "අනුග්‍රාහකයන් අ.ජා. කෙ. (IP) ලිපිනයක් හෝ මා.ප්‍ර.පා. (MAC) ලිපිනයක් මගින් හඳුනාගත හැකිය. මා.ප්‍ර.පා. හඳුන්වනයක් ලෙස භාවිතා කළ හැක්කේ ඇඩ්ගාර්ඩ් හෝම් ද <0>DHCP සේවාදායකයක්</0> නම් පමණක් බව කරුණාවෙන් සලකන්න. ",
"form_enter_ip": "අ.ජා. කෙ. (IP) ඇතුළත් කරන්න",
"form_enter_mac": "MAC ඇතුළත් කරන්න",
"form_enter_id": "හඳුන්වනය ඇතුළත් කරන්න",
"form_add_id": "හඳුන්වනයක් එක් කරන්න",
"form_client_name": "අනුග්‍රාහකයේ නම ඇතුළත් කරන්න",
"name": "නම",
"client_global_settings": "ගෝලීය සැකසුම් භාවිතා කරන්න",
"client_deleted": "\"{{key}}\" අනුග්‍රාහකය සාර්ථකව ඉවත් කරන ලදි",
"client_added": "\"{{key}}\" අනුග්‍රාහකය සාර්ථකව එකතු කරන ලදි",
"client_updated": "\"{{key}}\" අනුග්‍රාහකය සාර්ථකව යාවත්කාල කරන ලදි",
"client_confirm_delete": "\"{{key}}\" අනුග්‍රාහකය ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?",
"list_confirm_delete": "මෙම ලැයිස්තුව ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාස ද?",
"auto_clients_desc": "ඇඩ්ගාර්ඩ් හෝම් භාවිතා කරන අනුග්‍රාහකයන්‌ගේ දත්ත, නමුත් වින්‍යාසය තුළ ගබඩා කර නොමැති",
"access_title": "ප්‍රවේශවීමට සැකසුම්",
"access_desc": "මෙහිදී ඔබට ඇඩ්ගාර්ඩ් හෝම් ව.නා.ප. සේවාදායකය සඳහා ප්‍රවේශ වී‌‌‌‌මේ නීති වින්‍යාසගත කළ හැකිය.",
"access_allowed_title": "අවසර ලත් අනුග්‍රාහකයන්",
"access_allowed_desc": "CIDR හෝ අ.ජා. කෙ. ලිපින ලැයිස්තුවක් වින්‍යාසගත කර ඇත්නම්, AdGuard Home විසින් එම අ.ජා. කෙ. ලිපින වලින් පමණක් ඉල්ලීම් පිළිගනු ඇත.",
"access_disallowed_title": "අවසර නොලත් අනුග්‍රාහකයන්",
"access_disallowed_desc": "CIDR හෝ අ.ජා. කෙ. ලිපින ලැයිස්තුවක් වින්‍යාසගත කර ඇත්නම්, ඇඩ්ගාර්ඩ් හෝම් විසින් එම අ.ජා. කෙ. ලිපින වලින් ඉල්ලීම් අත්හරිනු ඇත.",
"access_blocked_title": "අවහිර කළ වසම්",
"access_settings_saved": "ප්‍රවේශ වීමේ සැකසුම් සාර්ථකව සුරකින ලදි",
"updates_checked": "යාවත්කාලීන කිරීම් සාර්ථකව පරික්ෂා කර ඇත",
"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_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> භාවිතා කිරීම සඳහා ඇඩ්ගාර්ඩ් හෝම් සැකසුම් තුළ <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) ලිපිනය ‌හෝ වසම ඇතුළත් කරන්න ",
"form_error_domain_format": "වලංගු නොවන වසම් ආකෘතියකි",
"form_error_answer_format": "වලංගු නොවන පිළිතුරු ආකෘතියකි",
"configure": "වින්‍යාසගත කරන්න",
"main_settings": "ප්‍රධාන සැකසුම්",
"block_services": "විශේෂිත සේවාවන් අවහිර කරන්න",
"blocked_services": "අවහිර කළ සේවාවන්",
"blocked_services_desc": "ජනප්‍රිය අඩවි සහ සේවාවන් ඉක්මනින් අවහිර කිරීමට ඉඩ දෙයි.",
"blocked_services_saved": "අවහිර කළ සේවාවන් සාර්ථකව සුරකින ලදි",
"blocked_services_global": "ගෝලීය අවහිර කළ සේවාවන් භාවිතා කරන්න",
"blocked_service": "අවහිර කළ සේවාව",
"block_all": "සියල්ල අවහිර",
"unblock_all": "සියල්ල අනවහිර",
"encryption_certificate_path": "සහතිකයේ මාර්ගය",
"encryption_private_key_path": "පුද්ගලික යතුරෙහි මාර්ගය",
"encryption_certificates_source_path": "සහතික ගොනු‌ව‌ෙහි මාර්ගය සකසන්න",
"encryption_certificates_source_content": "සහතිකවල අන්තර්ගත අලවන්න",
"encryption_key_source_path": "පුද්ගලික යතුරක ගොනුවක් සකසන්න",
"encryption_key_source_content": "පුද්ගලික යතු‌රෙහි අන්තර්ගත අලවන්න",
"stats_params": "සංඛ්‍යාලේඛන වින්‍යාසය",
"config_successfully_saved": "වින්‍යාසය සාර්ථකව සුරකින ලදි",
"interval_24_hour": "පැය 24",
"interval_days": "{{count}} දිනය",
"interval_days_plural": "දින {{count}}",
"domain": "වසම",
"answer": "පිළිතුර",
"filter_added_successfully": "පෙරහන සාර්ථකව එකතු කරන ලදි",
"filter_updated": "ලැයිස්තුව සාර්ථකව යාවත්කාලීන කර ඇත",
"statistics_configuration": "සංඛ්‍යාලේඛන වින්‍යාසය",
"statistics_retention": "සංඛ්‍යාලේඛන රඳවා තබා ගැනීම",
"statistics_retention_desc": "ඔබ කාල පරතරය අඩු කළහොත් සමහර දත්ත නැති වනු ඇත",
"statistics_clear": " සංඛ්‍යාලේඛන ඉවත් කරන්න",
"statistics_clear_confirm": "සංඛ්‍යාලේඛන ඉවත් කිරීමට අවශ්‍ය බව ඔබට විශ්වාස ද?",
"statistics_retention_confirm": "සංඛ්‍යාලේඛන රඳවා තබා ගැනීම වෙනස් කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද? ඔබ කාල පරතරයෙහි අගය අඩු කළහොත් සමහර දත්ත නැති වී යනු ඇත",
"statistics_cleared": "සංඛ්‍යාලේඛන සාර්ථකව ඉවත් කරන ලදි",
"interval_hours": "පැය {{count}}",
"interval_hours_plural": "පැය {{count}}",
"filters_configuration": "පෙරහන් වින්‍යාසය",
"filters_enable": "පෙරහන් සබල කරන්න",
"filters_interval": "පෙරහන් යාවත්කාල කාල පරතරය",
"disabled": "අබල කර ඇත",
"username_label": "පරිශීලක නාමය",
"username_placeholder": "පරිශීලක නාමය ඇතුළත් කරන්න",
"password_label": "මුරපදය",
"password_placeholder": "මුරපදය ඇතුළත් කරන්න",
"sign_in": "පුරන්න",
"sign_out": "වරන්න",
"forgot_password": "මුරපදය අමතක වුණා ද?",
"forgot_password_desc": "ඔබගේ පරිශීලක ගිණුම සඳහා නව මුරපදයක් සෑදීමට කරුණාකර <0>මෙම පියවර</0> අනුගමනය කරන්න.",
"location": "ස්ථානය",
"orgname": "සංවිධානයේ නම",
"netname": "ජාල‌යේ නම",
"network": "ජාලය",
"descr": "විස්තරය",
"whois": "Whois",
"blocked_by_response": "ප්‍රතිචාරය අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
"blocked_by_cname_or_ip": "අන්. නාමයක් (CNAME) හෝ අ.ජා. කෙ. මගින් අවහිර කර ඇත",
"try_again": "නැවත උත්සහා කරන්න",
"example_rewrite_domain": "මෙම වසම් නාමය සඳහා පමණක් ප්‍රතිචාර නැවත ලියන්න.",
"example_rewrite_wildcard": "<0>example.org</0> සහ එහි සියලුම උප වසම් සඳහා ප්‍රතිචාර නැවත ලියයි.",
"rewrite_domain_name": "වසම් නාමය: අන්. නා. (CNAME) වාර්තාවක් එක් කරන්න",
"disable_ipv6": "IPv6 අබල කරන්න",
"disable_ipv6_desc": "මෙම අංගය සක්‍රීය කර ඇත්නම්, IPv6 ලිපින සඳහා වන සියලුම ව.නා.ප. විමසුම් (AAAA වර්ගය) අතහැර දමනු ලැබේ.",
"fastest_addr": "වේගවත්ම අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය",
"autofix_warning_text": "ඔබ \"නිරාකරණය කරන්න\" බොත්තම එබුවහොත්, ඔබගේ පද්ධතිය ඇඩ්ගාර්ඩ් හෝම් ව.නා.ප. සේවාදායකය භාවිතා කිරීමට වින්‍යාසගත කරනු ඇත.",
"tags_title": "හැඳුනුම් සංකේත",
"tags_desc": "අනුග්‍රාහකයට අනුරූප වන හැඳුනුම් සංකේත ඔබට තෝරා ගත හැකිය. පෙරහන් නීති වලට හැඳුනුම් සංකේත ඇතුළත් කළ හැකි අතර ඒවා වඩාත් නිවැරදිව යෙදීමට ඔබට ඉඩ සලසයි. <0>වැඩිදුර ඉගෙන ගන්න</0>",
"form_select_tags": "අනුග්‍රාහක හැඳුනුම් සංකේත",
"check_title": "පෙරීම පරීක්ෂා කරන්න",
"check": "පරීක්ෂා කරන්න",
"form_enter_host": "ධාරක නාමයක් ඇතුළත් කරන්න",
"filtered_custom_rules": "අභිරුචි පෙරීමේ නීති මගින් පෙරහන් කරන ලදි",
"choose_from_list": "ලැයිස්තුවෙන් තෝරන්න",
"add_custom_list": "අභිරුචි ලැයිස්තුවක් එකතු කරන්න",
"host_whitelisted": "ධාරකය සුදු ලැයිස්තු ගත කර ඇත",
"check_ip": "අ.ජා. කෙ. (IP) ලිපින: {{ip}}",
"check_cname": "අන්. නාමය (CNAME): {{cname}}",
"check_reason": "හේතුව: {{reason}}",
"check_rule": "නීතිය: {{rule}}",
"check_service": "සේවාවෙහි නම: {{service}}",
"check_not_found": "ඔබගේ පෙරහන් ලැයිස්තු තුළ සොයා ගත නොහැක",
"client_confirm_block": "{{ip}} අනුග්‍රාහකය අවහිර කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?",
"client_confirm_unblock": "{{ip}} අනුග්‍රාහකය අනවහිර කිරීමට අවශ්‍ය බව ඔබට විශ්වාසද?",
"client_blocked": "අනුග්‍රාහකය \"{{ip}}\" සාර්ථකව අවහිර කරන ලදි",
"client_unblocked": "අනුග්‍රාහකය \"{{ip}}\" සාර්ථකව අනවහිර කරන ලදි",
"static_ip": "ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනය",
"static_ip_desc": "ඇඩ්ගාර්ඩ් හෝම් යනු සේවාදායකයක් බැවින් එය නිසි ලෙස ක්‍රියා කිරීමට ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනයක් අවශ්‍ය වේ. එසේ නොමැතිනම්, යම් අවස්ථාවක දී ඔබගේ මාර්ගකාරකය මෙම උපාංගයට වෙනත් අ.ජා. කෙ. ලිපිනයක් ලබා දිය හැකිය.",
"set_static_ip": "ස්ථිතික අ.ජා. කෙ. (IP) ලිපිනයක් සකසන්න",
"install_static_ok": "සුභ තොරතුරක්! ස්ථිතික අන්තර්ජාල කෙටුම්පත් (IP) ලිපිනය දැනටමත් වින්‍යාසගත කර ඇත",
"install_static_error": "මෙම ජාල අතුරුමුහුණත සඳහා ඇඩ්ගාර්ඩ් හෝම් හට එය ස්වයංක්‍රීයව වින්‍යාසගත කළ නොහැක. කරුණාකර මෙය අතින් කරන්නේ කෙසේද යන්න පිළිබඳ උපදෙස් සොයා ගන්න.",
"install_static_configure": "ගතික අ.ජා. කෙ. (IP) ලිපිනයක් භාවිතා කරන බව අපි අනාවරණය කර ‌ග‌ෙන ඇත්තෙමු - <0>{{ip}}</0>. එය ඔබගේ ස්ථිතික ලිපිනය ලෙස භාවිතා කිරීමට අවශ්‍යද?",
"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": "අවහිර කළ තර්ජන",
"allowed": "අවසර ලත්",
"filtered": "පෙරහන් කරන ලද",
"rewritten": "නැවත ලියන ලද",
"safe_search": "ආරක්ෂිත සෙවීම",
"blocklist": "අවහිර කිරී‌‌‌‌‌මේ ලැයිස්තුව",
"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",
@@ -11,6 +12,8 @@
"save_config": "Uložiť konfiguráciu",
"enabled_dhcp": "DHCP server zapnutý",
"disabled_dhcp": "DHCP server vypnutý",
"unavailable_dhcp": "DHCP nie je dostupné",
"unavailable_dhcp_desc": "AdGuard Home nemôže vo vašom OS prevádzkovať DHCP server",
"dhcp_title": "DHCP server (experimentálne!)",
"dhcp_description": "Ak Váš smerovač neposkytuje možnosť nastaviť DHCP, môžete použiť vlastný zabudovaný DHCP server AdGuard.",
"dhcp_enable": "Zapnúť DHCP server",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP statické prenájmy",
"dhcp_leases_not_found": "Neboli nájdené žiadne DHCP prenájmy",
"dhcp_config_saved": "Konfigurácia DHCP servera uložená",
"dhcp_ipv4_settings": "Nastavenia DHCP IPv4",
"dhcp_ipv6_settings": "Nastavenia DHCP IPv6",
"form_error_required": "Povinná položka",
"form_error_ip4_format": "Nesprávny formát IPv4",
"form_error_ip6_format": "Nesprávny formát IPv6",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Neplatný formát client ID",
"form_error_positive": "Musí byť väčšie ako 0",
"form_error_negative": "Musí byť číslo 0 alebo viac",
"range_end_error": "Musí byť väčšie ako začiatok rozsahu",
"dhcp_form_gateway_input": "IP brána",
"dhcp_form_subnet_input": "Maska podsiete",
"dhcp_form_range_title": "Rozsah IP adries",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Nastavenia šifrovania",
"dhcp_settings": "Nastavenia DHCP",
"upstream_dns": "Upstream DNS servery",
"upstream_dns_hint": "Ak toto pole ponecháte prázdne, AdGuard Home použije <a href='https://www.quad9.net/' target='_blank'>Quad9</a> ako upstream.",
"upstream_dns_help": "Zadajte adresy serverov jednu na riadok. <a>Získajte viac informácií</a> o konfigurácii DNS serverov na strane servera.",
"upstream_dns_configured_in_file": "Konfigurované v {{path}}",
"test_upstream_btn": "Test upstreamov",
"upstreams": "Upstreams",
"apply_btn": "Použiť",
@@ -181,6 +188,7 @@
"example_upstream_regular": "radová DNS (cez UDP)",
"example_upstream_dot": "šifrované <0>DNS-over-TLS</0>",
"example_upstream_doh": "šifrované <0>DNS-over-HTTPS</0>",
"example_upstream_doq": "šifrované <0>DNS-over-QUIC</0>",
"example_upstream_sdns": "môžete použiť <0>DNS pečiatky</0> pre <1>DNSCrypt</1> alebo <2>DNS-over-HTTPS</2>",
"example_upstream_tcp": "radová DNS (cez TCP)",
"all_lists_up_to_date_toast": "Všetky zoznamy sú už aktuálne",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "Server \"{{key}}\": nemohol byť použitý, skontrolujte, či ste ho správne napísali",
"unblock": "Odblokovať",
"block": "Blokovať",
"disallow_this_client": "Zablokovať tohto klienta",
"allow_this_client": "Povoliť tohto klienta",
"block_for_this_client_only": "Blokovať len pre tohto klienta",
"unblock_for_this_client_only": "Odblokovať len pre tohto klienta",
"time_table_header": "Čas",
"date": "Dátum",
"domain_name_table_header": "Meno domény",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Stránka",
"rows_table_footer_text": "riadky",
"updated_custom_filtering_toast": "Aktualizované vlastné filtračné pravidlá",
"rule_removed_from_custom_filtering_toast": "Pravidlo odstránené z vlastných filtračných pravidiel",
"rule_added_to_custom_filtering_toast": "Pravidlo pridané do vlastných filtračných pravidiel",
"rule_removed_from_custom_filtering_toast": "Pravidlo odstránené z vlastných filtračných pravidiel: {{rule}}",
"rule_added_to_custom_filtering_toast": "Pravidlo pridané do vlastných filtračných pravidiel: {{rule}}",
"query_log_response_status": "Stav: {{value}}",
"query_log_filtered": "Vyfiltrované pomocou {{filter}}",
"query_log_confirm_clear": "Naozaj chcete vymazať celý denník dopytov?",
@@ -230,21 +242,25 @@
"blocking_mode": "Spôsob blokovania",
"default": "Predvolené",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Nulová IP adresa",
"custom_ip": "Vlastná IP adresa",
"blocking_ipv4": "Blokovanie IPv4",
"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ť (0: neobmedzene)",
"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 NXDOMAIN, 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)",
"blocking_mode_custom_ip": "Vlastná IP adresa: Odpovedzte s manuálne nastavenou IP adresou",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Ak je nakonfigurovaný HTTPS port, AdGuard Home administrátorské rozhranie bude prístupné cez HTTPS a bude tiež poskytovať DNS-cez-HTTPS na '/dns-query'.",
"encryption_dot": "Port DNS-cez-TLS",
"encryption_dot_desc": "Ak je tento port nakonfigurovaný, AdGuard Home bude na tomto porte spúšťať DNS-cez-TLS server.",
"encryption_doq": "Port DNS-cez-QUIC",
"encryption_doq_desc": "Ak je tento port nakonfigurovaný, AdGuard Home na tomto porte spustí server DNS-over-QUIC. Je to experimentálne a nemusí to byť spoľahlivé. Momentálne tiež nie je príliš veľa klientov, ktorí by ju podporovali.",
"encryption_certificates": "Certifikáty",
"encryption_certificates_desc": "Ak chcete používať šifrovanie, musíte pre svoju doménu poskytnúť platný reťazec certifikátov SSL. Certifikát môžete získať bezplatne na adrese <0>{{link}}</0> alebo si ho môžete kúpiť od jedného z dôveryhodných certifikačných orgánov.",
"encryption_certificates_input": "Skopírujte alebo prilepte sem certifikáty vo formáte PEM.",
@@ -354,7 +372,7 @@
"fix": "Opraviť",
"dns_providers": "Tu je <0>zoznam známych poskytovateľov DNS</0>, z ktorého si vyberiete.",
"update_now": "Aktualizovať teraz",
"update_failed": "Automatická aktualizácia zlyhala. Prosím <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>sledujte postup</a> pre manuálnu aktualizáciu.",
"update_failed": "Automatická aktualizácia zlyhala. Prosím <a>sledujte postup</a> pre manuálnu aktualizáciu.",
"processing_update": "Čakajte prosím, AdGuard Home sa aktualizuje",
"clients_title": "Klienti",
"clients_desc": "Konfigurácia zariadení pripojených k AdGuard Home",
@@ -399,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.",
@@ -512,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}}\"?",
@@ -546,13 +566,12 @@
"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_min_override_desc": "Prepíše hodnotu TTL (minimálnu) prijatú z upstream servera. Táto hodnota nemôže byť väčšia ako 3600 (1 hodina)",
"cache_ttl_max_override_desc": "Prepíše hodnotu TTL (maximálnu) prijatú z upstream servera",
"min_exceeds_max_value": "Minimálna hodnota je väčšia ako maximálna",
"value_not_larger_than": "Hodnota nemôže byť väčšia ako {{maximum}}",
"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ť",
"filter_category_regional": "Regionálne",
@@ -561,6 +580,11 @@
"filter_category_security_desc": "Zoznamy, ktoré sa špecializujú na blokovanie domén škodlivého softvéru alebo podvodov",
"filter_category_regional_desc": "Zoznamy zamerané na regionálne reklamy a sledovacie servery",
"filter_category_other_desc": "Iné blokovacie zoznamy",
"setup_config_to_enable_dhcp_server": "K zapnutiu DHCP servera je potrebné nastaviť konfiguráciu",
"original_response": "Pôvodná odozva",
"click_to_view_queries": "Kliknite pre zobrazenie dopytov"
"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",
@@ -11,6 +12,8 @@
"save_config": "Shrani konfiguracijo",
"enabled_dhcp": "Strežnik DHCP je omogočen",
"disabled_dhcp": "Strežnik DHCP je onemogočen",
"unavailable_dhcp": "DHCP ni na voljo",
"unavailable_dhcp_desc": "AdGuard Home ne more zagnati strežnika DHCP v vašem operacijskem sistemu",
"dhcp_title": "Strežnik DHCP (poskusno!)",
"dhcp_description": "Če vaš usmerjevalnik ne nudi nastavitev DHCP, lahko uporabite AdGuardov vgrajen DHCP strežnik.",
"dhcp_enable": "Omogoči strežnik DHCP",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP statični najemi",
"dhcp_leases_not_found": "Ni najdenih najemov DHCP",
"dhcp_config_saved": "Shranjena konfiguracija DHCP strežnika",
"dhcp_ipv4_settings": "Nastavitve DHCP IPv4",
"dhcp_ipv6_settings": "Nastavitve DHCP IPv6",
"form_error_required": "Zahtevano polje",
"form_error_ip4_format": "Neveljaven format IPv4",
"form_error_ip6_format": "Neveljaven format IPv6",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Neveljaven format ID odjemalca",
"form_error_positive": "Mora biti večja od 0",
"form_error_negative": "Mora biti enako ali več kot 0",
"range_end_error": "Mora biti večji od začtka razpona",
"dhcp_form_gateway_input": "IP prehoda",
"dhcp_form_subnet_input": "Maska podomrežja",
"dhcp_form_range_title": "Razpon naslovov IP",
@@ -109,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'",
@@ -127,7 +133,8 @@
"encryption_settings": "Nastavitve šifriranja",
"dhcp_settings": "Nastavitve DHCP",
"upstream_dns": "Zagonski DNS strežniki",
"upstream_dns_hint": "Če pustite to polje prazno, bo AdGuard Home uporabil <a href='https://www.quad9.net/' target='_blank'>Quad9</a> kot tok navzgor.",
"upstream_dns_help": "Vnesite naslove strežnikov, enega na vrstico. <a>Več o tem</a> o konfiguriranju zgornjih strežnikov DNS.",
"upstream_dns_configured_in_file": "Nastavljen v {{path}}",
"test_upstream_btn": "Preizkusi upstreame",
"upstreams": "Tokovi navzgor",
"apply_btn": "Uporabi",
@@ -181,6 +188,7 @@
"example_upstream_regular": "redni DNS (nad UDP)",
"example_upstream_dot": "šifriran <0>DNS-prek-TLS</0>",
"example_upstream_doh": "šifriran <0>DNS-prek-HTTPS</0>",
"example_upstream_doq": "šifriran <0>DNS-prek-QUIC</0>",
"example_upstream_sdns": "lahko uporabite <0>DNS Žige</0> za reševalce <1>DNSCrypt</1> ali <2>DNS-prek-HTTPS</2>",
"example_upstream_tcp": "redni DNS (nad TCP)",
"all_lists_up_to_date_toast": "Vsi seznami so že posodobljeni",
@@ -189,6 +197,10 @@
"dns_test_not_ok_toast": "Ni mogoče uporabiti: strežnika \"{{key}}\". Preverite, ali ste ga pravilno napisali",
"unblock": "Omogoči",
"block": "Onemogoči",
"disallow_this_client": "Onemogoči tega odjemalca",
"allow_this_client": "Dovoli tega odjemalca",
"block_for_this_client_only": "Onemogoči samo za tega odjemalca",
"unblock_for_this_client_only": "Omogoči samo za tega odjemalca",
"time_table_header": "Čas",
"date": "Datum",
"domain_name_table_header": "Ime domene",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Stran",
"rows_table_footer_text": "vrstic",
"updated_custom_filtering_toast": "Posodobljena pravila filtriranja po meri",
"rule_removed_from_custom_filtering_toast": "Pravilo je odstranjeno iz pravil filtriranja po meri",
"rule_added_to_custom_filtering_toast": "Pravilo je dodano pravilom filtriranja po meri",
"rule_removed_from_custom_filtering_toast": "Pravilo je odstranjeno iz pravil filtriranja po meri: {{rule}}",
"rule_added_to_custom_filtering_toast": "Pravilo je dodano pravilom filtriranja po meri: {{rule}}",
"query_log_response_status": "Stanje: {{value}}",
"query_log_filtered": "Filtriran z {{filter}}",
"query_log_confirm_clear": "Ali ste prepričani, da želite počistiti celoten dnevnik poizvedb?",
@@ -230,21 +242,25 @@
"blocking_mode": "Način zaviranja",
"default": "Privzeto",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Prazen IP",
"custom_ip": "IP po meri",
"blocking_ipv4": "Onemogočanje IPv4",
"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",
"edns_enable": "Omogoči podmrežje odjemalcev EDNS",
"edns_cs_desc": "Če je omogočeno, bo AdGuard Home pošiljal podmrežja odjemalca na strežnike DNS.",
"rate_limit_desc": "Število zahtev na sekundo, ki jih lahko pošlje posamezni odjemalec (0: neomejeno)",
"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 NXDOMAIN, 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)",
"blocking_mode_custom_ip": "IP po meri: Odziv z ročno nastavljenim naslovom IP",
@@ -321,6 +337,8 @@
"encryption_https_desc": "Če so vrata HTTPS konfigurirana, bo skrbniški vmesnik AdGuard Home dostopen prek protokola HTTPS, prav tako pa bo zagotovil DNS-prek-HTTPS na mestu '/dns-query'.",
"encryption_dot": "Vrata DNS-prek-TLS",
"encryption_dot_desc": "Če so ta vrata konfigurirana, bo AdGuard Home na teh vratih zagnal DNS-prek-TLS strežnika.",
"encryption_doq": "DNS-prek-vrat QUIC",
"encryption_doq_desc": "Če so nastavljena ta vrata bo AdGuard Home na teh vratih zagnal strežnik DNS-prek-QUIC. To je eksperimentalno in morda ni zanesljivo. Prav tako trenutno ni preveč odjemalcev, ki to podpirajo.",
"encryption_certificates": "Digitalna potrdila",
"encryption_certificates_desc": "Za uporabo šifriranja morate za svojo domeno zagotoviti veljavno verigo potrdil SSL. Brezplačno digitalno potrdilo lahko dobite na <0>{{link}}</0> ali pa ga kupite pri enem od zaupanja vrednih overiteljev.\n\n",
"encryption_certificates_input": "Tukaj kopirajte/prilepite PEM šifrirana digitalna potrdila.",
@@ -354,7 +372,7 @@
"fix": "Popravi",
"dns_providers": "Tukaj je <0>seznam znanih ponudnikov DNS</0>, med katerimi lahko izbirate.",
"update_now": "Posodobi zdaj",
"update_failed": "Samodejna posodobitev ni uspela. Prosimo <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>sledite korakom</a> ra zočno posodobitev.",
"update_failed": "Samodejna posodobitev ni uspela. Prosimo <a>sledite korakom</a>, da ročno posodobite.",
"processing_update": "Prosimo, počakajte. AdGuard Home se posodablja!",
"clients_title": "Odjemalci",
"clients_desc": "Konfigurirajte naprave, ki so povezane z AdGuard Home",
@@ -390,7 +408,7 @@
"access_allowed_desc": "Seznam naslovov CIDR ali IP. Če je konfiguriran, bo AdGuard Home sprejel zahteve samo od teh teh IP naslovov.",
"access_disallowed_title": "Zavrnjeni odjemalci",
"access_disallowed_desc": "Seznam naslovov CIDR ali IP. Če je konfiguriran, bo AdGuard Home spustil zahteve iz teh IP naslovov.",
"access_blocked_title": "Nedovoljene domene",
"access_blocked_title": "Prepovedane domene",
"access_blocked_desc": "Tega ne zamenjujte s filtri. AdGuard Home bo v spustil poizvedbe DNS s temi domenami v vprašanju poizvedbe. Tu lahko določite natančna imena domen, nadomestne znake in pravila urlfilter, npr. 'primer.org', '*.primer.org' or '||primer.org^'.",
"access_settings_saved": "Nastavitve dostopa so uspešno shranjene",
"updates_checked": "Posodobitve so uspešno preverjene",
@@ -399,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.",
@@ -512,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}}\"?",
@@ -546,13 +566,12 @@
"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. Ta vrednost ne sme presegati 3600 (1 ura)",
"cache_ttl_max_override_desc": "Vrednost preglasovanja TTL (največja), prejeta od zgornjega strežnika",
"min_exceeds_max_value": "Najmanjša vrednost presega največjo vrednost",
"value_not_larger_than": "Vrednost ne sme biti večja od {{maximum}}",
"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",
"filter_category_regional": "Področno",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "Seznami, ki so specializirani za onemogočanje domen zlonamernih programov, lažnega predstavljanja ali prevar",
"filter_category_regional_desc": "Seznami, ki so osredotočeni na področne oglase in strežnike za sledenje",
"filter_category_other_desc": "Drugi seznami za zaviranje",
"setup_config_to_enable_dhcp_server": "Nastavitve za omogočanje strežnika DHCP",
"original_response": "Izviren odgovor",
"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."
"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",
@@ -11,6 +12,8 @@
"save_config": "Sačuvaj konfiguraciju",
"enabled_dhcp": "DHCP server uključen",
"disabled_dhcp": "DHCP server isključen",
"unavailable_dhcp": "DHCP nije dostupan",
"unavailable_dhcp_desc": "AdGuard Home Ne može da pokrene DHCP na vašem OS",
"dhcp_title": "DHCP server (eksperimentalno!)",
"dhcp_description": "Ako vaš ruter nema DHCP postavke, možete koristiti AdGuard' ugrađen DHCP server.",
"dhcp_enable": "Uključi DHCP server",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP statička pozajmljivanja",
"dhcp_leases_not_found": "DHCP pozajmljivanja nisu pronađena",
"dhcp_config_saved": "Sačuvaj DHCP konfiguraciju servera",
"dhcp_ipv4_settings": "DHCP IPv4 postavke",
"dhcp_ipv6_settings": "DHCP IPv6 postavke",
"form_error_required": "Obavezno polje",
"form_error_ip4_format": "Nevažeći IPv4 format",
"form_error_ip6_format": "Nevažeći IPv6 format",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "Nevažeći format klijenta",
"form_error_positive": "Mora biti veće od 0",
"form_error_negative": "Mora biti 0 ili veće",
"range_end_error": "Mora biti veće od početnog opsega",
"dhcp_form_gateway_input": "IP mrežnog prolaza",
"dhcp_form_subnet_input": "Subnet mask",
"dhcp_form_range_title": "Opseg IP adresa",
@@ -109,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",
@@ -127,7 +133,8 @@
"encryption_settings": "Postavke šifrovanja",
"dhcp_settings": "DHCP postavke",
"upstream_dns": "Upstream DNS serveri",
"upstream_dns_hint": "Ako ovo polje ostavite prazno, AdGuard Home će koristiti <a href='https://www.quad9.net/' target='_blank'>Quad9</a> kao upstream.",
"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",
@@ -181,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",
@@ -189,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",
@@ -208,8 +220,8 @@
"page_table_footer_text": "Stranica",
"rows_table_footer_text": "redovi",
"updated_custom_filtering_toast": "Ažurirana prilagođena pravila filtriranja",
"rule_removed_from_custom_filtering_toast": "Pravilo uklonjeno iz prilagođenih pravila filtriranja",
"rule_added_to_custom_filtering_toast": "Pravilo dodato u prilagođena pravila filtriranja",
"rule_removed_from_custom_filtering_toast": "Pravilo uklonjeno iz prilagođenih pravila filtriranja: {{rule}}",
"rule_added_to_custom_filtering_toast": "Pravilo dodato u prilagođena pravila filtriranja: {{rule}}",
"query_log_response_status": "Stanje: {{value}}",
"query_log_filtered": "Filtrirano od {{filter}}",
"query_log_confirm_clear": "Jeste li sigurni da želite da očistite ceo dnevnik unosa?",
@@ -230,12 +242,15 @@
"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",
@@ -244,7 +259,8 @@
"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 NXDOMAIN 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_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",
@@ -321,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.",
@@ -354,7 +372,7 @@
"fix": "Popravi",
"dns_providers": "Ovo je a <0>lista poznatih DNS dobavljača</0> sa koje možete da izaberete.",
"update_now": "Ažuriraj sada",
"update_failed": "Automatsko ažuriranje nije uspelo. Molimo vas <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>pratite korake</a> za ručno ažuriranje.",
"update_failed": "Automatsko ažuriranje nije uspelo. Molimo vas <a>pratite korake</a> za ručno ažuriranje.",
"processing_update": "Molimo sačekajte. AdGuard Home se ažurira",
"clients_title": "Klijenti",
"clients_desc": "Konfigurišite uređaje koji su povezani na AdGuard Home",
@@ -399,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.",
@@ -512,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}}\"?",
@@ -551,8 +571,7 @@
"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",
"min_exceeds_max_value": "Najmanja vrednost je dosegla najveću vrednost",
"value_not_larger_than": "Vrednost ne može biti veća od {{maximum}}",
"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",
@@ -561,6 +580,11 @@
"filter_category_security_desc": "Lista specijalizovana za blokiranje štetnog softvera, štetnih i fišing domena",
"filter_category_regional_desc": "Lista koja se usredsređuje na regionalne reklame i servere praćenja",
"filter_category_other_desc": "Ostale liste blokiranja",
"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"
"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.",
"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",
@@ -103,7 +103,6 @@
"encryption_settings": "Krypteringsinställningar",
"dhcp_settings": "DHCP-inställningar",
"upstream_dns": "Upstream DNS-servrar",
"upstream_dns_hint": "Om du låter fältet vara tomt kommer AdGuard Home att använda <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> för uppström.",
"test_upstream_btn": "Testa uppströmmar",
"apply_btn": "Tillämpa",
"disabled_filtering_toast": "Filtrering bortkopplad",
@@ -162,8 +161,8 @@
"page_table_footer_text": "Sida",
"rows_table_footer_text": "rader",
"updated_custom_filtering_toast": "Uppdaterade de egna filterreglerna",
"rule_removed_from_custom_filtering_toast": "Regel borttagen från de egna filterreglerna",
"rule_added_to_custom_filtering_toast": "Regel tillagd till de egna filterreglerna",
"rule_removed_from_custom_filtering_toast": "Regel borttagen från de egna filterreglerna: {{rule}}",
"rule_added_to_custom_filtering_toast": "Regel tillagd till de egna filterreglerna: {{rule}}",
"query_log_response_status": "Status: {{value}}",
"query_log_filtered": "Filtrerat av {{filter}}",
"query_log_confirm_clear": "Är du säker på att du vill rensa hela förfrågningsloggen?",
@@ -274,7 +273,7 @@
"fix": "Fixa",
"dns_providers": "Här är en <0>lista över kända DNS-leverantörer</0> att välja från.",
"update_now": "Uppdatera nu",
"update_failed": "Automatisk uppdatering misslyckad. Var god <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>följ stegen</a> för att uppdatera manuellt.",
"update_failed": "Automatisk uppdatering misslyckad. Var god <a>följ stegen</a> för att uppdatera manuellt.",
"processing_update": "Vänta, AdGuard Home uppdateras",
"clients_title": "Klienter",
"clients_desc": "Konfigurera enheter uppkopplade mot AdGuard Home",
@@ -315,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",
@@ -108,7 +108,6 @@
"encryption_settings": "การตั้งค่าการเข้ารหัส",
"dhcp_settings": "การตั้งค่า DHCP",
"upstream_dns": "เซิร์ฟเวอร์ DNS ต้นทาง",
"upstream_dns_hint": "The current approved translation is not correct, please review my translation:\n\"หากคุณเว้นช่องนี้ว่างไว้ AdGuard Home จะใช้ <a href='https://www.quad9.net/' target='_blank'>Quad9</a> เป็นต้นทาง\"",
"test_upstream_btn": "ทดสอบต้นทาง",
"upstreams": "ต้นทาง",
"apply_btn": "นำไปใช้",
@@ -167,8 +166,8 @@
"page_table_footer_text": "หน้า",
"rows_table_footer_text": "ตาราง",
"updated_custom_filtering_toast": "อัปเดตกฎการกรองที่กำหนดเอง",
"rule_removed_from_custom_filtering_toast": "ลบกฎออกจากกฎการกรองที่กำหนดเองแล้ว",
"rule_added_to_custom_filtering_toast": "เพิ่มกฎในกฎการกรองที่กำหนดเองแล้ว",
"rule_removed_from_custom_filtering_toast": "ลบกฎออกจากกฎการกรองที่กำหนดเองแล้ว {{rule}}",
"rule_added_to_custom_filtering_toast": "เพิ่มกฎในกฎการกรองที่กำหนดเองแล้ว {{rule}}",
"query_log_response_status": "สถานะ: {{value}}",
"query_log_filtered": "กรองโดย {{filter}}",
"query_log_confirm_clear": "คุณแน่ใจหรือไม่ว่าต้องการลบบันทึกการใช้งานทั้งหมด?",
@@ -192,10 +191,8 @@
"rate_limit": "จำกัดอัตรา",
"edns_enable": "เปิดใช้งานซับเน็ตไคลเอ็นต์ EDNS",
"edns_cs_desc": "หากเปิดใช้งาน AdGuard Home จะส่งซับเน็ตของไคลเอนต์ไปยังเซิร์ฟเวอร์ DNS",
"rate_limit_desc": "จำนวนการร้องขอต่อวินาทีที่อนุญาตให้ไคลเอนต์เดียวทำ (0: ไม่จำกัดจำนวน)",
"blocking_ipv4_desc": "ที่อยู่ IP ที่จะส่งคืนสำหรับคำขอที่ถูกปิดกั้น",
"blocking_ipv6_desc": "ที่อยู่ IP ที่จะส่งคืนสำหรับคำขอ AAAA ที่ถูกปิดกั้น",
"blocking_mode_default": "เริ่มต้น: ตอบสนองด้วย NXDOMAIN เมื่อถูกปิดกั้นโดยกฎสไตล์ปิดกั้นโฆษณา; ตอบกลับด้วยที่อยู่ 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 ที่ตั้งค่าด้วยตนเอง",
@@ -301,7 +298,7 @@
"fix": "ซ่อม",
"dns_providers": "นี่คือรายการ <0>ของผู้ให้บริการ DNS ที่เป็นที่รู้จัก</0> ให้เลือก",
"update_now": "อัปเดตตอนนี้",
"update_failed": "อัปเดทล้มเหลว กรุณา <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'> ทำตามขั้นตอน </a> เพื่ออัพเดทด้วยตนเอง",
"update_failed": "อัปเดทล้มเหลว กรุณา <a> ทำตามขั้นตอน </a> เพื่ออัพเดทด้วยตนเอง",
"processing_update": "รอซักครู่ AdGuard Home กำลังอัปเดท",
"clients_title": "เครื่องลูกข่าย",
"clients_desc": "ตั้งค่าอุปกรณ์เพื่อเชื่อมต่อ AdGuard Home",

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ı",
@@ -9,16 +10,20 @@
"save_config": "Ayarları kaydet",
"enabled_dhcp": "DHCP sunucusu etkinleştirildi",
"disabled_dhcp": "DHCP sunucusu devre dışı bırakıldı",
"unavailable_dhcp": "DHCP kullanılamıyor",
"unavailable_dhcp_desc": "AdGuard Home, işletim sisteminizde DHCP sunucusu çalıştıramıyor",
"dhcp_title": "DHCP sunucusu (deneysel!)",
"dhcp_description": "Eğer router'ınız DHCP ayarlarını sunmuyorsa AdGuard'ın dahili DHCP sunucusunu kullanabilirsiniz.",
"dhcp_enable": "DHCP sunucusunu etkinleştir",
"dhcp_disable": "DHCP sunucusunu devre dışı bırak",
"dhcp_not_found": "Ağ üzerinde aktif bir DHCP sunucusu bulunamadı. Dahili DHCP sunucusunu etkinleştirebilirsiniz.",
"dhcp_not_found": "Yerleşik DHCP sunucusunu etkinleştirmek güvenlidir - Ağ üzerinde herhangi bir aktif DHCP sunucusu bulamadık. Ancak, otomatik testimiz şu anda %100 garanti vermediği için el ile tekrar kontrol etmenizi öneririz.",
"dhcp_found": "Ağ üzerinde bazı aktif DHCP sunucuları bulundu. Yerleşik DHCP sunucusunu aktif etmek sağlıklı olmayacaktır.",
"dhcp_leases": "DHCP kiralamaları",
"dhcp_static_leases": "Sabit DHCP kiralamaları",
"dhcp_leases_not_found": "DHCP kiralaması bulunamadı",
"dhcp_config_saved": "DHCP sunucusu ayarı kaydedildi",
"dhcp_ipv4_settings": "DHCP IPv4 Ayarları",
"dhcp_ipv6_settings": "DHCP IPv6 Ayarları",
"form_error_required": "Gerekli alan",
"form_error_ip4_format": "Geçersiz IPv4 formatı",
"form_error_ip6_format": "Geçersiz IPv6 formatı",
@@ -27,6 +32,7 @@
"form_error_client_id_format": "Geçersiz müşteri kimliği formatı",
"form_error_positive": "0'dan büyük olmalı",
"form_error_negative": "0 veya daha büyük olmalıdır",
"range_end_error": "Başlangıç aralığından daha büyük olmalı",
"dhcp_form_gateway_input": "Ağ Geçidi IP'si",
"dhcp_form_subnet_input": "Alt Ağ Maskesi",
"dhcp_form_range_title": "IP adres aralığı",
@@ -51,6 +57,7 @@
"dhcp_add_static_lease": "Sabit kiralama ekle",
"dhcp_reset": "DHCP yapılandırmasını sıfırlamak istediğinizden emin misiniz?",
"country": "Ülke",
"city": "Şehir",
"delete_confirm": "\"{{key}}\" silmek istediğinizden emin misiniz?",
"form_enter_hostname": "Cihaz ismi girin",
"error_details": "Hata detayları",
@@ -62,23 +69,25 @@
"filters": "Filtreler",
"filter": "Filtre",
"query_log": "Sorgu Günlüğü",
"nothing_found": "Hiçbir şey bulunamadı",
"faq": "SSS",
"version": "Sürüm",
"address": "Adres",
"protocol": "Protokol",
"on": "AÇIK",
"off": "KAPALI",
"copyright": "Tüm hakları saklıdır",
"homepage": "Anasayfa",
"report_an_issue": "Bir sorun bildir",
"privacy_policy": "Gizlilik sözleşmesi",
"privacy_policy": "Gizlilik politikası",
"enable_protection": "Korumayı etkinleştir",
"enabled_protection": "Koruma etkileştirildi",
"disable_protection": "Korumayı durdur",
"disabled_protection": "Koruma durduruldu",
"disabled_protection": "Koruma devre dışı",
"refresh_statics": "İstatistikleri yenile",
"dns_query": "DNS Sorguları",
"blocked_by": "Filtreler tarafından engellendi",
"stats_malware_phishing": "Zararlı yazılım/kimlik hırsızlığı engellendi",
"blocked_by": "<0>Filtreler tarafından engellendi</0>",
"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",
@@ -93,33 +102,34 @@
"number_of_dns_query_days": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı",
"number_of_dns_query_days_plural": "Son {{count}} gün boyunca işlenen DNS sorgularının sayısı",
"number_of_dns_query_24_hours": "Son 24 saat içinde işlenen DNS sorgularının sayısı",
"number_of_dns_query_blocked_24_hours": "Reklam engelleme filtreleri ve hosts listeleri tarafından engellenmiş DNS isteklerinin sayısı",
"number_of_dns_query_blocked_24_hours": "Reklam engelleme filtreleri ve ana bilgisayar engelleme listeleri tarafından engellenen DNS isteklerinin sayısı",
"number_of_dns_query_blocked_24_hours_by_sec": "AdGuard gezinti koruması modülü tarafından engellenmiş DNS isteklerinin sayısı",
"number_of_dns_query_blocked_24_hours_adult": "Engellenmiş yetişkin içerikli web sitelerinin sayısı",
"enforced_save_search": "Etkin güvenli arama",
"number_of_dns_query_to_safe_search": "Güvenli Arama etkinleştirildiğinde arama motorlarına gönderilen DNS isteklerinin sayısı",
"enforced_save_search": "Zorunlu kılınmış güvenli arama",
"number_of_dns_query_to_safe_search": "Güvenli Aramanın zorunlu kıldığı arama motorlarına gönderilen DNS isteklerinin sayısı",
"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",
"use_adguard_parental_hint": "AdGuard Home, alan adının yetişkin içerik bulundurup bulundurmadığını kontrol edecek. Gezinti güvenliği web hizmeti ile kullandığımız aynı gizlilik dostu API'yi kullanıyoruz.",
"enforce_safe_search": "Güvenli aramayı zorunlu kıl",
"enforce_save_search_hint": "AdGuard Home şu arama motorlarında güvenli aramayı zorunlu kılabilir: Google, Youtube, Bing, DuckDuckGo ve Yandex.",
"enforce_save_search_hint": "AdGuard Home şu arama motorlarında güvenli aramayı zorunlu kılabilir: Google, Youtube, Bing, DuckDuckGo, Yandex ve Pixabay.",
"no_servers_specified": "Sunucu adresi girilmedi",
"general_settings": "Genel ayarlar",
"dns_settings": "DNS ayarları",
"dns_blocklists": "DNS blok listeleri",
"dns_blocklists": "DNS engelleme listeleri",
"dns_allowlists": "DNS izin listeleri",
"dns_blocklists_desc": "AdGuard Home, blok listelerle eşleşen alanları engeller.",
"dns_blocklists_desc": "AdGuard Home, engelleme listeleriyle eşleşen alanları engeller.",
"dns_allowlists_desc": "DNS izin listelerindeki alanlara, engelleme listelerinden birinde olsalar bile izin verilir.",
"custom_filtering_rules": "Özel filtreleme kuralları",
"encryption_settings": "Şifreleme ayarları",
"dhcp_settings": "DHCP ayarları",
"upstream_dns": "Üst DNS sunucusu",
"upstream_dns_hint": "er bu alanı boş bırakırsanız AdGuard Home üst sunucu olarak <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> adresini kullanacaktır.",
"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",
@@ -142,8 +152,8 @@
"delete_table_action": "Sil",
"elapsed": "Geçen zaman",
"filters_and_hosts_hint": "AdGuard Home temel reklam engelleme kurallarını ve hosts dosyalarının söz dizim kurallarını anlamaktadır.",
"no_blocklist_added": "Hiçbir blok listesi eklenmedi",
"no_whitelist_added": "Hiçbir izin listesi eklenmedi",
"no_blocklist_added": "Hiçbir engelleme listesi eklenmedi",
"no_whitelist_added": "İzin verilen listesi eklenmedi",
"add_blocklist": "Engelleme listesi ekle",
"add_allowlist": "İzin listesi ekle",
"cancel_btn": "İptal",
@@ -151,14 +161,16 @@
"enter_url_or_path_hint": "Bir URL ya da listenin tam yolunu girin",
"check_updates_btn": "Güncellemeleri denetle",
"new_blocklist": "Yeni engelleme listesi",
"new_allowlist": "Yeni izin listesi",
"new_allowlist": "Yeni izin verilen listesi",
"edit_blocklist": "Engelleme listesini düzenle",
"edit_allowlist": "İzin listesini düzenle",
"edit_allowlist": "İzin verilen listesini düzenle",
"choose_blocklist": "Engelleme listelerini seçin",
"choose_allowlist": "İzin verilen listelerini seç",
"enter_valid_blocklist": "Engelleme listesine geçerli bir URL girin.",
"enter_valid_allowlist": "İzin listesine geçerli bir URL girin.",
"enter_valid_allowlist": "İzin verilen listesine geçerli bir URL girin.",
"form_error_url_format": "Geçersiz url biçim",
"form_error_url_or_path_format": "Geçersiz URL ya da listenin tam yolu",
"custom_filter_rules": "İsteğe bağlı filtreleme kuralları",
"custom_filter_rules": "Özel filtreleme kuralları",
"custom_filter_rules_hint": "Her satıra bir kural girin. Reklama engelleme kuralı veya hosts dosyası söz dizimi kullanabilirsiniz.",
"examples_title": "Örnekler",
"example_meaning_filter_block": "example.org alan adına ve tüm alt alan adlarına olan erişimi engeller",
@@ -169,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",
@@ -179,6 +192,10 @@
"dns_test_not_ok_toast": "Sunucu \"{{key}}\": kullanılamıyor, lütfen doğru yazdığınızdan emin olun",
"unblock": "Engeli kaldır",
"block": "Engelle",
"disallow_this_client": "Bu istemciye izin verme",
"allow_this_client": "Bu istemciye izin ver",
"block_for_this_client_only": "Yalnızca bu istemci için engelle",
"unblock_for_this_client_only": "Yalnızca bu müşteri için engellemeyi kaldır",
"time_table_header": "Saat",
"date": "Tarih",
"domain_name_table_header": "Alan adı",
@@ -196,9 +213,9 @@
"loading_table_status": "Yükleniyor...",
"page_table_footer_text": "Sayfa",
"rows_table_footer_text": "satır",
"updated_custom_filtering_toast": "İsteğe bağlı filtreleme kuralları güncellendi",
"rule_removed_from_custom_filtering_toast": "Kural isteğe bağlı filtreleme kurallarından kaldırıldı",
"rule_added_to_custom_filtering_toast": "Kural isteğe bağlı filtreleme kurallarına eklendi",
"updated_custom_filtering_toast": "Özel filtreleme kuralları güncellendi",
"rule_removed_from_custom_filtering_toast": "Özel filtreleme kurallarından kural kaldırıldı: {{rule}}",
"rule_added_to_custom_filtering_toast": "Özel filtreleme kurallarına kural eklendi: {{rule}}",
"query_log_response_status": "Durum: {{value}}",
"query_log_filtered": "{{filter}} tarafından filtrelendi",
"query_log_confirm_clear": "Tüm sorgu günlüğünü temizlemek istediğinizden emin misiniz?",
@@ -211,35 +228,43 @@
"query_log_strict_search": "Katı arama için çift tırnak işareti kullanın",
"query_log_retention_confirm": "Sorgu günlüğü saklama süresini değiştirmek istediğinize emin misiniz? Aralık değerini azaltırsanız, bazı veriler kaybolacaktır",
"anonymize_client_ip": "İstemci IP'sini anonimize et",
"anonymize_client_ip_desc": "Tam IP adresini günlüğe ve istatistiklere kaydetme",
"anonymize_client_ip_desc": "İstemcinin tam IP adresini günlüklere ve istatistiklere kaydetmeyin",
"dns_config": "DNS sunucusu yapılandırması",
"dns_cache_config": "DNS önbelleği yapılandırması",
"dns_cache_config_desc": "Burada DNS önbelleğini yapılandırabilirsiniz",
"blocking_mode": "Engelleme modu",
"default": "Varsayılan",
"nxdomain": "NXDOMAIN",
"refused": "REFUSED",
"null_ip": "Boş IP",
"custom_ip": "Özel IP",
"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.",
"rate_limit_desc": "Tek bir istemcinin saniye başına yapmasına izin verilen istek sayısı (0: sınırsız)",
"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: Adblock tarzı kural tarafından engellendiğinde NXDOMAIN ile yanıt verin; / etc / hosts-style kuralı tarafından engellendiğinde kuralda belirtilen IP adresiyle yanıt ver",
"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ıtlayın (A için 0.0.0.0; :: AAAA için)",
"blocking_mode_custom_ip": "Özel IP: Manuel olarak ayarlanmış bir IP adresiyle yanıt verin",
"blocking_mode_null_ip": "Boş IP: Sıfır IP adresiyle yanıt verin (A için 0.0.0.0; :: AAAA için)",
"blocking_mode_custom_ip": "Özel IP: El ile ayarlanmış bir IP adresi ile yanıt verin",
"upstream_dns_client_desc": "Bu alanı boş tutarsanız, AdGuard Home, <0>DNS ayarlarında</0> yapılandırılmış sunucuları kullanır.",
"tracker_source": "İzleyici kaynağı",
"source_label": "Kaynak",
"found_in_known_domain_db": "Bilinen alan adları veri tabanı içinde bulundu",
"found_in_known_domain_db": "Bilinen alan adları veritabanı içinde bulundu.",
"category_label": "Kategori",
"rule_label": "Kural",
"list_label": "Liste",
"unknown_filter": "Bilinmeyen filtre {{filterId}}",
"install_welcome_title": "AdGuard Home'a hoşgeldiniz!",
"known_tracker": "Bilinen izleyici",
"install_welcome_title": "AdGuard Home'a hoş geldiniz!",
"install_welcome_desc": "AdGuard Home, ağ genelinde reklam ve izleyicileri engelleyen bir DNS sunucusudur. Tüm ağınızı ve tüm cihazlarınızı kontrol etmenize yarayan bir araçtır, istemci tarafında bir program kullanmanıza gerek duymaz.",
"install_settings_title": "Yönetici Web Arayüzü",
"install_settings_listen": "Dinleme arayüzü",
@@ -280,7 +305,7 @@
"install_devices_macos_list_4": "DNS sekmesine tıklayın ve AdGuard Home sunucunuzun adreslerini girin.",
"install_devices_android_list_1": "Android cihazınızda Ayarlar simgesine dokunun.",
"install_devices_android_list_2": "Wi-Fi menüsüne dokunun. Mevcut tüm ağlar listelenecektir (mobil bağlantı için isteğe bağlı DNS sunucusu ayarlanamaz).",
"install_devices_android_list_3": "Bağlandığınız ağa basılı tutup \"ı Değiştir\"e dokunun.",
"install_devices_android_list_3": "Bağlı olduğunuz ağa uzun basın ve ı Değiştir'e dokunun.",
"install_devices_android_list_4": "Bazı cihazlarda diğer ayarları görmek için Gelişmiş kutucuğuna dokunmanız gerekebilir. Android cihazınızın DNS ayarlarını değiştirmek için IP ayarlarını DHCP yerine Statik olarak değiştirmeniz gerekebilir.",
"install_devices_android_list_5": "DNS 1 ve DNS 2 değerlerini AdGuard Home sunucusunun ip adresleri ile değiştirin.",
"install_devices_ios_list_1": "Ana ekrandaki Ayarlar simgesine dokunun.",
@@ -301,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.",
@@ -311,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",
@@ -336,7 +363,7 @@
"fix": "Düzelt",
"dns_providers": "Aralarından seçim yapabileceğiniz bilinen <0>DNS sağlayıcıların listesi</0>.",
"update_now": "Şimdi güncelleyin",
"update_failed": "Otomatik güncelleme başarısız oldu. Lütfen elle güncellemek için <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>talimatları uygulayın.</a>",
"update_failed": "Otomatik güncelleme başarısız oldu. Lütfen elle güncellemek için <a>talimatları uygulayın</a>.",
"processing_update": "Lütfen bekleyin. AdGuard Home güncelleniyor",
"clients_title": "İstemciler",
"clients_desc": "AdGuard Home'a bağlı cihazları yapılandırın",
@@ -378,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.",
@@ -430,6 +456,7 @@
"domain": "Alan adı",
"answer": "Cevap",
"filter_added_successfully": "Filtre başarıyla eklendi",
"filter_removed_successfully": "Filtre başarıyla kaldırıldı",
"filter_updated": "Filtre başarıyla güncellendi",
"statistics_configuration": "İstatistik yapılandırması",
"statistics_retention": "İstatistikleri depolama",
@@ -448,25 +475,28 @@
"username_placeholder": "Kullanıcı adını girin",
"password_label": "Parola",
"password_placeholder": "Parolayı girin",
"sign_in": "Oturum aç",
"sign_in": "Giriş yap",
"sign_out": "Oturumu kapat",
"forgot_password": "Parolanızı mı unuttunuz?",
"forgot_password_desc": "Kullanıcı hesabınız için yeni bir parola oluşturmak için lütfen <0>bu adımları</0> takip edin.",
"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>.",
"blocked_by_response": "Cevap olarak CNAME veya IP tarafından engellendi",
"blocked_by_cname_or_ip": "CNAME veya IP tarafından engellendi",
"try_again": "Tekrar deneyin",
"domain_desc": "Yeniden yazılmasını istediğiniz alan adını veya joker karakteri girin.",
"example_rewrite_domain": "cevapları yalnızca bu alan adı için yeniden yaz.",
"example_rewrite_wildcard": "tüm <0>example.org</0> alt alanları için cevapları yeniden yaz.",
"rewrite_domain_name": "Alan adı: bir CNAME kaydı ekleyin",
"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.",
@@ -478,12 +508,15 @@
"check": "Kontrol",
"form_enter_host": "Bir ana bilgisayar adı girin",
"filtered_custom_rules": "Özel filtreleme kurallarına göre filtrelendi",
"choose_from_list": "Listeden seç",
"add_custom_list": "Özel bir liste ekle",
"host_whitelisted": "Ana makine beyaz listeye alındı",
"check_ip": "IP adresleri: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"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?",
@@ -500,11 +533,38 @@
"list_updated_plural": "{{count}} liste güncellendi",
"dnssec_enable": "DNSSEC'i etkinleştir",
"dnssec_enable_desc": "DNSSEC'i giden DNS sorguları için etkinleştir ve sonucu kontrol et (DNSSEC-etkin sorgulama gerekli)",
"all_queries": "Tüm sorgular",
"show_blocked_responses": "Engellendi",
"show_whitelisted_responses": "Beyazlisteye eklendi",
"show_whitelisted_responses": "Beyaz listeye eklendi",
"show_processed_responses": "İşlendi",
"blocked_safebrowsing": "Güvenli gezinti tarafından engellendi",
"blocked_adult_websites": "Yetişkin içerikli site engellendi",
"blocked_threats": "Engellenen Tehditler",
"allowed": "İzin verildi",
"blocklist": "Engellenen listesi",
"port_53_faq_link": "Port 53 genellikle \"DNSStubListener\" veya \"sistemd-resolved\" hizmetler tarafından kullanılır. Lütfen problemin nasıl çözüleceğine ilişkin <0>bu talimatı</0> okuyun."
"filtered": "Filtrelenmiş",
"safe_search": "Güvenli arama",
"blocklist": "Engelleme listesi",
"milliseconds_abbreviation": "ms",
"cache_size": "Önbellek boyutu",
"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 (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ı",
"click_to_view_queries": "Sorguları görmek için tıklayın",
"port_53_faq_link": "Port 53 genellikle \"DNSStubListener\" veya \"sistemd-resolved\" hizmetler tarafından kullanılır. Lütfen problemin nasıl çözüleceğine ilişkin <0>bu talimatı</0> okuyun.",
"adg_will_drop_dns_queries": "AdGuard Home, bu istemciden gelen tüm DNS sorgularını iptal eder.",
"experimental": "Deneysel"
}

View File

@@ -3,12 +3,16 @@
"example_upstream_reserved": "bạn có thể chỉ định DNS ngược tuyến <0>cho một tên miền cụ thể(hoặc nhiều)</0>",
"upstream_parallel": "Sử dụng truy vấn song song để tăng tốc độ giải quyết bằng cách truy vấn đồng thời tất cả các máy chủ ngược tuyến",
"parallel_requests": "Yêu cầu song song",
"load_balancing": "Cân bằng tải",
"load_balancing_desc": "Chỉ truy xuất một máy chủ trong cùng thời điểm. AdGuard Home sẽ sử dụng thuật toán trọng số ngẫu nhiên để chọn một máy chủ nhanh nhất và sử dụng máy chủ đó thường xuyên hơn.",
"bootstrap_dns": "Máy chủ DNS Bootstrap",
"bootstrap_dns_desc": "Máy chủ DNS Bootstrap được sử dụng để phân giải địa chỉ IP của bộ phân giải DoH/DoT mà bạn chỉ định là ngược tuyến.",
"check_dhcp_servers": "Kiểm tra máy chủ DHCP",
"save_config": "Lưu thiết lập",
"enabled_dhcp": "Máy chủ DHCP đã kích hoạt",
"disabled_dhcp": "Máy chủ DHCP đã tắt",
"unavailable_dhcp": "DHCP không khả dụng",
"unavailable_dhcp_desc": "AdGuard Home không thể chạy máy chủ DHCP trên hệ điều hành của bạn",
"dhcp_title": "Máy chủ DHCP (thử nghiệm!)",
"dhcp_description": "Nếu bộ định tuyến không trợ cài đặt DHCP, bạn có thể dùng máy chủ DHCP dựng sẵn của AdGuard",
"dhcp_enable": "Bật máy chủ DHCP",
@@ -19,6 +23,8 @@
"dhcp_static_leases": "Thuê DHCP tĩnh",
"dhcp_leases_not_found": "Không tìm thấy DHCP cho thuê",
"dhcp_config_saved": "Đã lưu cấu hình máy chủ DHCP",
"dhcp_ipv4_settings": "Cài đặt DHCP IPv4",
"dhcp_ipv6_settings": "Cài đặt DHCP IPv6",
"form_error_required": "Trường bắt buộc",
"form_error_ip4_format": "Định dạng IPv4 không hợp lệ",
"form_error_ip6_format": "Định dạng IPv6 không hợp lệ",
@@ -27,6 +33,7 @@
"form_error_client_id_format": "Định dạng client ID không hợp lệ",
"form_error_positive": "Phải lớn hơn 0",
"form_error_negative": "Phải lớn hơn hoặc bằng 0",
"range_end_error": "Phải lớn hơn khoảng bắt đầu",
"dhcp_form_gateway_input": "Cổng IP",
"dhcp_form_subnet_input": "Mặt nạ mạng con",
"dhcp_form_range_title": "Phạm vi của địa chỉ IP",
@@ -51,18 +58,26 @@
"dhcp_add_static_lease": "Thêm thuê tĩnh",
"dhcp_reset": "Bạn có chắc chắn muốn đặt lại thiết lập DHCP?",
"country": "Quốc gia",
"city": "Thành phố",
"delete_confirm": "Bạn có chắc chắn muốn xóa \"{{key}}\" không?",
"form_enter_hostname": "Nhập tên máy chủ",
"error_details": "Chi tiết lỗi",
"response_details": "Chi tiết về phản hồi",
"request_details": "Chi tiết về yêu cầu",
"client_details": "Thông tin máy khách",
"details": "Chi tiết",
"back": "Quay lại",
"dashboard": "Tổng quan",
"settings": "Cài đặt",
"filters": "Bộ lọc",
"filter": "Bộ lọc",
"query_log": "Lịch sử truy vấn",
"compact": "Thu gọn",
"nothing_found": "Không tìm thấy",
"faq": "Hỏi đáp",
"version": "phiên bản",
"address": "địa chỉ",
"protocol": "Giao thức",
"on": "Đang bật",
"off": "Đang tắt",
"copyright": "Bản quyền",
@@ -85,8 +100,8 @@
"no_domains_found": "Không có tên miền nào",
"requests_count": "Số lần yêu cầu",
"top_blocked_domains": "Tên miền chặn nhiều",
"top_clients": "Client dùng nhiều",
"no_clients_found": "Không có client nào",
"top_clients": "Người dùng hàng đầu",
"no_clients_found": "Không có người dùng",
"general_statistics": "Thống kê chung",
"number_of_dns_query_days": "Một số truy vấn DNS được xử lý trong {{count}} ngày qua",
"number_of_dns_query_days_plural": "Một số truy vấn DNS được xử lý trong {{count}} ngày qua",
@@ -94,12 +109,12 @@
"number_of_dns_query_blocked_24_hours": "Số yêu cầu DNS bị chặn bởi bộ lọc quảng cáo và danh sách chặn host",
"number_of_dns_query_blocked_24_hours_by_sec": "Số yêu cầu DNS bị chặn bởi chế độ bảo vệ duyệt web AdGuard",
"number_of_dns_query_blocked_24_hours_adult": "Số website người lớn đã chặn",
"enforced_save_search": "Tìm kiếm an toàn",
"enforced_save_search": "Bắt buộc tìm kiếm an toàn",
"number_of_dns_query_to_safe_search": "Số yêu cầu DNS tới công cụ tìm kiếm đã chuyển thành tìm kiếm an toàn",
"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",
@@ -109,11 +124,16 @@
"no_servers_specified": "Không có máy chủ nào được liệt kê",
"general_settings": "Cài đặt chung",
"dns_settings": "Cài đặt DNS",
"dns_blocklists": "Danh sách chặn",
"dns_allowlists": "Danh sách cho phép",
"dns_blocklists_desc": "AdGuard Home sẽ chặn tên miền nằm trong danh sách bị chặn.",
"dns_allowlists_desc": "Tên miền nằm trong danh sách cho phép sẽ không bị chặn cho dù nó có nằm trong bất kì danh sách bị chặn nào.",
"custom_filtering_rules": "Bộ lọc tùy chỉnh",
"encryption_settings": "Cài đặt mã hóa",
"dhcp_settings": "Cài đặt DHCP",
"upstream_dns": "Máy chủ DNS tìm kiếm",
"upstream_dns_hint": "Nếu bạn để trống mục này, AdGuard Home sẽ sử dụng <a href='https://1.1.1.1/' target='_blank'>Cloudflare DNS</a> để tìm kiếm. Sử dụng tiền tố tls:// cho các máy chủ DNS dựa trên TLS.",
"test_upstream_btn": "Kiểm tra",
"upstreams": "Nguồn",
"apply_btn": "Áp dụng",
"disabled_filtering_toast": "Đã tắt chặn quảng cáo",
"enabled_filtering_toast": "Đã bật chặn quảng cáo",
@@ -125,16 +145,33 @@
"enabled_save_search_toast": "Đã bật tìm kiếm an toàn",
"enabled_table_header": "Kích hoạt",
"name_table_header": "Tên",
"list_url_table_header": "Danh sách liên kết",
"list_url_table_header": "URL bộ lọc",
"rules_count_table_header": "Số quy tắc",
"last_time_updated_table_header": "Cập nhật cuối",
"last_time_updated_table_header": "Cập nhật lần cuối",
"actions_table_header": "Thao tác",
"request_table_header": "Yêu cầu",
"edit_table_action": "Chỉnh sửa",
"delete_table_action": "Xoá",
"elapsed": "Đã tốn",
"filters_and_hosts_hint": "AdGuard home hiểu các quy tắc chặn quảng cáo đơn giản và cú pháp file hosts",
"no_blocklist_added": "Chưa có danh sách chặn được thêm vào",
"no_whitelist_added": "Chưa có danh sách cho phép được thêm vào",
"add_blocklist": "Thêm danh sách",
"add_allowlist": "Thêm danh sách",
"cancel_btn": "Huỷ",
"enter_name_hint": "Nhập tên",
"enter_url_or_path_hint": "Nhập địa chỉ hoặc đường dẫn tới danh sách",
"check_updates_btn": "Kiểm tra cập nhật",
"new_blocklist": "Danh sách chặn mới",
"new_allowlist": "Danh sách cho phép mới",
"edit_blocklist": "Chỉnh sửa danh sách chặn",
"edit_allowlist": "Chỉnh sửa danh sách cho phép",
"choose_blocklist": "Chọn danh sách chặn",
"choose_allowlist": "Chọn danh sách cho phép",
"enter_valid_blocklist": "Điền địa chỉ URL của danh sách chặn.",
"enter_valid_allowlist": "Điề địa chỉ URL của danh sách cho phép.",
"form_error_url_format": "ĐỊnh dạng URL không hợp lệ",
"form_error_url_or_path_format": "Định dạng URL hoặc đường dẫn tới danh sách không hợp lệ",
"custom_filter_rules": "Quy tắc lọc tuỳ chỉnh",
"custom_filter_rules_hint": "Nhập mỗi quy tắc 1 dòng. Có thể sử dụng quy tắc chặn quảng cáo hoặc cú pháp file host",
"examples_title": "Ví dụ",
@@ -150,34 +187,38 @@
"example_upstream_doh": "được mã hoá <0>DNS-over-HTTPS</0>",
"example_upstream_sdns": "bạn có thể sử dụng <0>DNS Stamps</0> for <1>DNSCrypt</1> hoặc <2>DNS-over-HTTPS</2> ",
"example_upstream_tcp": "DNS thông thường(dùng TCP)",
"all_lists_up_to_date_toast": "Tất cả danh sách đã ở phiên bản mới nhất",
"updated_upstream_dns_toast": "Đã cập nhật máy chủ DNS tìm kiếm",
"dns_test_ok_toast": "Máy chủ DNS có thể sử dụng",
"dns_test_not_ok_toast": "Máy chủ \"\"': không thể sử dụng, vui lòng kiểm tra lại",
"unblock": "Bỏ chặn",
"block": "Chặn",
"time_table_header": "Thời gian",
"date": "Ngày",
"domain_name_table_header": "Tên miền",
"domain_or_client": "Tên miền hoặc khách hàng",
"type_table_header": "Loại",
"response_table_header": "Phản hồi",
"client_table_header": "Người dùng cuối",
"empty_response_status": "Rỗng",
"response_code": "Mã phản hồi",
"client_table_header": "Người dùng",
"empty_response_status": "Trống",
"show_all_filter_type": "Hiện tất cả",
"show_filtered_type": "Chỉ hiện đã lọc",
"no_logs_found": "Không có lịch sử truy vấn",
"refresh_btn": "Làm mới",
"previous_btn": "Trang trước",
"previous_btn": "Trước",
"next_btn": "Trang sau",
"loading_table_status": "Đang tải...",
"page_table_footer_text": "Trang",
"rows_table_footer_text": "hàng",
"updated_custom_filtering_toast": "Đã cập nhật quy tắc lọc tuỳ chỉnh",
"rule_removed_from_custom_filtering_toast": "Quy tắc đã được xoá khỏi quy tắc lọc tuỳ chỉnh",
"rule_added_to_custom_filtering_toast": "Quy tắc đã được thêm vào quy tắc lọc tuỳ chỉnh",
"updated_custom_filtering_toast": "Đã cập nhật bộ lọc tùy chỉnh",
"rule_removed_from_custom_filtering_toast": "Quy tắc đã được xoá khỏi quy tắc lọc tuỳ chỉnh {{rule}}",
"rule_added_to_custom_filtering_toast": "Quy tắc đã được thêm vào quy tắc lọc tuỳ chỉnh: {{rule}}",
"query_log_response_status": "Trạng thái: {{value}}",
"query_log_filtered": "Được lọc bởi {{filter}}",
"query_log_confirm_clear": "Bạn có chắc chắn muốn xóa toàn bộ nhật ký truy vấn không?",
"query_log_cleared": "Nhật ký truy vấn đã được xóa thành công",
"query_log_updated": "Cập nhật thành công nhật kí truy xuất",
"query_log_clear": "Xóa nhật ký truy vấn",
"query_log_retention": "Lưu giữ nhật ký truy vấn",
"query_log_enable": "Bật nhật ký",
@@ -188,24 +229,36 @@
"anonymize_client_ip": "Ẩn danh IP khách",
"anonymize_client_ip_desc": "Không lưu địa chỉ IP đầy đủ của khách hàng trong nhật ký và thống kê",
"dns_config": "Thiết lập máy chủ DNS",
"dns_cache_config": "Cấu hình cache DNS",
"dns_cache_config_desc": "Bạn có thể cấu hình cache cho DNS tại đây",
"blocking_mode": "Chế độ chặn",
"default": "Mặc định",
"nxdomain": "NXDOMAIN",
"null_ip": "Địa chỉ IP rỗng",
"custom_ip": "IP tuỳ chỉnh",
"blocking_ipv4": "Chặn IPv4",
"blocking_ipv6": "Chặn IPv6",
"dns_over_https": "DNS-over-HTTPS",
"dns_over_tls": "DNS-over-TLS",
"plain_dns": "DNS thuần",
"form_enter_rate_limit": "Nhập giới hạn yêu cầu",
"rate_limit": "Giới hạn yêu cầu",
"edns_enable": "Bật mạng con EDNS Client",
"edns_cs_desc": "Nếu được bật, AdGuard Home sẽ gửi các mạng con của khách hàng đến các máy chủ DNS.",
"rate_limit_desc": "Số lượng yêu cầu mỗi giây mà một khách hàng được phép thực hiện (0: không giới hạn)",
"blocking_ipv4_desc": "Địa chỉ IP được trả lại cho một yêu cầu A bị chặn",
"blocking_mode_default": "Mặc định: Trả lời với NXDOMAIN khi bị chặn bởi quy tắc kiểu Adblock; phản hồi với địa chỉ IP được chỉ định trong quy tắc khi bị chặn bởi quy tắc / etc / hosts-style",
"blocking_ipv6_desc": "Địa chỉ IP được trả lại cho một yêu cầu AAA bị chặn",
"blocking_mode_nxdomain": "NXDOMAIN: Phản hổi với mã NXDOMAIN",
"blocking_mode_null_ip": "Null IP: Trả lời bằng không địa chỉ IP (0.0.0.0 cho A; :: cho AAAA)",
"blocking_mode_custom_ip": "IP tùy chỉnh: Phản hồi với địa chỉ IP đã được tiết lập",
"upstream_dns_client_desc": "Nếu để trống trường này, AdGuardHome sẽ sử dụng nhũng máy chủ được cấu hình ở <0>Cấu hình DNS</0>.",
"tracker_source": "Nguồn theo dõi",
"source_label": "Nguồn",
"found_in_known_domain_db": "Tìm thấy trong cơ sở dữ liệu tên miền",
"category_label": "Thể loại",
"rule_label": "Quy tắc",
"list_label": "Danh sách",
"unknown_filter": "Bộ lọc không rõ {{filterId}}",
"known_tracker": "Theo dõi đã biết",
"install_welcome_title": "Chào mừng bạn đến với AdGuard Home!",
"install_welcome_desc": "AdGuard Home là một máy chủ DNS chặn quảng cáo và theo dõi trên toàn mạng. Mục đích của nó là cho phép bạn kiểm soát toàn bộ mạng và tất cả các thiết bị của mình và không yêu cầu sử dụng chương trình phía máy khách.",
"install_settings_title": "Giao Diện Web Quản Trị",
@@ -234,6 +287,7 @@
"install_devices_router_list_1": "Mở các tùy chọn cho bộ định tuyến của bạn. Thông thường, bạn có thể truy cập nó từ trình duyệt của mình thông qua một URL (như http://192.168.0.1/ hoặc http://192.168.1.1/). Bạn có thể được yêu cầu nhập mật khẩu. Nếu bạn không nhớ nó, bạn có thể thường xuyên đặt lại mật khẩu bằng cách nhấn một nút trên chính bộ định tuyến. Một số bộ định tuyến yêu cầu một ứng dụng cụ thể, trong trường hợp đó nên được cài đặt trên máy tính/điện thoại của bạn.",
"install_devices_router_list_2": "Tìm cài đặt DHCP/DNS. Tìm các chữ cái DNS bên cạnh một trường cho phép hai hoặc ba bộ số, mỗi bộ được chia thành bốn nhóm từ một đến ba chữ số.",
"install_devices_router_list_3": "Nhập địa chỉ máy chủ AdGuard Home của bạn ở đó.",
"install_devices_router_list_4": "Bạn không thể đặt máy chủ DNS tùy chỉnh trên một số loại bộ định tuyến. Trong trường hợp này, có thể hữu ích nếu bạn thiết lập AdGuard Home làm <0> máy chủ DHCP </0>. Nếu không, bạn nên tìm kiếm hướng dẫn về cách tùy chỉnh máy chủ DNS cho kiểu bộ định tuyến cụ thể của mình.",
"install_devices_windows_list_1": "Mở Control Panel thông qua Trình đơn Bắt đầu hoặc Tìm kiếm Windows.",
"install_devices_windows_list_2": "Chuyển đến danh mục Mạng và Internet, sau đó đến Trung tâm Mạng và Chia sẻ.",
"install_devices_windows_list_3": "Ở bên trái màn hình, tìm Thay đổi cài đặt bộ điều hợp và nhấp vào nó.",
@@ -255,8 +309,8 @@
"install_devices_ios_list_4": "Trong trường DNS nhập địa chỉ máy chủ AdGuard Home của bạn.",
"get_started": "Bắt Đầu",
"next": "Tiếp",
"open_dashboard": "Mở Bảng Điều Khiển",
"install_saved": "Đã lưu thành công",
"open_dashboard": "Mở bảng điều khiển",
"install_saved": "Lưu thành công",
"encryption_title": "Mã hóa",
"encryption_desc": "Hỗ trợ mã hóa (HTTPS/TLS) cho cả giao diện web quản trị viên và DNS",
"encryption_config_saved": "Đã lưu cấu hình mã hóa",
@@ -269,7 +323,7 @@
"encryption_https_desc": "Nếu cổng HTTPS được định cấu hình, giao diện quản trị viên AdGuard Home sẽ có thể truy cập thông qua HTTPS và nó cũng sẽ cung cấp DNS-over-HTTPS trên vị trí '/dns-query'.",
"encryption_dot": "Cổng DNS-over-TLS",
"encryption_dot_desc": "Nếu cổng này được định cấu hình, AdGuard Home sẽ chạy máy chủ DNS-over-TLS trên cổng này.",
"encryption_certificates": "Giấy chứng nhận",
"encryption_certificates": "Chứng chỉ",
"encryption_certificates_desc": "Để sử dụng mã hóa, bạn cần cung cấp chuỗi chứng chỉ SSL hợp lệ cho miền của mình. Bạn có thể nhận chứng chỉ miễn phí trên <0>{{link}}</0> hoặc bạn có thể mua chứng chỉ từ một trong các Cơ Quan Chứng Nhận tin cậy.",
"encryption_certificates_input": "Sao chép/dán chứng chỉ được mã hóa PEM của bạn tại đây.",
"encryption_status": "Trạng thái",
@@ -278,8 +332,8 @@
"encryption_key_input": "Sao chép/dán khóa riêng được mã hóa PEM cho chứng chỉ của bạn tại đây.",
"encryption_enable": "Kích Hoạt Mã Hóa (HTTPS, DNS-over-HTTPS và DNS-over-TLS)",
"encryption_enable_desc": "Nếu mã hóa được bật, giao diện quản trị viên AdGuard Home sẽ hoạt động trên HTTPS và máy chủ DNS sẽ lắng nghe các yêu cầu qua DNS-over-HTTPS và DNS-over-TLS.",
"encryption_chain_valid": "Chuỗi chứng chỉ hợp lệ",
"encryption_chain_invalid": "Chuỗi chứng chỉ không hợp lệ",
"encryption_chain_valid": "Chứng chỉ hợp lệ",
"encryption_chain_invalid": "Chứng chỉ không hợp lệ",
"encryption_key_valid": "Đây là khóa riêng {{type}} hợp lệ",
"encryption_key_invalid": "Đây là khóa riêng {{type}} không hợp lệ",
"encryption_subject": "Chủ đề",
@@ -302,7 +356,7 @@
"fix": "Sửa",
"dns_providers": "Dưới đây là một <0>danh sách của các nhà cung cấp DNS đã biết</0> để lựa chọn.",
"update_now": "Cập nhật ngay",
"update_failed": "Tự động cập nhật thất bại. Vui lòng <a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>làm theo các bước</a> để cập nhật thủ công.",
"update_failed": "Tự động cập nhật thất bại. Vui lòng <a>làm theo các bước</a> để cập nhật thủ công.",
"processing_update": "Xin vui lòng chờ, AdGuard Home đang được cập nhật",
"clients_title": "Máy khách",
"clients_desc": "Định cấu hình thiết bị được kết nối với AdGuard Home",
@@ -322,12 +376,14 @@
"form_enter_id": "Nhập định danh",
"form_add_id": "Thêm định danh",
"form_client_name": "Nhập tên máy khách",
"name": "Tên",
"client_global_settings": "Sử dụng cài đặt toàn cầu",
"client_deleted": "Máy khách \"{{key}}\" đã xóa thành công",
"client_added": "Máy khách \"{{key}}\" đã thêm thành công",
"client_updated": "Máy khách \"{{key}}\" đã cập nhật thành công",
"clients_not_found": "Không tìm thấy máy khách",
"client_confirm_delete": "Bạn có chắc chắn muốn xóa máy khách \"{{key}}\" không?",
"list_confirm_delete": "Bạn có muốn xóa bộ lọc này?",
"auto_clients_title": "Máy khách (thời gian chạy)",
"auto_clients_desc": "Dữ liệu trên các máy khách sử dụng AdGuard Home, nhưng không được lưu trong cấu hình",
"access_title": "Cài đặt truy cập",
@@ -345,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.",
@@ -365,6 +420,7 @@
"rewrite_confirm_delete": "Bạn có chắc chắn muốn xóa DNS viết lại cho \"{{key}}\" không?",
"rewrite_desc": "Cho phép dễ dàng định cấu hình tùy chỉnh DNS phản hồi cho một tên miền cụ thể.",
"rewrite_applied": "Đã áp dụng quy tắc Viết lại",
"rewrite_hosts_applied": "Viết lại bởi quy tắc tệp máy chủ",
"dns_rewrites": "DNS viết lại",
"form_domain": "Nhập tên miền",
"form_answer": "Nhập địa chỉ IP hoặc tên miền",
@@ -393,7 +449,9 @@
"interval_days_plural": "{{count}} ngày",
"domain": "Tên miền",
"answer": "Trả lời",
"filter_added_successfully": "Bộ lọc đã được thêm thành công",
"filter_added_successfully": "Thêm bộ lọc thành công",
"filter_removed_successfully": "Xóa bộ lọc thành công",
"filter_updated": "Cập nhật bộ lọc thành công",
"statistics_configuration": "Cấu hình thống kê",
"statistics_retention": "Duy trì thống kê",
"statistics_retention_desc": "Nếu bạn giảm giá trị khoảng, một số dữ liệu sẽ bị mất",
@@ -418,31 +476,85 @@
"location": "Vị trí",
"orgname": "Tên tổ chức",
"netname": "Tên mạng",
"network": "Mạng",
"descr": "Mô tả",
"whois": "Whois",
"filtering_rules_learn_more": "<0>Tìm hiểu thêm</0> về việc tạo danh sách chặn máy chủ của riêng bạn.",
"blocked_by_response": "Chặn bởi CNAME hoặc địa IP ở phản hồi",
"blocked_by_cname_or_ip": "Đã bị chặn bởi CNAME hoặc IP",
"try_again": "Hãy thử lại",
"domain_desc": "Nhập tên miền hoặc ký tự đại diện mà bạn muốn được viết lại.",
"example_rewrite_domain": "chỉ viết lại phản hồi cho tên miền này.",
"example_rewrite_wildcard": "viết lại câu trả lời cho tất cả các tên miền phụ <0> example.org </0>.",
"rewrite_ip_address": "Địa chỉ IP: sử dụng IP này trong phản hồi A hoặc AAAA",
"rewrite_domain_name": "Tên miền: thêm bản ghi CNAME",
"rewrite_A": "<0>A</0>: giá trị đặc biệt, giữ bản ghi <0>A</0> từ nguồn",
"rewrite_AAAA": "<0>A</0>: giá trị đặc biệt, giữ bản ghi <0>A</0> từ nguồn",
"disable_ipv6": "Tắt IPv6",
"disable_ipv6_desc": "Nếu tính năng này được bật, tất cả các truy vấn DNS cho địa chỉ IPv6 (loại AAAA) sẽ bị loại bỏ.",
"fastest_addr": "Địa chỉ IP nhanh nhất",
"fastest_addr_desc": "Truy vấn tất cả các máy chủ DNS và trả về địa chỉ IP nhanh nhất trong số tất cả các phản hồi",
"autofix_warning_text": "Nếu bạn nhấp vào \"Khắc phục\", AdGuard Home sẽ định cấu hình hệ thống của bạn để sử dụng máy chủ DNS của AdGuard Home.",
"autofix_warning_list": "Nó sẽ thực hiện các tác vụ sau: <0> Hủy kích hoạt hệ thống DNSStubListener </0> <0> Đặt địa chỉ máy chủ DNS thành 127.0.0.1 </0> <0> Thay thế mục tiêu liên kết tượng trưng của /etc/resolv.conf bằng / run / systemd /resolve/resolv.conf </0> <0> Dừng DNSStubListener (tải lại dịch vụ do hệ thống phân giải) </0>",
"autofix_warning_result": "Do đó, tất cả các yêu cầu DNS từ hệ thống của bạn sẽ được AdGuard Home xử lý theo mặc định.",
"tags_title": "Thẻ",
"tags_desc": "Bạn có thể chọn các thẻ tương ứng với khách hàng. Thẻ có thể được bao gồm trong các quy tắc lọc và cho phép bạn áp dụng chúng chính xác hơn. <0>Tìm hiểu thêm</0>",
"form_select_tags": "Chọn thẻ khách hàng",
"check_title": "Kiểm tra bộ lọc",
"check_desc": "Kiểm tra xem tên máy chủ có được lọc không",
"check_desc": "Kiểm tra xem tên miền có tồn tại trong các bộ lọc không",
"check": "Kiểm tra",
"form_enter_host": "Nhập tên máy chủ",
"filtered_custom_rules": "Được lọc bởi các quy tắc lọc tùy chỉnh",
"choose_from_list": "Chọn từ danh sách",
"add_custom_list": "Thêm bộ lọc tùy chọn",
"host_whitelisted": "Trang đã được thêm vào danh sách được cho phép",
"check_ip": "Địa chỉ IP: {{ip}}",
"check_cname": "CNAME: {{cname}}",
"check_reason": "Lý do: {{reason}}",
"check_rule": "Quy tắc: {{rule}}",
"check_service": "Tên dịch vụ: {{service}}",
"check_not_found": "Không tìm thấy trong danh sách bộ lọc của bạn",
"client_confirm_block": "Bạn có muốn chặn người dùng {{ip}}?",
"client_confirm_unblock": "Bạn có muốn bỏ chặn người dùng {{ip}}?",
"client_blocked": "Đã chặn người dùng {{ip}}",
"client_unblocked": "Đã bỏ chặn người dùng {{ip}}",
"static_ip": "Địa chỉ IP tĩnh",
"static_ip_desc": "AdGuard Home là một máy chủ nên nó cần một địa chỉ IP tĩnh để hoạt động bình thường. Nếu không, tại một số thời điểm, bộ định tuyến của bạn có thể gán một địa chỉ IP khác cho thiết bị này.",
"set_static_ip": "Thiết lập địa chỉ IP tĩnh",
"install_static_ok": "Địa chỉ IP tĩnh đã được thiết lập",
"install_static_error": "AdGuard Home không thể cấu hình tự động cho giao diện mạng này. Vui lòng tìm hướng dẫn về cách thực hiện việc này theo cách thủ công.",
"install_static_configure": "Chúng tôi đã phát hiện thấy rằng một địa chỉ IP động được sử dụng - <0> {{ip}} </0>. Bạn có muốn sử dụng nó làm địa chỉ tĩnh của mình không?",
"confirm_static_ip": "AdGuard Home sẽ lấy {{ip}} làm địa chỉ IP tĩnh. Bạn có muốn tiếp tục?",
"list_updated": "Đã cập nhật {{count}} bộ lọc",
"list_updated_plural": "Đã cập nhật {{count}} bộ lọc",
"dnssec_enable": "Bật DNSSEC",
"dnssec_enable_desc": "Cắm mốc DNSSEC trong các truy vấn DNS sắp tới và kiểm tra kết quả (buộc phải có trình sửa lỗi hỗ trợ DNSSEC)",
"validated_with_dnssec": "Xác thực bỏi DNSSEC",
"all_queries": "Tất cả truy vấn",
"show_blocked_responses": "Bị chặn",
"show_whitelisted_responses": "Đã thêm vào danh sách cho phép",
"show_processed_responses": "Đã xử lý",
"blocked_safebrowsing": "Chặn bởi Safebrowsing",
"blocked_adult_websites": "Website người lớn đã chặn",
"blocked_threats": "Mối nguy hiểm đã chặn",
"allowed": "Được phép",
"safe_search": "Tìm kiếm an toàn"
"filtered": "Đã lọc",
"rewritten": "Đã viết lại",
"safe_search": "Tìm kiếm an toàn",
"blocklist": "Danh sách chặn",
"milliseconds_abbreviation": "ms",
"cache_size": "Kích thước cache",
"cache_size_desc": "Kích thước cache DNS (bytes)",
"filter_category_general": "Chung",
"filter_category_security": "Bảo mật",
"filter_category_regional": "Khu vực",
"filter_category_other": "Khác",
"filter_category_general_desc": "Bộ lọc chặn quảng cáo và theo dõi cho hầu hết các thiết bị",
"filter_category_security_desc": "Bộ lọc chuyên biệt chặn tên miền chứa mã độc và lừa đảo",
"filter_category_regional_desc": "Bộ lọc tập trung vào từng khu vực",
"filter_category_other_desc": "Bộ lọc chặn khác",
"setup_config_to_enable_dhcp_server": "Thiết lập cấu hình để bật máy chủ DHCP",
"original_response": "Phản hồi gốc",
"click_to_view_queries": "Nhấp để xem truy xuất",
"port_53_faq_link": "Cổng 53 thường được sử dụng \"DNSStubListener\" hoặc \"systemd-resolved\". Vui lòng đọc <0>hướng dẫn</0> để giải quyết vấn đề này."
}

View File

@@ -1,6 +1,7 @@
{
"client_settings": "客户端设置",
"example_upstream_reserved": "您可以将上游DNS 服务器<0>指定为特定域名</0>",
"example_upstream_comment": "您可以指定注解",
"upstream_parallel": "通过同时查询所有上游服务器,使用并行请求以加速解析",
"parallel_requests": "并行请求",
"load_balancing": "负载均衡",
@@ -11,6 +12,8 @@
"save_config": "保存配置",
"enabled_dhcp": "DHCP 服务器已启用",
"disabled_dhcp": "DHCP 服务器已禁用",
"unavailable_dhcp": "DHCP 无法使用",
"unavailable_dhcp_desc": "AdGuard Home 无法在您的操作系统上运行 DHCP 服务器",
"dhcp_title": "DHCP 服务器(实验性)",
"dhcp_description": "如果你的路由器没有提供 DHCP (动态主机配置协议)设置,你可以使用 AdGuard 内置的 DHCP 服务器。",
"dhcp_enable": "启用 DHCP 服务器",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "DHCP 静态租约",
"dhcp_leases_not_found": "未找到 DHCP 租约",
"dhcp_config_saved": "已保存 DHCP 服务器配置",
"dhcp_ipv4_settings": "DHCP IPv4设置",
"dhcp_ipv6_settings": "DHCP IPv6设置",
"form_error_required": "必填字段",
"form_error_ip4_format": "无效的 IPv4 格式",
"form_error_ip6_format": "无效的 IPv6 格式",
@@ -29,6 +34,7 @@
"form_error_client_id_format": "无效的客户端 ID 格式",
"form_error_positive": "必须大于 0",
"form_error_negative": "必须大于等于 0",
"range_end_error": "必须大于范围起始值",
"dhcp_form_gateway_input": "网关 IP",
"dhcp_form_subnet_input": "子网掩码",
"dhcp_form_range_title": "IP 地址范围",
@@ -83,7 +89,7 @@
"enabled_protection": "保护已启用",
"disable_protection": "禁用保护",
"disabled_protection": "保护已禁用",
"refresh_statics": "刷新状态",
"refresh_statics": "刷新统计数据",
"dns_query": "DNS查询",
"blocked_by": "<0>已被过滤器拦截</0>",
"stats_malware_phishing": "被拦截的恶意/钓鱼网站",
@@ -109,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 【家长控制】服务",
@@ -127,7 +133,8 @@
"encryption_settings": "加密设置",
"dhcp_settings": "DHCP 设置",
"upstream_dns": "上游 DNS 服务器",
"upstream_dns_hint": "如果此处留空AdGuard Home 将会使用 <a href='https://www.quad9.net/' target='_blank'>Quad9</a> 作为上游。",
"upstream_dns_help": "每行输入一个服务器地址。<a>了解更多</a>关于配置上游DNS服务器的内容",
"upstream_dns_configured_in_file": "配置路径{{path}}",
"test_upstream_btn": "测试上游 DNS",
"upstreams": "上游服务器",
"apply_btn": "应用",
@@ -181,6 +188,7 @@
"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_sdns": "你可以使用 <1>DNSCrypt</1> 的 <0>DNS Stamps</0> 或者 <2>DNS-over-HTTPS</2> 解析器",
"example_upstream_tcp": "常规 DNS基于 TCP ",
"all_lists_up_to_date_toast": "所有列表都是最新的",
@@ -189,8 +197,12 @@
"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": "日",
"date": "日",
"domain_name_table_header": "域名",
"domain_or_client": "域名或客户端",
"type_table_header": "类型",
@@ -208,8 +220,8 @@
"page_table_footer_text": "页",
"rows_table_footer_text": "行",
"updated_custom_filtering_toast": "自定义过滤规则已更新",
"rule_removed_from_custom_filtering_toast": "规则已从自定义过滤规则列表中移除",
"rule_added_to_custom_filtering_toast": "规则已添加到自定义过滤规则列表中",
"rule_removed_from_custom_filtering_toast": "规则已从自定义过滤规则列表中移除 {{rule}}",
"rule_added_to_custom_filtering_toast": "规则已添加到自定义过滤规则列表中 {{rule}}",
"query_log_response_status": "状态: {{value}}",
"query_log_filtered": "被 {{filter}} 过滤",
"query_log_confirm_clear": "你确定想要清除全部查询日志吗?",
@@ -230,21 +242,25 @@
"blocking_mode": "拦截模式",
"default": "默认",
"nxdomain": "无效域名",
"refused": "REFUSED",
"null_ip": "无效 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": "速度限制",
"edns_enable": "使用客户端的子网地址EDNS)",
"edns_cs_desc": "启用后AdGuard Home将会向DNS服务器发送客户端的子网地址进行查询",
"rate_limit_desc": "每个客户端每秒钟查询次数的限制 (0不限制)",
"rate_limit_desc": "每个客户端每秒钟查询次数的限制 (设置为 0 意味着不限制)",
"blocking_ipv4_desc": "拦截 A 记录请求返回的 IP 地址",
"blocking_ipv6_desc": "拦截 AAAA 记录请求返回的 IP 地址",
"blocking_mode_default": "默认被Adblock规则拦截时以NXDOMAIN码响应;被/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记录 ::)",
"blocking_mode_custom_ip": "自定IP以手动设置的IP地址响应",
@@ -300,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": "点击当前已连接网络的名称。",
@@ -321,6 +337,8 @@
"encryption_https_desc": "如果配置了 HTTPS 端口AdGuard Home 管理界面将可以通过 HTTPS 访问,它还将在在 '/dns-query' 位置提供 DNS-over-HTTPS 。",
"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 格式编码的证书复制粘贴到此处。",
@@ -354,7 +372,7 @@
"fix": "修复",
"dns_providers": "此为可从中选择的<0>已知 DNS 提供商列表</0>。",
"update_now": "立即更新",
"update_failed": "自动更新失败。请<a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>跟随这些步骤</a>以手动更新。",
"update_failed": "自动更新失败。请<a>跟随这些步骤</a>以手动更新。",
"processing_update": "正在更新 AdGuard Home请稍侯",
"clients_title": "客户端",
"clients_desc": "配置已连接到 AdGuard Home 的设备",
@@ -399,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> 的支持。",
@@ -512,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}}\"的封锁吗?",
@@ -546,13 +566,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",
"cache_ttl_min_override_desc": "覆盖从上游服务器接收到的TTL值 (最小)。这个值不能超过3600秒(1小时)",
"cache_ttl_max_override_desc": "覆盖从上游服务器接收到的TTL值(最大)",
"min_exceeds_max_value": "最小值超过最大值",
"value_not_larger_than": "值不能大于{{maximum}}",
"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": "安全",
"filter_category_regional": "区域",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "专用于拦截恶意软件、钓鱼或欺诈域名的列表",
"filter_category_regional_desc": "专注于区域广告和跟踪服务器的列表",
"filter_category_other_desc": "其他阻止列表",
"setup_config_to_enable_dhcp_server": "设置配置以启用DHCP服务器",
"original_response": "原始响应",
"click_to_view_queries": "点击查看查询",
"port_53_faq_link": "53端口常被DNSStubListener或systemdn解析的服务占用。请阅读<0>这份关于如何解决这一问题的说明</0>"
"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

@@ -0,0 +1,590 @@
{
"client_settings": "用戶端設定",
"example_upstream_reserved": "您可以<0>指定網域</0>使用特定 DNS 查詢",
"example_upstream_comment": "您可以指定註解",
"upstream_parallel": "使用平行查詢,同時查詢所有上游伺服器來來加速解析結果",
"parallel_requests": "平行處理",
"load_balancing": "負載平衝",
"load_balancing_desc": "一次只查詢一個伺服器。AdGuard Home 會使用加權隨機取樣來選擇使用的查詢結果,以確保速度最快的伺服器能被充分運用。",
"bootstrap_dns": "引導Boostrap DNS 伺服器",
"bootstrap_dns_desc": "引導BootstrapDNS 伺服器用來解析 DoH/DoT 的域名 IP。",
"check_dhcp_servers": "檢查 DHCP 伺服器",
"save_config": "儲存設定",
"enabled_dhcp": "DHCP 伺服器已啟動",
"disabled_dhcp": "DHCP 伺服器已關閉",
"unavailable_dhcp": "DHCP 無法使用",
"unavailable_dhcp_desc": "AdGuard Home 無法在您的作業系統上運行 DHCP 伺服器",
"dhcp_title": "DHCP 伺服器(實驗性功能!)",
"dhcp_description": "如果你的路由器沒有提供 DHCP 設定,您可以使用 AdGuard 內建的 DHCP 伺服器。",
"dhcp_enable": "開啟 DHCP 伺服器",
"dhcp_disable": "關閉 DHCP 伺服器",
"dhcp_not_found": "您可以安全地啟用內建 DHCP 伺服器 - 在目前網路中沒有找到任何有效的 DHCP 伺服器。但我們依舊建議您手動再次檢查,因為目前我們的自動檢測並不能確定 100% 準確",
"dhcp_found": "在目前網段中有正在運作的 DHCP 伺服器,開啟內建 DHCP 伺服器是不安全的。",
"dhcp_leases": "DHCP 租用",
"dhcp_static_leases": "DHCP 靜態租用",
"dhcp_leases_not_found": "找不到 DHCP 租約",
"dhcp_config_saved": "DHCP 設定已儲存",
"dhcp_ipv4_settings": "DHCP IPv4 設定",
"dhcp_ipv6_settings": "DHCP IPv6 設定",
"form_error_required": "必要欄位",
"form_error_ip4_format": "無效的 IPv4 格式",
"form_error_ip6_format": "無效的 IPv6 格式",
"form_error_ip_format": "無效的 IP 格式",
"form_error_mac_format": "無效的 「MAC 位址」格式",
"form_error_client_id_format": "無效的「客戶端 ID」格式",
"form_error_positive": "數值必須大於 0",
"form_error_negative": "數值必須大於等於 0",
"range_end_error": "必須大於起始值",
"dhcp_form_gateway_input": "閘道 IP 位址",
"dhcp_form_subnet_input": "子網路遮罩",
"dhcp_form_range_title": "IP 位址範圍",
"dhcp_form_range_start": "範圍開始",
"dhcp_form_range_end": "範圍結束",
"dhcp_form_lease_title": "DHCP 租用時間(以秒為單位)",
"dhcp_form_lease_input": "租用時間長度",
"dhcp_interface_select": "選擇 DHCP 使用的網路介面",
"dhcp_hardware_address": "硬體位址",
"dhcp_ip_addresses": "IP 位址",
"ip": "IP",
"dhcp_table_hostname": "主機名稱",
"dhcp_table_expires": "到期",
"dhcp_warning": "如果無論如何您都想要啟動 AdGuard 內建 DHCP 伺服器,請先確保同一網路下沒有正在運作的 DHCP 伺服器,否則很有可能會破壞其他已連線至網際網路的裝置。",
"dhcp_error": "無法偵測到同一網路下使否有其他 DHCP 伺服器。",
"dhcp_static_ip_error": "使用 DHCP 伺服器必須先指定靜態 IP 位置給 AdGuard。無法偵測到有效的靜態 IP 設定,請先手動設定。",
"dhcp_dynamic_ip_found": "您的網路介面 <0>{{interfaceName}}</0> 正在使用動態 IP要使用 DHCP 伺服器必須指定靜態 IP 給 AdGuard。\n目前您的 IP 位址 <0>{{ipAddress}}</0>,啟用 DHCP 後此 IP 將自動設定為靜態 IP 位址。",
"dhcp_lease_added": "靜態租用 \"{{key}}\" 已新增成功",
"dhcp_lease_deleted": "靜態租用 \"{{key}}\" 已刪除成功",
"dhcp_new_static_lease": "新增靜態租用",
"dhcp_static_leases_not_found": "找不到 DHCP 靜態租用",
"dhcp_add_static_lease": "新增靜態租用",
"dhcp_reset": "您確定要重設 DHCP 設定嗎?",
"country": "國家",
"city": "城市",
"delete_confirm": "您確定要刪除「{{key}}」嗎?",
"form_enter_hostname": "請輸入主機名稱",
"error_details": "錯誤詳細資料",
"response_details": "回應詳細資料",
"request_details": "請求詳細資料",
"client_details": "用戶端詳細資料",
"details": "詳細資料",
"back": "返回",
"dashboard": "儀表板",
"settings": "設定",
"filters": "過濾器",
"filter": "過濾器",
"query_log": "查詢記錄",
"compact": "精簡",
"nothing_found": "沒有結果",
"faq": "常見問題",
"version": "版本",
"address": "位址",
"protocol": "協定",
"on": "運作中",
"off": "未運作",
"copyright": "版權",
"homepage": "首頁",
"report_an_issue": "回報問題",
"privacy_policy": "隱私政策",
"enable_protection": "開啟保護",
"enabled_protection": "已開啟保護",
"disable_protection": "停用防護",
"disabled_protection": "已停用防護",
"refresh_statics": "重新整理統計資料",
"dns_query": "DNS 查詢",
"blocked_by": "<0>被過濾器封鎖</0>",
"stats_malware_phishing": "已封鎖惡意軟體/網路釣魚",
"stats_adult": "已封鎖成人網站",
"stats_query_domain": "熱門查詢網域排行",
"for_last_24_hours": "過去 24 小時",
"for_last_days": "最近 {{count}} 天內",
"for_last_days_plural": "最近 {{count}} 天內",
"no_domains_found": "找不到網域",
"requests_count": "查詢次數",
"top_blocked_domains": "熱門封鎖網域排行",
"top_clients": "熱門用戶端排行",
"no_clients_found": "找不到用戶端",
"general_statistics": "一般統計資料",
"number_of_dns_query_days": "過去 {{count}} 天內 DNS 查詢總數",
"number_of_dns_query_days_plural": "過去 {{count}} 天內 DNS 查詢總數",
"number_of_dns_query_24_hours": "過去 24小時內 DNS 查詢總數",
"number_of_dns_query_blocked_24_hours": "已被廣告過濾器與主機黑名單封鎖 DNS 查詢總數",
"number_of_dns_query_blocked_24_hours_by_sec": "已被 AdGuard 瀏覽安全模組封鎖的 DNS 查詢總數",
"number_of_dns_query_blocked_24_hours_adult": "已封鎖成人網站總數",
"enforced_save_search": "強制使用安全搜尋",
"number_of_dns_query_to_safe_search": "已強制使用安全搜尋總數",
"average_processing_time": "平均的處理時間",
"average_processing_time_hint": "處理 DNS 請求的平均時間(毫秒)",
"block_domain_use_filters_and_hosts": "使用過濾器與 hosts 檔案阻擋網域查詢",
"filters_block_toggle_hint": "您可在<a>過濾器</a>設定中設定封鎖規則。",
"use_adguard_browsing_sec": "使用 AdGuard 瀏覽安全網路服務",
"use_adguard_browsing_sec_hint": "AdGuard Home 將檢查查詢網域是否在瀏覽安全服務黑名單內。它使用尊重個人隱私的 API 來進行檢查:會先透過 SHA256 將網域編碼後取簡短前置字串傳送到伺服器核對。",
"use_adguard_parental": "使用 AdGuard 家長監護功能",
"use_adguard_parental_hint": "AdGuard Home 將檢查查詢網域是否含有成人內容。它使用與 AdGuard 瀏覽安全一樣的尊重個人隱私的 API 來進行檢查。",
"enforce_safe_search": "強制使用安全搜尋",
"enforce_save_search_hint": "AdGuard Home 可在下列搜尋引擎使用強制安全搜尋Google、YouTube、Bing、DuckDuckGo 和 Yandex。",
"no_servers_specified": "沒有指定的伺服器",
"general_settings": "一般設定",
"dns_settings": "DNS 設定",
"dns_blocklists": "DNS 黑名單",
"dns_allowlists": "DNS 白名單",
"dns_blocklists_desc": "AdGuard Home 會對符合規則的查詢進行封鎖。",
"dns_allowlists_desc": "在白名單內的網域無論如何都會被允許,即使他在其他黑名單內也一樣。",
"custom_filtering_rules": "自訂過濾規則",
"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": "套用",
"disabled_filtering_toast": "已停用過濾",
"enabled_filtering_toast": "已啟用過濾",
"disabled_safe_browsing_toast": "已停用安全瀏覽",
"enabled_safe_browsing_toast": "已啟用安全瀏覽",
"disabled_parental_toast": "已停用家長監護",
"enabled_parental_toast": "已啟用家長監護",
"disabled_safe_search_toast": "已停用安全搜尋",
"enabled_save_search_toast": "已啟用安全搜尋",
"enabled_table_header": "啟用",
"name_table_header": "名稱",
"list_url_table_header": "清單 URL 網址",
"rules_count_table_header": "規則總數",
"last_time_updated_table_header": "上次更新時間",
"actions_table_header": "動作",
"request_table_header": "請求",
"edit_table_action": "編輯",
"delete_table_action": "刪除",
"elapsed": "已耗用",
"filters_and_hosts_hint": "AdGuard Home 接受「adblock」以及「host檔案」語法。",
"no_blocklist_added": "沒有新增的黑名單",
"no_whitelist_added": "沒有新增的白名單",
"add_blocklist": "新增黑名單",
"add_allowlist": "新增白名單",
"cancel_btn": "取消",
"enter_name_hint": "輸入名稱",
"enter_url_or_path_hint": "請在列表中輸入 URL 網址或絕對路徑",
"check_updates_btn": "檢查更新",
"new_blocklist": "新增黑名單",
"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": "一行一條規則。您可以使用「adblock」語法或「hosts檔案」的語法。",
"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_comment": "! Here goes a comment",
"example_comment_meaning": "註解",
"example_comment_hash": "# Also a comment",
"example_regex_meaning": "使用正規表示式Regular Expression來阻止對應的網域查詢",
"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_sdns": "您可以使透過 <0>DNS Stamps</0> 來解析 <1>DNSCrypt</1> 或 <2>DNS-over-HTTPS</2>",
"example_upstream_tcp": "一般 DNS透過 TCP",
"all_lists_up_to_date_toast": "所有清單已經是最新的",
"updated_upstream_dns_toast": "已更新上游 DNS 伺服器",
"dns_test_ok_toast": "設定中的 DNS 上游運作正常",
"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": "域名",
"domain_or_client": "網域或用戶端",
"type_table_header": "類型",
"response_table_header": "回應",
"response_code": "回應代碼",
"client_table_header": "用戶端",
"empty_response_status": "空白",
"show_all_filter_type": "顯示全部",
"show_filtered_type": "僅顯示已過濾",
"no_logs_found": "找不到記錄",
"refresh_btn": "重新整理",
"previous_btn": "上一頁",
"next_btn": "下一頁",
"loading_table_status": "正在載入...",
"page_table_footer_text": "頁",
"rows_table_footer_text": "列",
"updated_custom_filtering_toast": "自訂過濾規則已更新",
"rule_removed_from_custom_filtering_toast": "已從自訂過濾規則中移除:{{rule}}",
"rule_added_to_custom_filtering_toast": "已新增至自訂規則中:{{rule}}",
"query_log_response_status": "狀態:{{value}}",
"query_log_filtered": "被 {{filter}} 過濾",
"query_log_confirm_clear": "您確定要清除整個查詢記錄嗎?",
"query_log_cleared": "已清除查詢記錄",
"query_log_updated": "已成功更新查詢記錄",
"query_log_clear": "清除查詢記錄",
"query_log_retention": "查詢記錄保留時間",
"query_log_enable": "開啟記錄",
"query_log_configuration": "記錄檔設定",
"query_log_disabled": "查詢記錄未開啟,可以在<0>設定</0>中開啟",
"query_log_strict_search": "使用雙引號來強調搜尋結果",
"query_log_retention_confirm": "您確定要更改記錄檔保存期限嗎?如果您縮短期限部分資料可能將會遺失",
"anonymize_client_ip": "將用戶端 IP 匿名化",
"anonymize_client_ip_desc": "不要將用戶端完整 IP 位址儲存在記錄檔與統計資料",
"dns_config": "DNS 伺服器設定",
"dns_cache_config": "DNS 快取設定",
"dns_cache_config_desc": "在這裡您可以設定 DNS 快取",
"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": "速率限制",
"edns_enable": "編輯 EDNS 用戶端子網路",
"edns_cs_desc": "開啟後 AdGuard Home 將會傳送用戶端的子網路給 DNS 伺服器。",
"rate_limit_desc": "限制單一裝置每秒發出的查詢次數(設定為 0 即表示無限制)",
"blocking_ipv4_desc": "回覆指定 IPv4 位址給被封鎖的網域的 A 紀錄查詢",
"blocking_ipv6_desc": "回覆指定 IPv6 位址給被封鎖的網域的 AAAA 紀錄查詢",
"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 位址",
"upstream_dns_client_desc": "如果您將此欄位留白AdGuard Home 將使用 <0>DNS 設定</0> 內的設定的 DNS 伺服器。",
"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 伺服器。用來控制您自己的整個網路以及裝置,而且並不需要在裝置安裝程式。",
"install_settings_title": "管理介面",
"install_settings_listen": "監聽介面",
"install_settings_port": "連接埠",
"install_settings_interface_link": "您可以從以下 IP 位址來訪問 AdGuard Home 管理介面:",
"form_error_port": "輸入有效的連接埠",
"install_settings_dns": "DNS 伺服器",
"install_settings_dns_desc": "您需要將您的裝置或路由器設定以下的 IP 位址為 DNS 伺服器:",
"install_settings_all_interfaces": "所有介面",
"install_auth_title": "驗證",
"install_auth_desc": "強烈建議為 AdGuard Home 管理介面設定驗證密碼,即使管理介面僅能從本地區域網路連接,不過設定密碼保護仍然很重要。",
"install_auth_username": "使用者名稱",
"install_auth_password": "密碼",
"install_auth_confirm": "確認密碼",
"install_auth_username_enter": "輸入用戶名",
"install_auth_password_enter": "輸入密碼",
"install_step": "步驟",
"install_devices_title": "配置您的裝置",
"install_devices_desc": "要開始使用 AdGuard Home您需要設定好裝置才能使用。",
"install_submit_title": "恭喜!",
"install_submit_desc": "安裝步驟已完成,現在已經可以開始使用 AdGuard Home",
"install_devices_router": "路由器",
"install_devices_router_desc": "使用此設定後,所有連接家中路由器的裝置都會自動套用,無須在每台裝置上個別設定。",
"install_devices_address": "AdGuard Home DNS 伺服器正在監聽以下位址",
"install_devices_router_list_1": "開啟您的路由器設定。通常可透過瀏覽器開啟http://192.168.0.1/ 或 http://192.168.1.1)。接著您可能會被要求驗證登入,如果忘記密碼可以按壓路由器的 REST 重設按鈕來重設。部分路由器可能需要安裝特定應用程式,在這種情況下應該已經安裝在您的電腦或手機上。",
"install_devices_router_list_2": "找到 DHCP/DNS 設定。允許兩到三組數字的欄位旁邊尋找 DNS 字串,每組數字分為四組,每組一到三位數。",
"install_devices_router_list_3": "請在那邊輸入您的 AdGuard Home 伺服器位址。",
"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_6": "點擊「使用下列的 DNS 伺服器位址」,接著輸入您的 AdGuard Home 伺服器位址。",
"install_devices_macos_list_1": "點擊左上角的 Apple Icon接著點擊「系統偏好設定」。",
"install_devices_macos_list_2": "點擊「網路」。",
"install_devices_macos_list_3": "選擇清單中第一個連線接著點選「進階設定」。",
"install_devices_macos_list_4": "選擇 DNS 分頁,接著輸入您的 AdGuard Home 伺服器位址。",
"install_devices_android_list_1": "在 Android 主選單中點選設定。",
"install_devices_android_list_2": "在 Wi-Fi 選單中會列出所有可用的網路(在行動網路時無法使用自訂 DNS。",
"install_devices_android_list_3": "長按您正在使用的網路,接著點選修改網路。",
"install_devices_android_list_4": "在某些裝置上您需要勾選進階方塊才能接著設定。要設定自訂 DNS 必須先將 IP 設定從 DHCP 改為靜態 IP。",
"install_devices_android_list_5": "將 DNS 1 和 DNS 2 更改成您的 AdGuard Home 伺服器位址。",
"install_devices_ios_list_1": "從主畫面中,點選設定。",
"install_devices_ios_list_2": "在左側選擇 Wi-Fi在行動網路時無法使用自訂 DNS。",
"install_devices_ios_list_3": "點選連線中的網路",
"install_devices_ios_list_4": "在 DNS 欄位中輸入您的 AdGuard Home 伺服器位址。",
"get_started": "開始設定",
"next": "下一步",
"open_dashboard": "開啟儀表板",
"install_saved": "成功儲存",
"encryption_title": "加密",
"encryption_desc": "加密HTTPS/TLS提供給 DNS 和「管理介面網頁介面」兩者",
"encryption_config_saved": "加密設定已儲存",
"encryption_server": "伺服器名稱",
"encryption_server_enter": "輸入您的網域名稱",
"encryption_server_desc": "要使用 HTTPS您必須輸入與您 SSL 憑證相符的伺服器名稱。",
"encryption_redirect": "自重新導向到 HTTPS",
"encryption_redirect_desc": "如果啟用AdGuard Home 將會自動導向 HTTP 到 HTTPS。",
"encryption_https": "HTTPS 連接埠",
"encryption_https_desc": "如果已設定 HTTPSAdGuard Home 網頁管理介面將會使用 HTTPS 來存取,且「/dns-query」也提供 DNS-over-HTTPS 查詢。",
"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>取得免費的 SSL 憑證或從受信任的 SSL 憑證簽發機構購買。",
"encryption_certificates_input": "在這裡複製/貼上您的 PEM 憑證。",
"encryption_status": "狀態",
"encryption_expire": "到期",
"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_chain_valid": "憑證鏈結有效",
"encryption_chain_invalid": "憑證連結無效",
"encryption_key_valid": "{{type}} 私密金鑰有效",
"encryption_key_invalid": "{{type}} 私密金鑰無效",
"encryption_subject": "主體",
"encryption_issuer": "簽發者",
"encryption_hostnames": "主機名稱",
"encryption_reset": "您確定要重設加密設定嗎?",
"topline_expiring_certificate": "您的 SSL 憑證即將到期。請前往<0>加密設定</0>更新。",
"topline_expired_certificate": "您的 SSL 憑證已到期。請前往<0>加密設定</0>更新。",
"form_error_port_range": "輸入範圍 80-65535 中的值",
"form_error_port_unsafe": "這個連接埠不安全",
"form_error_equal": "不可相同",
"form_error_password": "密碼不相符",
"reset_settings": "重設設定",
"update_announcement": "有新版的 AdGuard Home {{version}} 可供更新!詳細資訊請<0>點擊這裡</0>。",
"setup_guide": "安裝導覽",
"dns_addresses": "DNS 位址",
"dns_start": "DNS 伺服器正在啟動",
"dns_status_error": "檢查 DNS 伺服器狀態錯誤",
"down": "離線",
"fix": "修正",
"dns_providers": "下列是可以使用的<0>軟體清單</0>。",
"update_now": "立即更新",
"update_failed": "自動更新發生錯誤。請嘗試依照<a>以下步驟</a> 來手動更新。",
"processing_update": "請稍候AdGuard Home 正在更新",
"clients_title": "用戶端",
"clients_desc": "對已連接到 AdGuard Home 的裝置進行設定",
"settings_global": "全域",
"settings_custom": "自訂",
"table_client": "用戶端",
"table_name": "名稱",
"save_btn": "儲存",
"client_add": "新增用戶端",
"client_new": "設定新用戶端",
"client_edit": "編輯用戶端",
"client_identifier": "識別碼",
"ip_address": "IP 位址",
"client_identifier_desc": "可通過 IP 地址、CIDR、MAC 地址來辨識使用者裝置。注意:必須使用 AdGuard Home 內建 <0>DHCP 伺服器</0> 才能偵測 MAC 地址。",
"form_enter_ip": "輸入 IP",
"form_enter_mac": "輸入 MAC 地址",
"form_enter_id": "輸入識別碼",
"form_add_id": "新增識別碼",
"form_client_name": "輸入用戶端名稱",
"name": "名稱",
"client_global_settings": "Use global settings",
"client_deleted": "已刪除「{{key}}」",
"client_added": "已新增「{{key}}」",
"client_updated": "已更新「{{key}}」",
"clients_not_found": "找不到用戶端",
"client_confirm_delete": "您確定要刪除「{{key}}」用戶端嗎?",
"list_confirm_delete": "您確定要刪除這個清單嗎?",
"auto_clients_title": "用戶端(連接時間)",
"auto_clients_desc": "未設定但有連接過 AdGuard Home 的用戶端",
"access_title": "存取設定",
"access_desc": "您可以在這裡設定 AdGuard Home DNS 伺服器存取規則。",
"access_allowed_title": "用戶端白名單",
"access_allowed_desc": "輸入 CIDR 或 IP 位址格式的清單,設定後 AdGuard Home 將僅接受設定的 IP 位址查詢請求。",
"access_disallowed_title": "用戶端黑名單",
"access_disallowed_desc": "輸入 CIDR 或 IP 位址格式的清單,設定後 AdGuard Home 將拒絕設定的 IP 位址查詢請求。",
"access_blocked_title": "網域黑名單",
"access_blocked_desc": "請不要與過濾器混淆AdGuard Home 將對這些網域執行過濾檢查而是直接拒絕查詢。您可以輸入特定網域名稱來使用設定或使用萬用字元例如「example.org」、「*.example.org」或「||example.org^」。",
"access_settings_saved": "存取設定已儲存",
"updates_checked": "檢查更新成功",
"updates_version_equal": "AdGuard Home 是最新的版本",
"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>以下是您可以使用軟體的列表</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>。",
"setup_dns_privacy_ios_1": "<0>DNSCloak</0> 支援 <1>DNS-over-HTTPS</1>,若要使用您必須先產生 <2>DNS Stamp</2>。",
"setup_dns_privacy_ios_2": "<0>AdGuard for iOS</0> 支援 <1>DNS-over-HTTPS</1> 與 <1>DNS-over-TLS</1> 設定。",
"setup_dns_privacy_other_title": "其他實作軟體",
"setup_dns_privacy_other_1": "AdGuard Home 本身在任何平台都是安全的 DNS 用戶端。",
"setup_dns_privacy_other_2": "<0>dnsproxy</0> 支援所有加密 DNS 協定。",
"setup_dns_privacy_other_3": "<0>dnscrypt-proxy</0> 支援 <1>DNS-over-HTTPS</1>。",
"setup_dns_privacy_other_4": "<0>Mozilla Firefox</0> 支援 <1>DNS-over-HTTPS</1>。",
"setup_dns_privacy_other_5": "您可以在<0>這裏</0>與<1>這裏</1>找到更多實作軟體。",
"setup_dns_notice": "要使用 <1>DNS-over-HTTPS</1> 或 <1>DNS-over-TLS</1>,您必須先在 AdGuard Home 完成 <0>加密設定</0>。",
"rewrite_added": "「{{key}}」的 DNS 覆寫新增成功",
"rewrite_deleted": "「{{key}}」的 DNS 覆寫刪除成功",
"rewrite_add": "新增 DNS 覆寫",
"rewrite_not_found": "找不到 DNS 覆寫",
"rewrite_confirm_delete": "您確定要刪除 \"{{key}}\" 的 DNS 覆寫?",
"rewrite_desc": "提供簡單的方式對特定網域自訂 DNS 回應。",
"rewrite_applied": "已套用 DNS 覆寫規則",
"rewrite_hosts_applied": "由「hosts 檔案」覆寫",
"dns_rewrites": "DNS 覆寫",
"form_domain": "輸入網域名稱或使用萬用字元。",
"form_answer": "輸入 IP 或網域名稱",
"form_error_domain_format": "網域格式無效",
"form_error_answer_format": "回應格式無效",
"configure": "設定",
"main_settings": "主要設定",
"block_services": "封鎖特定服務",
"blocked_services": "已封鎖服務",
"blocked_services_desc": "用來快速封鎖熱門網站或服務",
"blocked_services_saved": "已成功封鎖服務",
"blocked_services_global": "使用全域封鎖服務",
"blocked_service": "封鎖服務",
"block_all": "封鎖全部",
"unblock_all": "全部解除封鎖",
"encryption_certificate_path": "憑證路徑",
"encryption_private_key_path": "私鑰路徑",
"encryption_certificates_source_path": "設定憑證檔案路徑",
"encryption_certificates_source_content": "貼上憑證內容",
"encryption_key_source_path": "設定私鑰路徑",
"encryption_key_source_content": "貼上私鑰內容",
"stats_params": "統計資料設定",
"config_successfully_saved": "已儲存設定",
"interval_24_hour": "24 小時",
"interval_days": "{{count}} 天",
"interval_days_plural": "{{count}} 天",
"domain": "網域",
"answer": "回應",
"filter_added_successfully": "已成功新增清單",
"filter_removed_successfully": "已成功移除清單",
"filter_updated": "已成功更新清單",
"statistics_configuration": "統計資料設定",
"statistics_retention": "統計資料保留時間",
"statistics_retention_desc": "如果您縮短期限部分資料可能將會遺失",
"statistics_clear": " 清除統計資料",
"statistics_clear_confirm": "您確定要清除統計資料嗎?",
"statistics_retention_confirm": "您確定要更改統計資料保存時間嗎?如果您縮短期限部分資料可能將會遺失",
"statistics_cleared": "已清除統計資料",
"interval_hours": "{{count}} 小時",
"interval_hours_plural": "{{count}} 小時",
"filters_configuration": "過濾器設定",
"filters_enable": "開啟過濾器",
"filters_interval": "過濾器更新頻率",
"disabled": "已停用",
"username_label": "使用者名稱",
"username_placeholder": "輸入使用者名稱",
"password_label": "密碼",
"password_placeholder": "輸入密碼",
"sign_in": "登入",
"sign_out": "登出",
"forgot_password": "忘記密碼?",
"forgot_password_desc": "請依照<0>步驟</0>來為您的帳號建立新密碼。",
"location": "位置",
"orgname": "組織名稱",
"netname": "網路名稱",
"network": "網路",
"descr": "描述",
"whois": "Whois",
"filtering_rules_learn_more": "<0>進一步了解</0>關於創建自己的「hosts 檔案」",
"blocked_by_response": "回應時被 CNAME 或 IP 封鎖",
"blocked_by_cname_or_ip": "使用 CNAME 或 IP 封鎖",
"try_again": "再試一次",
"domain_desc": "輸入您想要覆寫的網域或萬用字元。",
"example_rewrite_domain": "DNS 覆寫只套用在這個域名。",
"example_rewrite_wildcard": "DNS 覆寫會套用在 <0>example.org</0> 及所有子域名。",
"rewrite_ip_address": "IP 位址:使用 A 或 AAAA 紀錄回應",
"rewrite_domain_name": "網域名稱:新增一筆 CNAME 紀錄",
"rewrite_A": "<0>A</0>: 特殊值,將上游查詢結果覆寫 <0>A</0> 紀錄",
"rewrite_AAAA": "<0>AAAA</0>: 特殊值,將上游查詢結果覆寫 <0>AAAA</0> 紀錄",
"disable_ipv6": "停用 IPv6",
"disable_ipv6_desc": "開啟此功能後所有,所有對於 IPv6 位址AAAA的查詢都會被捨棄。",
"fastest_addr": "Fastest IP 位址",
"fastest_addr_desc": "從所有 DNS 伺服器查詢中回應最快的 IP 位址",
"autofix_warning_text": "如果您點擊「修復」AdGuard Home 將更改您的系統 DNS 設定更改為 AdGuard Home 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 請求預設由本機的 AdGuard Home 處理。",
"tags_title": "標籤",
"tags_desc": "您可以選擇與用戶端相對應的標籤。標籤可已包含在過濾規則內且使用上更精確。\n<0>進一步了解</0>",
"form_select_tags": "選擇用戶端標籤",
"check_title": "過濾檢查",
"check_desc": "檢查網域是否被封鎖",
"check": "檢查",
"form_enter_host": "輸入網域",
"filtered_custom_rules": "被自訂過濾規則封鎖",
"choose_from_list": "從清單中選取",
"add_custom_list": "新增自訂清單",
"host_whitelisted": "主機已列入白名單",
"check_ip": "IP 位址:{{ip}}",
"check_cname": "CNAME{{cname}}",
"check_reason": "原因:{{reason}}",
"check_rule": "規則:{{rule}}",
"check_service": "服務名稱:{{service}}",
"service_name": "服務名稱",
"check_not_found": "未在您的過濾清單中找到",
"client_confirm_block": "您確定要封鎖「{{ip}}」用戶端?",
"client_confirm_unblock": "您確定要將「{{ip}}」解除封鎖嗎?",
"client_blocked": "已封鎖「{{ip}}」",
"client_unblocked": "已解除封鎖「{{ip}}」",
"static_ip": "靜態 IP 位址",
"static_ip_desc": "由於 AdGuard Home 是個伺服器,因此需要一組靜態 IP 位址使它正常運作。否則在某些時候您的路由器可能會發派不同的 IP 位址給 AdGuard Home。",
"set_static_ip": "設定一組靜態 IP 位址",
"install_static_ok": "好消息!靜態 IP 位址設定完成了",
"install_static_error": "AdGuard Home 無法在這個網路介面上執行自動設定。請尋找有關如何手動更改設定的說明。",
"install_static_configure": "我們偵測到 <0>{{ip}}</0> 動態 IP 已被使用。您想要將它當作靜態 IP 使用嗎?",
"confirm_static_ip": "AdGuard Home 將使用 {{ip}} 作為靜態 IP。要繼續處理",
"list_updated": "已更新 {{count}} 個清單",
"list_updated_plural": "已更新 {{count}} 個清單",
"dnssec_enable": "啟用 DNSSEC",
"dnssec_enable_desc": "在連出 DNS 查詢結果中加入 DNSSEC 旗幟並檢查結果(必須開啟 DNSSEC-enabled 解析器)",
"validated_with_dnssec": "DNSSEC 驗證有效",
"all_queries": "所有查詢",
"show_blocked_responses": "已封鎖",
"show_whitelisted_responses": "已加入允許清單",
"show_processed_responses": "已處理",
"blocked_safebrowsing": "被安全瀏覽封鎖",
"blocked_adult_websites": "已封鎖的成人網站",
"blocked_threats": "已封鎖的威脅",
"allowed": "已允許",
"filtered": "已過濾",
"rewritten": "已覆寫",
"safe_search": "安全搜尋",
"blocklist": "封鎖清單",
"milliseconds_abbreviation": "ms",
"cache_size": "快取大小",
"cache_size_desc": "DNS 快取大小bytes",
"cache_ttl_min_override": "覆寫最小 TTL 值",
"cache_ttl_max_override": "覆寫最大 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": "區域性",
"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": "建立設定檔來使用 DHCP 伺服器",
"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": "負載平衡",
@@ -11,6 +12,8 @@
"save_config": "儲存配置",
"enabled_dhcp": "動態主機設定協定DHCP伺服器被啟用",
"disabled_dhcp": "動態主機設定協定DHCP伺服器被禁用",
"unavailable_dhcp": "DHCP 為不可用的",
"unavailable_dhcp_desc": "AdGuard Home 無法於您的作業系統上執行 DHCP 伺服器",
"dhcp_title": "動態主機設定協定DHCP伺服器實驗性的",
"dhcp_description": "如果您的路由器未提供動態主機設定協定DHCP設定您可使用 AdGuard 自身內建的 DHCP 伺服器。",
"dhcp_enable": "啟用動態主機設定協定DHCP伺服器",
@@ -21,6 +24,8 @@
"dhcp_static_leases": "動態主機設定協定DHCP靜態租約",
"dhcp_leases_not_found": "無已發現之動態主機設定協定DHCP租約",
"dhcp_config_saved": "動態主機設定協定DHCP配置被成功地儲存",
"dhcp_ipv4_settings": "DHCP IPv4 設定",
"dhcp_ipv6_settings": "DHCP IPv6 設定",
"form_error_required": "必填的欄位",
"form_error_ip4_format": "無效的 IPv4 格式",
"form_error_ip6_format": "無效的 IPv6 格式",
@@ -29,11 +34,12 @@
"form_error_client_id_format": "無效的用戶端 ID 格式",
"form_error_positive": "必須大於 0",
"form_error_negative": "必須等於或大於 0",
"range_end_error": "必須大於起始範圍",
"dhcp_form_gateway_input": "閘道 IP",
"dhcp_form_subnet_input": "子網路遮罩",
"dhcp_form_range_title": "IP 位址範圍",
"dhcp_form_range_start": "範圍開始",
"dhcp_form_range_end": "範圍結束",
"dhcp_form_range_start": "起始範圍",
"dhcp_form_range_end": "結束範圍",
"dhcp_form_lease_title": "動態主機設定協定DHCP租約時間以秒數",
"dhcp_form_lease_input": "租約期間",
"dhcp_interface_select": "選擇動態主機設定協定DHCP介面",
@@ -107,9 +113,9 @@
"enforced_save_search": "已強制執行的安全搜尋",
"number_of_dns_query_to_safe_search": "安全搜尋已被強制執行之屬於搜尋引擎的 DNS 請求之數量",
"average_processing_time": "平均的處理時間",
"average_processing_time_hint": "處理一項 DNS 請求以毫秒ms平均時間",
"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 家長監控之網路服務",
@@ -127,7 +133,8 @@
"encryption_settings": "加密設定",
"dhcp_settings": "動態主機設定協定DHCP設定",
"upstream_dns": "上游的 DNS 伺服器",
"upstream_dns_hint": "如果您將該欄位留空AdGuard Home 將使用 <a href='https://www.quad9.net/' target='_blank'>Quad9</a> 作為上游。",
"upstream_dns_help": "輸入伺服器位址,每行一個。<a>了解更多</a>有關配置上游的 DNS 伺服器。",
"upstream_dns_configured_in_file": "被配置在 {{path}}",
"test_upstream_btn": "測試上行資料流",
"upstreams": "上游",
"apply_btn": "套用",
@@ -181,6 +188,7 @@
"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_sdns": "您可使用關於 <1>DNSCrypt</1> 或 <2>DNS-over-HTTPS</2> 解析器之 <0>DNS 戳記</0>",
"example_upstream_tcp": "一般的 DNS透過 TCP",
"all_lists_up_to_date_toast": "所有的清單已是最新的",
@@ -189,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": "域名",
@@ -199,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": "上一頁",
@@ -208,8 +220,8 @@
"page_table_footer_text": "頁面",
"rows_table_footer_text": "列",
"updated_custom_filtering_toast": "已更新自訂的過濾規則",
"rule_removed_from_custom_filtering_toast": "規則從自訂的過濾規則中被移除",
"rule_added_to_custom_filtering_toast": "規則被加至自訂的過濾規則中",
"rule_removed_from_custom_filtering_toast": "從自訂的過濾規則中被移除的規則:{{rule}}",
"rule_added_to_custom_filtering_toast": "被加至自訂的過濾規則中的規則:{{rule}}",
"query_log_response_status": "狀態:{{value}}",
"query_log_filtered": "被 {{filter}} 過濾",
"query_log_confirm_clear": "您確定您想要清除整個查詢記錄嗎?",
@@ -230,25 +242,29 @@
"blocking_mode": "封鎖模式",
"default": "預設",
"nxdomain": "不存在的網域NXDOMAIN",
"refused": "已拒絕REFUSED",
"null_ip": "無效的 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": "速率限制",
"edns_enable": "啟用對於 DNS 的擴充機制EDNS用戶端子網路",
"edns_cs_desc": "如果被啟用AdGuard Home 將持續傳送用戶端的子網路到 DNS 伺服器。",
"rate_limit_desc": "單一的用戶端被允許傳送的每秒請求之數量(0無限制的)",
"rate_limit_desc": "單一的用戶端被允許傳送的每秒請求之數量(設定它為 0 表示無限制的)",
"blocking_ipv4_desc": "要被返回給已封鎖的 A 請求之 IP 位址",
"blocking_ipv6_desc": "要被返回給已封鎖的 AAAA 請求之 IP 位址",
"blocking_mode_default": "預設:當被廣告封鎖樣式的規則封鎖時,以 NXDOMAIN 回覆;當被 /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": "在已知的域名資料庫中被發現。",
@@ -288,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 選單主畫面中,輕觸設定。",
@@ -303,7 +319,7 @@
"install_devices_android_list_5": "更改 DNS 1 和 DNS 2 位置的值為您的 AdGuard Home 伺服器位址。",
"install_devices_ios_list_1": "從主畫面中,輕觸設定。",
"install_devices_ios_list_2": "在左側的選單中選擇 Wi-Fi不可能為行動網路配置 DNS。",
"install_devices_ios_list_3": "目前現行的網路之名稱輕觸。",
"install_devices_ios_list_3": "目前現行的網路之名稱輕觸。",
"install_devices_ios_list_4": "在該 DNS 欄位中,輸入您的 AdGuard Home 伺服器位址。",
"get_started": "開始吧",
"next": "下一頁",
@@ -321,6 +337,8 @@
"encryption_https_desc": "如果 HTTPS 連接埠被配置AdGuard Home 管理員介面透過 HTTPS 將為可存取的,且它也將於 '/dns-query' 位置上提供 DNS-over-HTTPS。",
"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-encoded憑證。",
@@ -354,7 +372,7 @@
"fix": "修復",
"dns_providers": "這裡是一個從中選擇之<0>已知的 DNS 供應商之清單</0>。",
"update_now": "立即更新",
"update_failed": "自動更新已失敗。請<a href='https://github.com/AdguardTeam/AdGuardHome/wiki/Getting-Started#update'>遵循這些步驟</a>以手動地更新。",
"update_failed": "自動更新已失敗。請<a>遵循這些步驟</a>以手動地更新。",
"processing_update": "請稍候AdGuard Home 正被更新",
"clients_title": "用戶端",
"clients_desc": "配置被連線到 AdGuard Home 的裝置",
@@ -399,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> 支援。",
@@ -512,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}}\" 嗎?",
@@ -537,7 +557,7 @@
"blocked_adult_websites": "已封鎖的成人網站",
"blocked_threats": "已封鎖的威脅",
"allowed": "已允許的",
"filtered": "過濾的",
"filtered": "過濾的",
"rewritten": "已改寫的",
"safe_search": "安全搜尋",
"blocklist": "封鎖清單",
@@ -546,13 +566,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",
"cache_ttl_min_override_desc": "覆寫從上游的伺服器收到的存活時間TTL數值最小值。此數值不能大於 36001 小時",
"cache_ttl_max_override_desc": "覆寫從上游的伺服器收到的存活時間TTL數值最大值",
"min_exceeds_max_value": "最小值超過最大值",
"value_not_larger_than": "數值不能大於 {{maximum}}",
"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": "安全性",
"filter_category_regional": "區域性的",
@@ -561,7 +580,11 @@
"filter_category_security_desc": "專精於封鎖惡意軟體、網路釣魚或詐騙網域之清單",
"filter_category_regional_desc": "專注於區域性的廣告和追蹤伺服器之清單",
"filter_category_other_desc": "其它的封鎖清單",
"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

@@ -1,131 +1,408 @@
import { getIpMatchListStatus } from '../helpers/helpers';
import { IP_MATCH_LIST_STATUS } from '../helpers/constants';
import { sortIp, countClientsStatistics, findAddressType } from '../helpers/helpers';
import { ADDRESS_TYPES } 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);
describe('sortIp', () => {
describe('ipv4', () => {
test('one octet differ', () => {
const arr = [
'127.0.2.0',
'127.0.3.0',
'127.0.1.0',
];
const sortedArr = [
'127.0.1.0',
'127.0.2.0',
'127.0.3.0',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
test('few octets differ', () => {
const arr = [
'192.168.11.10',
'192.168.10.0',
'192.168.11.11',
'192.168.10.10',
'192.168.1.10',
'192.168.0.1',
'192.168.1.0',
'192.168.1.1',
'192.168.11.0',
'192.168.0.10',
'192.168.10.11',
'192.168.0.11',
'192.168.1.11',
'192.168.0.0',
'192.168.10.1',
'192.168.11.1',
];
const sortedArr = [
'192.168.0.0',
'192.168.0.1',
'192.168.0.10',
'192.168.0.11',
'192.168.1.0',
'192.168.1.1',
'192.168.1.10',
'192.168.1.11',
'192.168.10.0',
'192.168.10.1',
'192.168.10.10',
'192.168.10.11',
'192.168.11.0',
'192.168.11.1',
'192.168.11.10',
'192.168.11.11',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
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);
// Example from issue https://github.com/AdguardTeam/AdGuardHome/issues/1778#issuecomment-640937599
const arr2 = [
'192.168.2.11',
'192.168.3.1',
'192.168.2.100',
'192.168.2.2',
'192.168.2.1',
'192.168.2.10',
'192.168.2.99',
'192.168.2.200',
'192.168.2.199',
];
const sortedArr2 = [
'192.168.2.1',
'192.168.2.2',
'192.168.2.10',
'192.168.2.11',
'192.168.2.99',
'192.168.2.100',
'192.168.2.199',
'192.168.2.200',
'192.168.3.1',
];
expect(arr2.sort(sortIp)).toStrictEqual(sortedArr2);
});
});
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);
describe('ipv6', () => {
test('only long form', () => {
const arr = [
'2001:db8:11a3:9d7:0:0:0:2',
'2001:db8:11a3:9d7:0:0:0:3',
'2001:db8:11a3:9d7:0:0:0:1',
];
const sortedArr = [
'2001:db8:11a3:9d7:0:0:0:1',
'2001:db8:11a3:9d7:0:0:0:2',
'2001:db8:11a3:9d7:0:0:0:3',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
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('only short form', () => {
const arr = [
'2001:db8::',
'2001:db7::',
'2001:db9::',
];
const sortedArr = [
'2001:db7::',
'2001:db8::',
'2001:db9::',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
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);
test('long and short forms', () => {
const arr = [
'2001:db8::',
'2001:db7:11a3:9d7:0:0:0:2',
'2001:db6:11a3:9d7:0:0:0:1',
'2001:db6::',
'2001:db7:11a3:9d7:0:0:0:1',
'2001:db7::',
];
const sortedArr = [
'2001:db6::',
'2001:db6:11a3:9d7:0:0:0:1',
'2001:db7::',
'2001:db7:11a3:9d7:0:0:0:1',
'2001:db7:11a3:9d7:0:0:0:2',
'2001:db8::',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
});
describe('ipv4 and ipv6', () => {
test('ipv6 long form', () => {
const arr = [
'127.0.0.3',
'2001:db8:11a3:9d7:0:0:0:1',
'2001:db8:11a3:9d7:0:0:0:3',
'127.0.0.1',
'2001:db8:11a3:9d7:0:0:0:2',
'127.0.0.2',
];
const sortedArr = [
'127.0.0.1',
'127.0.0.2',
'127.0.0.3',
'2001:db8:11a3:9d7:0:0:0:1',
'2001:db8:11a3:9d7:0:0:0:2',
'2001:db8:11a3:9d7:0:0:0:3',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
test('ipv6 short form', () => {
const arr = [
'2001:db8:11a3:9d7::1',
'127.0.0.3',
'2001:db8:11a3:9d7::3',
'127.0.0.1',
'2001:db8:11a3:9d7::2',
'127.0.0.2',
];
const sortedArr = [
'127.0.0.1',
'127.0.0.2',
'127.0.0.3',
'2001:db8:11a3:9d7::1',
'2001:db8:11a3:9d7::2',
'2001:db8:11a3:9d7::3',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
test('ipv6 long and short forms', () => {
const arr = [
'2001:db8:11a3:9d7::1',
'127.0.0.3',
'2001:db8:11a3:9d7:0:0:0:2',
'127.0.0.1',
'2001:db8:11a3:9d7::3',
'127.0.0.2',
];
const sortedArr = [
'127.0.0.1',
'127.0.0.2',
'127.0.0.3',
'2001:db8:11a3:9d7::1',
'2001:db8:11a3:9d7:0:0:0:2',
'2001:db8:11a3:9d7::3',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
test('always put ipv4 before ipv6', () => {
const arr = [
'::1',
'0.0.0.2',
'127.0.0.1',
'::2',
'2001:db8:11a3:9d7:0:0:0:2',
'0.0.0.1',
'2001:db8:11a3:9d7::1',
];
const sortedArr = [
'0.0.0.1',
'0.0.0.2',
'127.0.0.1',
'::1',
'::2',
'2001:db8:11a3:9d7::1',
'2001:db8:11a3:9d7:0:0:0:2',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
});
describe('cidr', () => {
test('only ipv4 cidr', () => {
const arr = [
'192.168.0.1/9',
'192.168.0.1/7',
'192.168.0.1/8',
];
const sortedArr = [
'192.168.0.1/7',
'192.168.0.1/8',
'192.168.0.1/9',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
test('ipv4 and cidr ipv4', () => {
const arr = [
'192.168.0.1/9',
'192.168.0.1',
'192.168.0.1/32',
'192.168.0.1/7',
'192.168.0.1/8',
];
const sortedArr = [
'192.168.0.1/7',
'192.168.0.1/8',
'192.168.0.1/9',
'192.168.0.1/32',
'192.168.0.1',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
test('only ipv6 cidr', () => {
const arr = [
'2001:db8:11a3:9d7::1/32',
'2001:db8:11a3:9d7::1/64',
'2001:db8:11a3:9d7::1/128',
'2001:db8:11a3:9d7::1/24',
];
const sortedArr = [
'2001:db8:11a3:9d7::1/24',
'2001:db8:11a3:9d7::1/32',
'2001:db8:11a3:9d7::1/64',
'2001:db8:11a3:9d7::1/128',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
test('ipv6 and cidr ipv6', () => {
const arr = [
'2001:db8:11a3:9d7::1/32',
'2001:db8:11a3:9d7::1',
'2001:db8:11a3:9d7::1/64',
'2001:db8:11a3:9d7::1/128',
'2001:db8:11a3:9d7::1/24',
];
const sortedArr = [
'2001:db8:11a3:9d7::1/24',
'2001:db8:11a3:9d7::1/32',
'2001:db8:11a3:9d7::1/64',
'2001:db8:11a3:9d7::1/128',
'2001:db8:11a3:9d7::1',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
});
describe('invalid input', () => {
const originalWarn = console.warn;
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);
beforeEach(() => {
console.warn = jest.fn();
});
test('should return NOT_FOUND on empty list', () => {
const list = '';
expect(getIpMatchListStatus('127.0.0.1', list))
.toEqual(IP_MATCH_LIST_STATUS.NOT_FOUND);
afterEach(() => {
expect(console.warn).toHaveBeenCalled();
console.warn = originalWarn;
});
test('invalid strings', () => {
const arr = ['invalid ip', 'invalid cidr'];
expect(arr.sort(sortIp)).toStrictEqual(arr);
});
test('invalid ip', () => {
const arr = ['127.0.0.2.', '.127.0.0.1.', '.2001:db8:11a3:9d7:0:0:0:0'];
expect(arr.sort(sortIp)).toStrictEqual(arr);
});
test('invalid cidr', () => {
const arr = ['127.0.0.2/33', '2001:db8:11a3:9d7:0:0:0:0/129'];
expect(arr.sort(sortIp)).toStrictEqual(arr);
});
test('valid and invalid ip', () => {
const arr = ['127.0.0.4.', '127.0.0.1', '.127.0.0.3', '127.0.0.2'];
expect(arr.sort(sortIp)).toStrictEqual(arr);
});
});
describe('mixed', () => {
test('ipv4, ipv6 in short and long forms and cidr', () => {
const arr = [
'2001:db8:11a3:9d7:0:0:0:1/32',
'192.168.1.2',
'127.0.0.2',
'2001:db8:11a3:9d7::1/128',
'2001:db8:11a3:9d7:0:0:0:1',
'127.0.0.1/12',
'192.168.1.1',
'2001:db8::/32',
'2001:db8:11a3:9d7::1/24',
'192.168.1.2/12',
'2001:db7::/32',
'127.0.0.1',
'2001:db8:11a3:9d7:0:0:0:2',
'192.168.1.1/24',
'2001:db7::/64',
'2001:db7::',
'2001:db8::',
'2001:db8:11a3:9d7:0:0:0:1/128',
'192.168.1.1/12',
'127.0.0.1/32',
'::1',
];
const sortedArr = [
'127.0.0.1/12',
'127.0.0.1/32',
'127.0.0.1',
'127.0.0.2',
'192.168.1.1/12',
'192.168.1.1/24',
'192.168.1.1',
'192.168.1.2/12',
'192.168.1.2',
'::1',
'2001:db7::/32',
'2001:db7::/64',
'2001:db7::',
'2001:db8::/32',
'2001:db8::',
'2001:db8:11a3:9d7::1/24',
'2001:db8:11a3:9d7:0:0:0:1/32',
'2001:db8:11a3:9d7::1/128',
'2001:db8:11a3:9d7:0:0:0:1/128',
'2001:db8:11a3:9d7:0:0:0:1',
'2001:db8:11a3:9d7:0:0:0:2',
];
expect(arr.sort(sortIp)).toStrictEqual(sortedArr);
});
});
});
describe('findAddressType', () => {
describe('ip', () => {
expect(findAddressType('127.0.0.1')).toStrictEqual(ADDRESS_TYPES.IP);
});
describe('cidr', () => {
expect(findAddressType('127.0.0.1/8')).toStrictEqual(ADDRESS_TYPES.CIDR);
});
describe('mac', () => {
expect(findAddressType('00:1B:44:11:3A:B7')).toStrictEqual(ADDRESS_TYPES.UNKNOWN);
});
});
describe('countClientsStatistics', () => {
test('single ip', () => {
expect(countClientsStatistics(['127.0.0.1'], {
'127.0.0.1': 1,
})).toStrictEqual(1);
});
test('multiple ip', () => {
expect(countClientsStatistics(['127.0.0.1', '127.0.0.2'], {
'127.0.0.1': 1,
'127.0.0.2': 2,
})).toStrictEqual(1 + 2);
});
test('cidr', () => {
expect(countClientsStatistics(['127.0.0.0/8'], {
'127.0.0.1': 1,
'127.0.0.2': 2,
})).toStrictEqual(1 + 2);
});
test('cidr and multiple ip', () => {
expect(countClientsStatistics(['1.1.1.1', '2.2.2.2', '3.3.3.0/24'], {
'1.1.1.1': 1,
'2.2.2.2': 2,
'3.3.3.3': 3,
})).toStrictEqual(1 + 2 + 3);
});
test('mac', () => {
expect(countClientsStatistics(['00:1B:44:11:3A:B7', '2.2.2.2', '3.3.3.0/24'], {
'1.1.1.1': 1,
'2.2.2.2': 2,
'3.3.3.3': 3,
})).toStrictEqual(2 + 3);
});
test('not found', () => {
expect(countClientsStatistics(['4.4.4.4', '5.5.5.5', '6.6.6.6'], {
'1.1.1.1': 1,
'2.2.2.2': 2,
'3.3.3.3': 3,
})).toStrictEqual(0);
});
});

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

@@ -34,6 +34,7 @@ export const setTlsConfig = (config) => async (dispatch, getState) => {
values.private_key = btoa(values.private_key);
values.port_https = values.port_https || 0;
values.port_dns_over_tls = values.port_dns_over_tls || 0;
values.port_dns_over_quic = values.port_dns_over_quic || 0;
const response = await apiClient.setTlsConfig(values);
response.certificate_chain = atob(response.certificate_chain);
@@ -59,6 +60,7 @@ export const validateTlsConfig = (config) => async (dispatch) => {
values.private_key = btoa(values.private_key);
values.port_https = values.port_https || 0;
values.port_dns_over_tls = values.port_dns_over_tls || 0;
values.port_dns_over_quic = values.port_dns_over_quic || 0;
const response = await apiClient.validateTlsConfig(values);
response.certificate_chain = atob(response.certificate_chain);

View File

@@ -2,12 +2,24 @@ import { createAction } from 'redux-actions';
import i18next from 'i18next';
import axios from 'axios';
import { splitByNewLine, sortClients } from '../helpers/helpers';
import { CHECK_TIMEOUT, SETTINGS_NAMES } from '../helpers/constants';
import endsWith from 'lodash/endsWith';
import escapeRegExp from 'lodash/escapeRegExp';
import React from 'react';
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,
} from '../helpers/constants';
import { areEqualVersions } from '../helpers/version';
import { getTlsStatus } from './encryption';
import apiClient from '../api/Api';
import { addErrorToast, addNoticeToast, addSuccessToast } from './toasts';
import { getFilteringStatus, setRules } from './filtering';
export const toggleSettingStatus = createAction('SETTING_STATUS_TOGGLE');
export const showSettingsFailure = createAction('SETTINGS_FAILURE_SHOW');
@@ -148,7 +160,7 @@ const checkStatus = async (handleRequestSuccess, handleRequestError, attempts =
const rmTimeout = (t) => t && clearTimeout(t);
try {
const response = await axios.get('control/status');
const response = await axios.get(`${apiClient.baseUrl}/status`);
rmTimeout(timeout);
if (response?.status === 200) {
handleRequestSuccess(response);
@@ -179,7 +191,14 @@ export const getUpdate = () => async (dispatch, getState) => {
dispatch(getUpdateRequest());
const handleRequestError = () => {
dispatch(addNoticeToast({ error: 'update_failed' }));
const options = {
components: {
a: <a href={GETTING_STARTED_LINK} target="_blank"
rel="noopener noreferrer" />,
},
};
dispatch(addNoticeToast({ error: 'update_failed', options }));
dispatch(getUpdateFailure());
};
@@ -276,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];
@@ -304,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');
@@ -341,8 +373,14 @@ export const getDhcpStatusFailure = createAction('GET_DHCP_STATUS_FAILURE');
export const getDhcpStatus = () => async (dispatch) => {
dispatch(getDhcpStatusRequest());
try {
const status = await apiClient.getDhcpStatus();
dispatch(getDhcpStatusSuccess(status));
const globalStatus = await apiClient.getGlobalStatus();
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());
@@ -368,11 +406,69 @@ export const findActiveDhcpRequest = createAction('FIND_ACTIVE_DHCP_REQUEST');
export const findActiveDhcpSuccess = createAction('FIND_ACTIVE_DHCP_SUCCESS');
export const findActiveDhcpFailure = createAction('FIND_ACTIVE_DHCP_FAILURE');
export const findActiveDhcp = (name) => async (dispatch) => {
export const findActiveDhcp = (name) => async (dispatch, getState) => {
dispatch(findActiveDhcpRequest());
try {
const activeDhcp = await apiClient.findActiveDhcp(name);
dispatch(findActiveDhcpSuccess(activeDhcp));
const { check, interface_name, interfaces } = getState().dhcp;
const selectedInterface = getState().form[FORM_NAME.DHCP_INTERFACES].values.interface_name;
const v4 = check?.v4 ?? { static_ip: {}, other_server: {} };
const v6 = check?.v6 ?? { other_server: {} };
let isError = false;
let isStaticIPError = false;
const hasV4Interface = !!interfaces[selectedInterface]?.ipv4_addresses;
const hasV6Interface = !!interfaces[selectedInterface]?.ipv6_addresses;
if (hasV4Interface && v4.other_server.found === STATUS_RESPONSE.ERROR) {
isError = true;
if (v4.other_server.error) {
dispatch(addErrorToast({ error: v4.other_server.error }));
}
}
if (hasV6Interface && v6.other_server.found === STATUS_RESPONSE.ERROR) {
isError = true;
if (v6.other_server.error) {
dispatch(addErrorToast({ error: v6.other_server.error }));
}
}
if (hasV4Interface && v4.static_ip.static === STATUS_RESPONSE.ERROR) {
isStaticIPError = true;
dispatch(addErrorToast({ error: 'dhcp_static_ip_error' }));
}
if (isError) {
dispatch(addErrorToast({ error: 'dhcp_error' }));
}
if (isStaticIPError || isError) {
// No need to proceed if there was an error discovering DHCP server
return;
}
if ((hasV4Interface && v4.other_server.found === STATUS_RESPONSE.YES)
|| (hasV6Interface && v6.other_server.found === STATUS_RESPONSE.YES)) {
dispatch(addErrorToast({ error: 'dhcp_found' }));
} else if (hasV4Interface && v4.static_ip.static === STATUS_RESPONSE.NO
&& v4.static_ip.ip
&& interface_name) {
const warning = i18next.t('dhcp_dynamic_ip_found', {
interfaceName: interface_name,
ipAddress: v4.static_ip.ip,
interpolation: {
prefix: '<0>{{',
suffix: '}}</0>',
},
});
dispatch(addErrorToast({ error: warning }));
} else {
dispatch(addSuccessToast('dhcp_not_found'));
}
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(findActiveDhcpFailure());
@@ -383,14 +479,11 @@ export const setDhcpConfigRequest = createAction('SET_DHCP_CONFIG_REQUEST');
export const setDhcpConfigSuccess = createAction('SET_DHCP_CONFIG_SUCCESS');
export const setDhcpConfigFailure = createAction('SET_DHCP_CONFIG_FAILURE');
export const setDhcpConfig = (values) => async (dispatch, getState) => {
const { config } = getState().dhcp;
const updatedConfig = { ...config, ...values };
export const setDhcpConfig = (values) => async (dispatch) => {
dispatch(setDhcpConfigRequest());
dispatch(findActiveDhcp(values.interface_name));
try {
await apiClient.setDhcpConfig(updatedConfig);
dispatch(setDhcpConfigSuccess(updatedConfig));
await apiClient.setDhcpConfig(values);
dispatch(setDhcpConfigSuccess(values));
dispatch(addSuccessToast('dhcp_config_saved'));
} catch (error) {
dispatch(addErrorToast({ error }));
@@ -416,7 +509,6 @@ export const toggleDhcp = (values) => async (dispatch) => {
enabled: true,
};
successMessage = 'enabled_dhcp';
dispatch(findActiveDhcp(values.interface_name));
}
try {
@@ -483,3 +575,44 @@ export const removeStaticLease = (config) => async (dispatch) => {
};
export const removeToast = createAction('REMOVE_TOAST');
export const toggleBlocking = (
type, domain, baseRule, baseUnblocking,
) => async (dispatch, getState) => {
const baseBlockingRule = baseRule || `||${domain}^$important`;
const baseUnblockingRule = baseUnblocking || `@@${baseBlockingRule}`;
const { userRules } = getState().filtering;
const lineEnding = !endsWith(userRules, '\n') ? '\n' : '';
const blockingRule = type === BLOCK_ACTIONS.BLOCK ? baseUnblockingRule : baseBlockingRule;
const unblockingRule = type === BLOCK_ACTIONS.BLOCK ? baseBlockingRule : baseUnblockingRule;
const preparedBlockingRule = new RegExp(`(^|\n)${escapeRegExp(blockingRule)}($|\n)`);
const preparedUnblockingRule = new RegExp(`(^|\n)${escapeRegExp(unblockingRule)}($|\n)`);
const matchPreparedBlockingRule = userRules.match(preparedBlockingRule);
const matchPreparedUnblockingRule = userRules.match(preparedUnblockingRule);
if (matchPreparedBlockingRule) {
await dispatch(setRules(userRules.replace(`${blockingRule}`, '')));
dispatch(addSuccessToast(i18next.t('rule_removed_from_custom_filtering_toast', { rule: blockingRule })));
} else if (!matchPreparedUnblockingRule) {
await dispatch(setRules(`${userRules}${lineEnding}${unblockingRule}\n`));
dispatch(addSuccessToast(i18next.t('rule_added_to_custom_filtering_toast', { rule: unblockingRule })));
} else if (matchPreparedUnblockingRule) {
dispatch(addSuccessToast(i18next.t('rule_added_to_custom_filtering_toast', { rule: unblockingRule })));
return;
} else if (!matchPreparedBlockingRule) {
dispatch(addSuccessToast(i18next.t('rule_removed_from_custom_filtering_toast', { rule: blockingRule })));
return;
}
dispatch(getFilteringStatus());
};
export const toggleBlockingForClient = (type, domain, client) => {
const baseRule = `||${domain}^$client='${client.replace(/'/g, '/\'')}'`;
const baseUnblocking = `@@${baseRule}`;
return toggleBlocking(type, domain, baseRule, baseUnblocking);
};

View File

@@ -2,6 +2,7 @@ import { createAction } from 'redux-actions';
import apiClient from '../api/Api';
import { addErrorToast } from './toasts';
import { HTML_PAGES } from '../helpers/constants';
export const processLoginRequest = createAction('PROCESS_LOGIN_REQUEST');
export const processLoginFailure = createAction('PROCESS_LOGIN_FAILURE');
@@ -11,7 +12,8 @@ export const processLogin = (values) => async (dispatch) => {
dispatch(processLoginRequest());
try {
await apiClient.login(values);
const dashboardUrl = window.location.origin + window.location.pathname.replace('/login.html', '/');
const dashboardUrl = window.location.origin
+ window.location.pathname.replace(HTML_PAGES.LOGIN, HTML_PAGES.MAIN);
window.location.replace(dashboardUrl);
dispatch(processLoginSuccess());
} catch (error) {

View File

@@ -3,12 +3,21 @@ import { createAction } from 'redux-actions';
import apiClient from '../api/Api';
import { normalizeLogs, getParamsForClientsSearch, addClientInfo } from '../helpers/helpers';
import {
DEFAULT_LOGS_FILTER,
TABLE_DEFAULT_PAGE_SIZE,
TABLE_FIRST_PAGE,
DEFAULT_LOGS_FILTER, FORM_NAME, QUERY_LOGS_PAGE_LIMIT,
} 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({
@@ -16,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,
@@ -37,15 +41,22 @@ export const getAdditionalLogsRequest = createAction('GET_ADDITIONAL_LOGS_REQUES
export const getAdditionalLogsFailure = createAction('GET_ADDITIONAL_LOGS_FAILURE');
export const getAdditionalLogsSuccess = createAction('GET_ADDITIONAL_LOGS_SUCCESS');
const checkFilteredLogs = async (data, filter, dispatch, total) => {
const shortPollQueryLogs = async (data, filter, dispatch, getState, total) => {
const { logs, oldest } = data;
const totalData = total || { logs };
const needToGetAdditionalLogs = (logs.length < TABLE_DEFAULT_PAGE_SIZE
|| totalData.logs.length < TABLE_DEFAULT_PAGE_SIZE)
&& oldest !== '';
const queryForm = getState().form[FORM_NAME.LOGS_FILTER];
const currentQuery = queryForm && queryForm.values.search;
const previousQuery = filter?.search;
const isQueryTheSame = typeof previousQuery === 'string'
&& typeof currentQuery === 'string'
&& previousQuery === currentQuery;
if (needToGetAdditionalLogs) {
const isShortPollingNeeded = (logs.length < QUERY_LOGS_PAGE_LIMIT
|| totalData.logs.length < QUERY_LOGS_PAGE_LIMIT)
&& oldest !== '' && isQueryTheSame;
if (isShortPollingNeeded) {
dispatch(getAdditionalLogsRequest());
try {
@@ -54,7 +65,7 @@ const checkFilteredLogs = async (data, filter, dispatch, total) => {
filter,
});
if (additionalLogs.oldest.length > 0) {
return await checkFilteredLogs(additionalLogs, filter, dispatch, {
return await shortPollQueryLogs(additionalLogs, filter, dispatch, getState, {
logs: [...totalData.logs, ...additionalLogs.logs],
oldest: additionalLogs.oldest,
});
@@ -71,31 +82,42 @@ const checkFilteredLogs = async (data, filter, dispatch, total) => {
return totalData;
};
export const setLogsPagination = createAction('LOGS_PAGINATION');
export const setLogsPage = createAction('SET_LOG_PAGE');
export const toggleDetailedLogs = createAction('TOGGLE_DETAILED_LOGS');
export const getLogsRequest = createAction('GET_LOGS_REQUEST');
export const getLogsFailure = createAction('GET_LOGS_FAILURE');
export const getLogsSuccess = createAction('GET_LOGS_SUCCESS');
export const getLogs = (config) => async (dispatch, getState) => {
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 {
const { isFiltered, filter, page } = getState().queryLogs;
const { isFiltered, filter, oldest } = getState().queryLogs;
const data = await getLogsWithParams({
...config,
older_than: oldest,
filter,
});
if (isFiltered) {
const additionalData = await checkFilteredLogs(data, filter, dispatch);
const additionalData = await shortPollQueryLogs(data, filter, dispatch, getState);
const updatedData = additionalData.logs ? { ...data, ...additionalData } : data;
dispatch(getLogsSuccess(updatedData));
dispatch(setLogsPagination({
page,
pageSize: TABLE_DEFAULT_PAGE_SIZE,
}));
} else {
dispatch(getLogsSuccess(data));
}
@@ -111,7 +133,7 @@ export const setLogsFilterRequest = createAction('SET_LOGS_FILTER_REQUEST');
*
* @param filter
* @param {string} filter.search
* @param {string} filter.response_status query field of RESPONSE_FILTER object
* @param {string} filter.response_status 'QUERY' field of RESPONSE_FILTER object
* @returns function
*/
export const setLogsFilter = (filter) => setLogsFilterRequest(filter);
@@ -120,21 +142,20 @@ export const setFilteredLogsRequest = createAction('SET_FILTERED_LOGS_REQUEST');
export const setFilteredLogsFailure = createAction('SET_FILTERED_LOGS_FAILURE');
export const setFilteredLogsSuccess = createAction('SET_FILTERED_LOGS_SUCCESS');
export const setFilteredLogs = (filter) => async (dispatch) => {
export const setFilteredLogs = (filter) => async (dispatch, getState) => {
dispatch(setFilteredLogsRequest());
try {
const data = await getLogsWithParams({
older_than: '',
filter,
});
const additionalData = await checkFilteredLogs(data, filter, dispatch);
const additionalData = await shortPollQueryLogs(data, filter, dispatch, getState);
const updatedData = additionalData.logs ? { ...data, ...additionalData } : data;
dispatch(setFilteredLogsSuccess({
...updatedData,
filter,
}));
dispatch(setLogsPage(TABLE_FIRST_PAGE));
} catch (error) {
dispatch(addErrorToast({ error }));
dispatch(setFilteredLogsFailure(error));

View File

@@ -1,37 +1,44 @@
import axios from 'axios';
import { getPathWithQueryString } from '../helpers/helpers';
import { R_PATH_LAST_PART } from '../helpers/constants';
import { QUERY_LOGS_PAGE_LIMIT, HTML_PAGES, R_PATH_LAST_PART } from '../helpers/constants';
import { BASE_URL } from '../../constants';
class Api {
baseUrl = 'control';
baseUrl = BASE_URL;
async makeRequest(path, method = 'POST', config) {
const url = `${this.baseUrl}/${path}`;
try {
const response = await axios({
url: `${this.baseUrl}/${path}`,
url,
method,
...config,
});
return response.data;
} catch (error) {
console.error(error);
const errorPath = `${this.baseUrl}/${path}`;
const errorPath = url;
if (error.response) {
if (error.response.status === 403) {
const loginPageUrl = window.location.href.replace(R_PATH_LAST_PART, '/login.html');
const { pathname } = document.location;
const shouldRedirect = pathname !== HTML_PAGES.LOGIN
&& pathname !== HTML_PAGES.INSTALL;
if (error.response.status === 403 && shouldRedirect) {
const loginPageUrl = window.location.href
.replace(R_PATH_LAST_PART, HTML_PAGES.LOGIN);
window.location.replace(loginPageUrl);
return false;
}
throw new Error(`${errorPath} | ${error.response.data} | ${error.response.status}`);
}
throw new Error(`${errorPath} | ${error.message ? error.message : error}`);
throw new Error(`${errorPath} | ${error.message || error}`);
}
}
// Global methods
GLOBAL_STATUS = { path: 'status', method: 'GET' };
GLOBAL_STATUS = { path: 'status', method: 'GET' }
GLOBAL_TEST_UPSTREAM_DNS = { path: 'test_upstream_dns', method: 'POST' };
@@ -529,6 +536,8 @@ class Api {
getQueryLog(params) {
const { path, method } = this.GET_QUERY_LOG;
// eslint-disable-next-line no-param-reassign
params.limit = QUERY_LOGS_PAGE_LIMIT;
const url = getPathWithQueryString(path, params);
return this.makeRequest(url, method);
}

View File

@@ -42,13 +42,6 @@ body {
background: linear-gradient(45deg, rgba(99, 125, 120, 1) 0%, rgba(88, 177, 101, 1) 100%);
}
@media (max-width: 575px) {
.container {
padding-right: 0;
padding-left: 0;
}
}
.modal-body--medium {
max-height: 20rem;
overflow-y: scroll;
@@ -65,3 +58,16 @@ body {
.mw-75 {
max-width: 75% !important;
}
.cursor--not-allowed {
cursor: not-allowed;
}
.button-action {
visibility: hidden;
}
.logs__row:hover .button-action,
.button-action--active {
visibility: visible;
}

View File

@@ -1,30 +1,16 @@
import React, { Component, Fragment } from 'react';
import React, { useEffect } from 'react';
import { HashRouter, Route } from 'react-router-dom';
import PropTypes from 'prop-types';
import { withTranslation } from 'react-i18next';
import LoadingBar from 'react-redux-loading-bar';
import { hot } from 'react-hot-loader/root';
import 'react-table/react-table.css';
import '../ui/Tabler.css';
import '../ui/ReactTable.css';
import './index.css';
import Header from '../../containers/Header';
import Dashboard from '../../containers/Dashboard';
import Settings from '../../containers/Settings';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import CustomRules from '../../containers/CustomRules';
import DnsBlocklist from '../../containers/DnsBlocklist';
import DnsAllowlist from '../../containers/DnsAllowlist';
import DnsRewrites from '../../containers/DnsRewrites';
import Dns from '../../containers/Dns';
import Encryption from '../../containers/Encryption';
import Dhcp from '../../containers/Dhcp';
import Clients from '../../containers/Clients';
import Logs from '../../containers/Logs';
import SetupGuide from '../../containers/SetupGuide';
import propTypes from 'prop-types';
import Toasts from '../Toasts';
import Footer from '../ui/Footer';
import Status from '../ui/Status';
@@ -35,31 +21,108 @@ import Icons from '../ui/Icons';
import i18n from '../../i18n';
import Loading from '../ui/Loading';
import { FILTERS_URLS, MENU_URLS, SETTINGS_URLS } from '../../helpers/constants';
import Services from '../Filters/Services';
import { getLogsUrlParams, setHtmlLangAttr } from '../../helpers/helpers';
import Header from '../Header';
import { changeLanguage, getDnsStatus } from '../../actions';
class App extends Component {
componentDidMount() {
this.props.getDnsStatus();
}
import Dashboard from '../../containers/Dashboard';
import SetupGuide from '../../containers/SetupGuide';
import Settings from '../../containers/Settings';
import Dns from '../../containers/Dns';
import Encryption from '../../containers/Encryption';
import Dhcp from '../Settings/Dhcp';
import Clients from '../../containers/Clients';
import DnsBlocklist from '../../containers/DnsBlocklist';
import DnsAllowlist from '../../containers/DnsAllowlist';
import DnsRewrites from '../../containers/DnsRewrites';
import CustomRules from '../../containers/CustomRules';
import Services from '../Filters/Services';
import Logs from '../Logs';
componentDidUpdate(prevProps) {
if (this.props.dashboard.language !== prevProps.dashboard.language) {
this.setLanguage();
}
}
reloadPage = () => {
window.location.reload();
};
const ROUTES = [
{
path: MENU_URLS.root,
component: Dashboard,
exact: true,
},
{
path: [`${MENU_URLS.logs}${getLogsUrlParams(':search?', ':response_status?')}`, MENU_URLS.logs],
component: Logs,
},
{
path: MENU_URLS.guide,
component: SetupGuide,
},
{
path: SETTINGS_URLS.settings,
component: Settings,
},
{
path: SETTINGS_URLS.dns,
component: Dns,
},
{
path: SETTINGS_URLS.encryption,
component: Encryption,
},
{
path: SETTINGS_URLS.dhcp,
component: Dhcp,
},
{
path: SETTINGS_URLS.clients,
component: Clients,
},
{
path: FILTERS_URLS.dns_blocklists,
component: DnsBlocklist,
},
{
path: FILTERS_URLS.dns_allowlists,
component: DnsAllowlist,
},
{
path: FILTERS_URLS.dns_rewrites,
component: DnsRewrites,
},
{
path: FILTERS_URLS.custom_rules,
component: CustomRules,
},
{
path: FILTERS_URLS.blocked_services,
component: Services,
},
];
handleUpdate = () => {
this.props.getUpdate();
};
const renderRoute = ({ path, component, exact }, idx) => <Route
key={idx}
exact={exact}
path={path}
component={component}
/>;
setLanguage = () => {
const { processing, language } = this.props.dashboard;
const App = () => {
const dispatch = useDispatch();
const {
language,
isCoreRunning,
isUpdateAvailable,
processing,
} = useSelector((state) => state.dashboard, shallowEqual);
const { processing: processingEncryption } = useSelector((
state,
) => state.encryption, shallowEqual);
const updateAvailable = isCoreRunning && isUpdateAvailable;
useEffect(() => {
dispatch(getDnsStatus());
}, []);
const setLanguage = () => {
if (!processing) {
if (language) {
i18n.changeLanguage(language);
@@ -68,93 +131,46 @@ class App extends Component {
}
i18n.on('languageChanged', (lang) => {
this.props.changeLanguage(lang);
dispatch(changeLanguage(lang));
});
};
render() {
const { dashboard, encryption, getVersion } = this.props;
const updateAvailable = dashboard.isCoreRunning && dashboard.isUpdateAvailable;
useEffect(() => {
setLanguage();
}, [language]);
return (
<HashRouter hashType="noslash">
<Fragment>
{updateAvailable && (
<Fragment>
<UpdateTopline
url={dashboard.announcementUrl}
version={dashboard.newVersion}
canAutoUpdate={dashboard.canAutoUpdate}
getUpdate={this.handleUpdate}
processingUpdate={dashboard.processingUpdate}
/>
<UpdateOverlay processingUpdate={dashboard.processingUpdate} />
</Fragment>
)}
{!encryption.processing && (
<EncryptionTopline notAfter={encryption.not_after} />
)}
<LoadingBar className="loading-bar" updateTime={1000} />
<Route component={Header} />
<div className="container container--wrap pb-5">
{dashboard.processing && <Loading />}
{!dashboard.isCoreRunning && (
<div className="row row-cards">
<div className="col-lg-12">
<Status reloadPage={this.reloadPage}
message="dns_start"
/>
<Loading />
</div>
</div>
)}
{!dashboard.processing && dashboard.isCoreRunning && (
<>
<Route path={MENU_URLS.root} exact component={Dashboard} />
<Route
path={[`${MENU_URLS.logs}${getLogsUrlParams(':search?', ':response_status?')}`, MENU_URLS.logs]}
component={Logs} />
<Route path={MENU_URLS.guide} component={SetupGuide} />
<Route path={SETTINGS_URLS.settings} component={Settings} />
<Route path={SETTINGS_URLS.dns} component={Dns} />
<Route path={SETTINGS_URLS.encryption} component={Encryption} />
<Route path={SETTINGS_URLS.dhcp} component={Dhcp} />
<Route path={SETTINGS_URLS.clients} component={Clients} />
<Route path={FILTERS_URLS.dns_blocklists}
component={DnsBlocklist} />
<Route path={FILTERS_URLS.dns_allowlists}
component={DnsAllowlist} />
<Route path={FILTERS_URLS.dns_rewrites} component={DnsRewrites} />
<Route path={FILTERS_URLS.custom_rules} component={CustomRules} />
<Route path={FILTERS_URLS.blocked_services} component={Services} />
</>
)}
</div>
<Footer
dnsVersion={dashboard.dnsVersion}
dnsPort={dashboard.dnsPort}
processingVersion={dashboard.processingVersion}
getVersion={getVersion}
checkUpdateFlag={dashboard.checkUpdateFlag}
/>
<Toasts />
<Icons />
</Fragment>
</HashRouter>
);
}
}
const reloadPage = () => {
window.location.reload();
};
App.propTypes = {
getDnsStatus: PropTypes.func,
getUpdate: PropTypes.func,
enableDns: PropTypes.func,
dashboard: PropTypes.object,
isCoreRunning: PropTypes.bool,
error: PropTypes.string,
changeLanguage: PropTypes.func,
encryption: PropTypes.object,
getVersion: PropTypes.func,
return <HashRouter hashType="noslash">
{updateAvailable && <>
<UpdateTopline />
<UpdateOverlay />
</>}
{!processingEncryption && <EncryptionTopline />}
<LoadingBar className="loading-bar" updateTime={1000} />
<Header />
<div className="container container--wrap pb-5">
{processing && <Loading />}
{!isCoreRunning && <div className="row row-cards">
<div className="col-lg-12">
<Status reloadPage={reloadPage} message="dns_start" />
<Loading />
</div>
</div>}
{!processing && isCoreRunning && ROUTES.map(renderRoute)}
</div>
<Footer />
<Toasts />
<Icons />
</HashRouter>;
};
export default withTranslation()(App);
renderRoute.propTypes = {
path: propTypes.oneOfType([propTypes.string, propTypes.arrayOf(propTypes.string)]).isRequired,
component: propTypes.element.isRequired,
exact: propTypes.bool,
};
export default hot(App);

View File

@@ -1,14 +1,18 @@
import React from 'react';
import ReactTable from 'react-table';
import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next';
import { Trans, useTranslation } from 'react-i18next';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import classNames from 'classnames';
import Card from '../ui/Card';
import Cell from '../ui/Cell';
import { getPercent, getIpMatchListStatus } from '../../helpers/helpers';
import { IP_MATCH_LIST_STATUS, STATUS_COLORS } from '../../helpers/constants';
import { formatClientCell } from '../../helpers/formatClientCell';
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) {
@@ -20,126 +24,123 @@ const getClientsPercentColor = (percent) => {
return STATUS_COLORS.red;
};
const countCell = (dnsQueries) => function cell(row) {
const { value } = row;
const percent = getPercent(dnsQueries, value);
const CountCell = (row) => {
const { value, original: { ip } } = row;
const numDnsQueries = useSelector((state) => state.stats.numDnsQueries, shallowEqual);
const percent = getPercent(numDnsQueries, value);
const percentColor = getClientsPercentColor(percent);
return <Cell value={value} percent={percent} color={percentColor} search={row.original.ip} />;
return <Cell value={value} percent={percent} color={percentColor} search={ip} />;
};
const renderBlockingButton = (ipMatchListStatus, ip, handleClick, processing) => {
const buttonProps = ipMatchListStatus === IP_MATCH_LIST_STATUS.NOT_FOUND
? {
className: 'btn-outline-danger',
text: 'block',
type: 'block',
const renderBlockingButton = (ip, disallowed, disallowed_rule) => {
const dispatch = useDispatch();
const { t } = useTranslation();
const processingSet = useSelector((state) => state.access.processingSet);
const buttonClass = classNames('button-action button-action--main', {
'button-action--unblock': disallowed,
});
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)) {
await dispatch(toggleClientBlock(ip, disallowed, disallowed_rule));
await dispatch(getStats());
}
: {
className: 'btn-outline-secondary',
text: 'unblock',
type: 'unblock',
};
};
return (
<div className="table__action button__action">
<button
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={`btn btn-sm ${buttonProps.className}`}
onClick={() => handleClick(buttonProps.type, ip)}
disabled={processing}
>
<Trans>{buttonProps.text}</Trans>
</button>
</div>
);
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 = (t, toggleClientStatus, processing, disallowedClients) => function cell(row) {
const { value } = row;
const ipMatchListStatus = getIpMatchListStatus(value, disallowedClients);
const ClientCell = (row) => {
const { value, original: { info, info: { disallowed, disallowed_rule } } } = row;
return (
<>
<div className="logs__row logs__row--overflow logs__row--column">
{formatClientCell(row, true, false)}
</div>
{ipMatchListStatus !== IP_MATCH_LIST_STATUS.CIDR
&& renderBlockingButton(ipMatchListStatus, value, toggleClientStatus, processing)}
</>
);
return <>
<div className="logs__row logs__row--overflow logs__row--column d-flex align-items-center">
{renderFormattedClientCell(value, info, true)}
{renderBlockingButton(value, disallowed, disallowed_rule)}
</div>
</>;
};
const Clients = ({
t,
refreshButton,
topClients,
subtitle,
dnsQueries,
toggleClientStatus,
processingAccessSet,
disallowedClients,
}) => (
<Card
title={t('top_clients')}
subtitle={subtitle}
bodyType="card-table"
refresh={refreshButton}
}) => {
const { t } = useTranslation();
const topClients = useSelector((state) => state.stats.topClients, shallowEqual);
return <Card
title={t('top_clients')}
subtitle={subtitle}
bodyType="card-table"
refresh={refreshButton}
>
<ReactTable
data={topClients.map(({
name: ip, count, info, blocked,
}) => ({
ip,
count,
info,
blocked,
}))}
columns={[
{
Header: 'IP',
accessor: 'ip',
sortMethod: (a, b) => parseInt(a.replace(/\./g, ''), 10) - parseInt(b.replace(/\./g, ''), 10),
Cell: clientCell(t, toggleClientStatus, processingAccessSet, disallowedClients),
},
{
Header: <Trans>requests_count</Trans>,
accessor: 'count',
minWidth: 180,
maxWidth: 200,
Cell: countCell(dnsQueries),
},
]}
showPagination={false}
noDataText={t('no_clients_found')}
minRows={6}
defaultPageSize={100}
className="-highlight card-table-overflow--limited clients__table"
getTrProps={(_state, rowInfo) => {
if (!rowInfo) {
return {};
}
data={topClients.map(({
name: ip, count, info, blocked,
}) => ({
ip,
count,
info,
blocked,
}))}
columns={[
{
Header: 'IP',
accessor: 'ip',
sortMethod: sortIp,
Cell: ClientCell,
},
{
Header: <Trans>requests_count</Trans>,
accessor: 'count',
minWidth: 180,
maxWidth: 200,
Cell: CountCell,
},
]}
showPagination={false}
noDataText={t('no_clients_found')}
minRows={6}
defaultPageSize={100}
className="-highlight card-table-overflow--limited clients__table"
getTrProps={(_state, rowInfo) => {
if (!rowInfo) {
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>
);
Clients.propTypes = {
topClients: PropTypes.array.isRequired,
dnsQueries: PropTypes.number.isRequired,
refreshButton: PropTypes.node.isRequired,
clients: PropTypes.array.isRequired,
autoClients: PropTypes.array.isRequired,
subtitle: PropTypes.string.isRequired,
t: PropTypes.func.isRequired,
toggleClientStatus: PropTypes.func.isRequired,
processingAccessSet: PropTypes.bool.isRequired,
disallowedClients: PropTypes.string.isRequired,
</Card>;
};
export default withTranslation()(Clients);
Clients.propTypes = {
refreshButton: PropTypes.node.isRequired,
subtitle: PropTypes.string.isRequired,
};
export default Clients;

View File

@@ -47,32 +47,32 @@ const Counters = ({ refreshButton, subtitle }) => {
label: 'dns_query',
count: numDnsQueries,
tooltipTitle: interval === 1 ? 'number_of_dns_query_24_hours' : t('number_of_dns_query_days', { count: interval }),
response_status: RESPONSE_FILTER.ALL.query,
response_status: RESPONSE_FILTER.ALL.QUERY,
},
{
label: 'blocked_by',
count: numBlockedFiltering,
tooltipTitle: 'number_of_dns_query_blocked_24_hours',
response_status: RESPONSE_FILTER.BLOCKED.query,
response_status: RESPONSE_FILTER.BLOCKED.QUERY,
translationComponents: [<a href="#filters" key="0">link</a>],
},
{
label: 'stats_malware_phishing',
count: numReplacedSafebrowsing,
tooltipTitle: 'number_of_dns_query_blocked_24_hours_by_sec',
response_status: RESPONSE_FILTER.BLOCKED_THREATS.query,
response_status: RESPONSE_FILTER.BLOCKED_THREATS.QUERY,
},
{
label: 'stats_adult',
count: numReplacedParental,
tooltipTitle: 'number_of_dns_query_blocked_24_hours_adult',
response_status: RESPONSE_FILTER.BLOCKED_ADULT_WEBSITES.query,
response_status: RESPONSE_FILTER.BLOCKED_ADULT_WEBSITES.QUERY,
},
{
label: 'enforced_save_search',
count: numReplacedSafesearch,
tooltipTitle: 'number_of_dns_query_to_safe_search',
response_status: RESPONSE_FILTER.SAFE_SEARCH.query,
response_status: RESPONSE_FILTER.SAFE_SEARCH.QUERY,
},
{
label: 'average_processing_time',

View File

@@ -22,7 +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, { Component, Fragment } from 'react';
import React, { useEffect } from 'react';
import PropTypes from 'prop-types';
import { Trans, withTranslation } from 'react-i18next';
import { Trans, useTranslation } from 'react-i18next';
import classNames from 'classnames';
import Statistics from './Statistics';
import Counters from './Counters';
import Clients from './Clients';
@@ -10,147 +10,128 @@ import BlockedDomains from './BlockedDomains';
import PageTitle from '../ui/PageTitle';
import Loading from '../ui/Loading';
import { BLOCK_ACTIONS } from '../../helpers/constants';
import './Dashboard.css';
class Dashboard extends Component {
componentDidMount() {
this.getAllStats();
}
const Dashboard = ({
getAccessList,
getStats,
getStatsConfig,
dashboard,
dashboard: { protectionEnabled, processingProtection },
toggleProtection,
stats,
access,
}) => {
const { t } = useTranslation();
getAllStats = () => {
this.props.getAccessList();
this.props.getStats();
this.props.getStatsConfig();
const getAllStats = () => {
getAccessList();
getStats();
getStatsConfig();
};
getToggleFilteringButton = () => {
const { protectionEnabled, processingProtection } = this.props.dashboard;
const buttonText = protectionEnabled ? 'disable_protection' : 'enable_protection';
const buttonClass = protectionEnabled ? 'btn-gray' : 'btn-success';
useEffect(() => {
getAllStats();
}, []);
return (
<button
type="button"
className={`btn btn-sm mr-2 ${buttonClass}`}
onClick={() => this.props.toggleProtection(protectionEnabled)}
disabled={processingProtection}
>
<Trans>{buttonText}</Trans>
</button>
);
};
const buttonText = protectionEnabled ? 'disable_protection' : 'enable_protection';
toggleClientStatus = (type, ip) => {
const confirmMessage = type === BLOCK_ACTIONS.BLOCK ? 'client_confirm_block' : 'client_confirm_unblock';
const buttonClass = classNames('btn btn-sm dashboard-title__button', {
'btn-gray': protectionEnabled,
'btn-success': !protectionEnabled,
});
if (window.confirm(this.props.t(confirmMessage, { ip }))) {
this.props.toggleClientBlock(type, ip);
}
};
const refreshButton = <button
type="button"
className="btn btn-icon btn-outline-primary btn-sm"
onClick={() => getAllStats()}
>
<svg className="icons">
<use xlinkHref="#refresh" />
</svg>
</button>;
render() {
const {
dashboard, stats, access, t,
} = this.props;
const statsProcessing = stats.processingStats
const subtitle = stats.interval === 1
? t('for_last_24_hours')
: t('for_last_days', { count: stats.interval });
const statsProcessing = stats.processingStats
|| stats.processingGetConfig
|| access.processing;
const subtitle = stats.interval === 1
? t('for_last_24_hours')
: t('for_last_days', { count: stats.interval });
const refreshFullButton = (
return <>
<PageTitle title={t('dashboard')} containerClass="page-title--dashboard">
<button
type="button"
className="btn btn-outline-primary btn-sm"
onClick={() => this.getAllStats()}
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>
);
const refreshButton = (
<button
type="button"
className="btn btn-icon btn-outline-primary btn-sm"
onClick={() => this.getAllStats()}
>
<svg className="icons">
<use xlinkHref="#refresh" />
</svg>
</button>
);
return (
<Fragment>
<PageTitle title={t('dashboard')}>
<div className="page-title__actions">
{this.getToggleFilteringButton()}
{refreshFullButton}
</div>
</PageTitle>
{statsProcessing && <Loading />}
{!statsProcessing && (
<div className="row row-cards">
<div className="col-lg-12">
<Statistics
interval={stats.interval}
dnsQueries={stats.dnsQueries}
blockedFiltering={stats.blockedFiltering}
replacedSafebrowsing={stats.replacedSafebrowsing}
replacedParental={stats.replacedParental}
numDnsQueries={stats.numDnsQueries}
numBlockedFiltering={stats.numBlockedFiltering}
numReplacedSafebrowsing={stats.numReplacedSafebrowsing}
numReplacedParental={stats.numReplacedParental}
refreshButton={refreshButton}
/>
</div>
<div className="col-lg-6">
<Counters
subtitle={subtitle}
refreshButton={refreshButton}
/>
</div>
<div className="col-lg-6">
<Clients
subtitle={subtitle}
dnsQueries={stats.numDnsQueries}
topClients={stats.topClients}
clients={dashboard.clients}
autoClients={dashboard.autoClients}
refreshButton={refreshButton}
toggleClientStatus={this.toggleClientStatus}
processingAccessSet={access.processingSet}
disallowedClients={access.disallowed_clients}
/>
</div>
<div className="col-lg-6">
<QueriedDomains
subtitle={subtitle}
dnsQueries={stats.numDnsQueries}
topQueriedDomains={stats.topQueriedDomains}
refreshButton={refreshButton}
/>
</div>
<div className="col-lg-6">
<BlockedDomains
subtitle={subtitle}
topBlockedDomains={stats.topBlockedDomains}
blockedFiltering={stats.numBlockedFiltering}
replacedSafebrowsing={stats.numReplacedSafebrowsing}
replacedParental={stats.numReplacedParental}
refreshButton={refreshButton}
/>
</div>
</div>
)}
</Fragment>
);
}
}
</PageTitle>
{statsProcessing && <Loading />}
{!statsProcessing && <div className="row row-cards dashboard">
<div className="col-lg-12">
<Statistics
interval={stats.interval}
dnsQueries={stats.dnsQueries}
blockedFiltering={stats.blockedFiltering}
replacedSafebrowsing={stats.replacedSafebrowsing}
replacedParental={stats.replacedParental}
numDnsQueries={stats.numDnsQueries}
numBlockedFiltering={stats.numBlockedFiltering}
numReplacedSafebrowsing={stats.numReplacedSafebrowsing}
numReplacedParental={stats.numReplacedParental}
refreshButton={refreshButton}
/>
</div>
<div className="col-lg-6">
<Counters
subtitle={subtitle}
refreshButton={refreshButton}
/>
</div>
<div className="col-lg-6">
<Clients
subtitle={subtitle}
dnsQueries={stats.numDnsQueries}
topClients={stats.topClients}
clients={dashboard.clients}
autoClients={dashboard.autoClients}
refreshButton={refreshButton}
processingAccessSet={access.processingSet}
disallowedClients={access.disallowed_clients}
/>
</div>
<div className="col-lg-6">
<QueriedDomains
subtitle={subtitle}
dnsQueries={stats.numDnsQueries}
topQueriedDomains={stats.topQueriedDomains}
refreshButton={refreshButton}
/>
</div>
<div className="col-lg-6">
<BlockedDomains
subtitle={subtitle}
topBlockedDomains={stats.topBlockedDomains}
blockedFiltering={stats.numBlockedFiltering}
replacedSafebrowsing={stats.numReplacedSafebrowsing}
replacedParental={stats.numReplacedParental}
refreshButton={refreshButton}
/>
</div>
</div>}
</>;
};
Dashboard.propTypes = {
dashboard: PropTypes.object.isRequired,
@@ -160,9 +141,7 @@ Dashboard.propTypes = {
getStatsConfig: PropTypes.func.isRequired,
toggleProtection: PropTypes.func.isRequired,
getClients: PropTypes.func.isRequired,
t: PropTypes.func.isRequired,
toggleClientBlock: PropTypes.func.isRequired,
getAccessList: PropTypes.func.isRequired,
};
export default withTranslation()(Dashboard);
export default 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,165 +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,
} from '../../../helpers/helpers';
import { FILTERED } from '../../../helpers/constants';
import { BLOCK_ACTIONS, FILTERED, FILTERED_STATUS } from '../../../helpers/constants';
import { toggleBlocking } from '../../../actions';
const getFilterName = (id, filters, whitelistFilters, t) => {
if (id === 0) {
return t('filtered_custom_rules');
}
const renderBlockingButton = (isFiltered, domain) => {
const processingRules = useSelector((state) => state.filtering.processingRules);
const dispatch = useDispatch();
const { t } = useTranslation();
const filter = filters.find((filter) => filter.id === id)
|| whitelistFilters.find((filter) => filter.id === id);
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
if (filter && filter.name) {
return t('query_log_filtered', { filter: filter.name });
}
const onClick = async () => {
await dispatch(toggleBlocking(buttonType, domain));
};
return '';
const buttonClass = classNames('mt-3 button-action button-action--main button-action--active button-action--small', {
'button-action--unblock': isFiltered,
});
return <button type="button"
className={buttonClass}
onClick={onClick}
disabled={processingRules}
>
{t(buttonType)}
</button>;
};
const getTitle = (reason, filterName, t, onlyFiltered) => {
if (checkNotFilteredNotFound(reason)) {
return t('check_not_found');
}
const getTitle = (reason) => {
const { t } = useTranslation();
if (checkRewrite(reason)) {
return t('rewrite_applied');
}
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);
if (checkRewriteHosts(reason)) {
return t('rewrite_hosts_applied');
}
if (checkBlackList(reason)) {
return filterName;
}
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>
const filterName = getFilterName(
filters,
whitelistFilters,
filter_id,
'filtered_custom_rules',
(filter) => (filter?.name ? t('query_log_filtered', { filter: filter.name }) : ''),
);
};
const getColor = (reason) => {
if (checkFiltered(reason)) {
return 'red';
} if (checkRewrite(reason) || checkRewriteHosts(reason)) {
return 'blue';
} if (checkWhiteList(reason)) {
return 'green';
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 '';
return <>
<div>{t('check_reason', { reason })}</div>
<div>{filterName}</div>
</>;
};
const Info = ({
filters,
whitelistFilters,
hostname,
reason,
filter_id,
rule,
service_name,
cname,
ip_addrs,
t,
}) => {
const filterName = getFilterName(filter_id, filters, whitelistFilters, t);
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 { renderInputField, renderSelectField } 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={renderSelectField}
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) => {
@@ -148,13 +164,13 @@ const Form = (props) => {
>
{t('cancel_btn')}
</button>
<button
{modalType !== MODAL_TYPE.SELECT_MODAL_TYPE && <button
type="submit"
className="btn btn-success"
disabled={processingAddFilter || processingConfigFilter}
>
{t('save_btn')}
</button>
</button>}
</div>
</form>;
};
@@ -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

@@ -59,6 +59,4 @@ const Services = () => {
);
};
Services.propTypes = {};
export default Services;

View File

@@ -48,7 +48,7 @@ class Table extends Component {
accessor: 'url',
minWidth: 200,
Cell: ({ value }) => (
<div className="logs__row o-hidden">
<div className="logs__row">
{isValidAbsolutePath(value) ? value
: <a
href={value}

View File

@@ -164,6 +164,10 @@
color: #9aa0ac;
}
.nav-icon--white {
color: #fff;
}
.header-brand-img {
height: 32px;
}

View File

@@ -90,9 +90,8 @@ class Menu extends Component {
};
getActiveClassForDropdown = (URLS) => {
const { pathname } = this.props.location;
const isActivePage = Object.values(URLS)
.some((item) => item === pathname);
.some((item) => item === this.props.pathname);
return isActivePage ? 'active' : '';
};
@@ -180,9 +179,9 @@ class Menu extends Component {
}
Menu.propTypes = {
isMenuOpen: PropTypes.bool,
closeMenu: PropTypes.func,
location: PropTypes.object,
isMenuOpen: PropTypes.bool.isRequired,
closeMenu: PropTypes.func.isRequired,
pathname: PropTypes.string.isRequired,
t: PropTypes.func,
};

View File

@@ -1,83 +1,75 @@
import React, { Component } from 'react';
import { Link } from 'react-router-dom';
import PropTypes from 'prop-types';
import React, { useState } from 'react';
import { Link, useLocation } from 'react-router-dom';
import { shallowEqual, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import classnames from 'classnames';
import { Trans, withTranslation } from 'react-i18next';
import Menu from './Menu';
import logo from '../ui/svg/logo.svg';
import './Header.css';
class Header extends Component {
state = {
isMenuOpen: false,
const Header = () => {
const [isMenuOpen, setIsMenuOpen] = useState(false);
const { t } = useTranslation();
const {
protectionEnabled,
processing,
isCoreRunning,
processingProfile,
name,
} = useSelector((state) => state.dashboard, shallowEqual);
const { pathname } = useLocation();
const toggleMenuOpen = () => {
setIsMenuOpen((isMenuOpen) => !isMenuOpen);
};
toggleMenuOpen = () => {
this.setState((prevState) => ({ isMenuOpen: !prevState.isMenuOpen }));
const closeMenu = () => {
setIsMenuOpen(false);
};
closeMenu = () => {
this.setState({ isMenuOpen: false });
};
const badgeClass = classnames('badge dns-status', {
'badge-success': protectionEnabled,
'badge-danger': !protectionEnabled,
});
render() {
const { dashboard, location } = this.props;
const { isMenuOpen } = this.state;
const badgeClass = classnames({
'badge dns-status': true,
'badge-success': dashboard.protectionEnabled,
'badge-danger': !dashboard.protectionEnabled,
});
return (
<div className="header">
<div className="header__container">
<div className="header__row">
<div
className="header-toggler d-lg-none ml-lg-0 collapsed"
onClick={this.toggleMenuOpen}
>
<span className="header-toggler-icon" />
</div>
<div className="header__column">
<div className="d-flex align-items-center">
<Link to="/" className="nav-link pl-0 pr-1">
<img src={logo} alt="" className="header-brand-img" />
</Link>
{!dashboard.processing && dashboard.isCoreRunning && (
<span className={badgeClass}>
<Trans>{dashboard.protectionEnabled ? 'on' : 'off'}</Trans>
</span>
)}
</div>
</div>
<Menu
location={location}
isMenuOpen={isMenuOpen}
closeMenu={this.closeMenu}
/>
<div className="header__column">
<div className="header__right">
{!dashboard.processingProfile && dashboard.name
&& <a href="control/logout" className="btn btn-sm btn-outline-secondary">
<Trans>sign_out</Trans>
</a>
}
</div>
</div>
return <div className="header">
<div className="header__container">
<div className="header__row">
<div
className="header-toggler d-lg-none ml-lg-0 collapsed"
onClick={toggleMenuOpen}
>
<span className="header-toggler-icon" />
</div>
<div className="header__column">
<div className="d-flex align-items-center">
<Link to="/" className="nav-link pl-0 pr-1">
<img src={logo} alt="" className="header-brand-img" />
</Link>
{!processing && isCoreRunning
&& <span className={badgeClass}
>{t(protectionEnabled ? 'on' : 'off')}
</span>}
</div>
</div>
<Menu
pathname={pathname}
isMenuOpen={isMenuOpen}
closeMenu={closeMenu}
/>
<div className="header__column">
<div className="header__right">
{!processingProfile && name
&& <a href="control/logout" className="btn btn-sm btn-outline-secondary">
{t('sign_out')}
</a>}
</div>
</div>
</div>
);
}
}
Header.propTypes = {
dashboard: PropTypes.object.isRequired,
location: PropTypes.object.isRequired,
getVersion: PropTypes.func.isRequired,
t: PropTypes.func.isRequired,
</div>
</div>;
};
export default withTranslation()(Header);
export default Header;

View File

@@ -0,0 +1,184 @@
import React, { useState } from 'react';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import { nanoid } from 'nanoid';
import classNames from 'classnames';
import { useTranslation } from 'react-i18next';
import propTypes from 'prop-types';
import { checkFiltered, getBlockingClientName } from '../../../helpers/helpers';
import { BLOCK_ACTIONS } from '../../../helpers/constants';
import { toggleBlocking, toggleBlockingForClient } from '../../../actions';
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, disallowed, disallowed_rule,
},
reason,
}) => {
const { t } = useTranslation();
const dispatch = useDispatch();
const autoClients = useSelector((state) => state.dashboard.autoClients, shallowEqual);
const processingRules = useSelector((state) => state.filtering.processingRules);
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const [isOptionsOpened, setOptionsOpened] = useState(false);
const autoClient = autoClients.find((autoClient) => autoClient.name === client);
const source = autoClient?.source;
const whoisAvailable = whois_info && Object.keys(whois_info).length > 0;
const id = nanoid();
const data = {
address: client,
name,
country: whois_info?.country,
city: whois_info?.city,
network: whois_info?.orgname,
source_label: source,
};
const processedData = Object.entries(data);
const isFiltered = checkFiltered(reason);
const nameClass = classNames('w-90 o-hidden d-flex flex-column', {
'mt-2': isDetailed && !name && !whoisAvailable,
'white-space--nowrap': isDetailed,
});
const hintClass = classNames('icons mr-4 icon--24 icon--lightgray', {
'my-3': isDetailed,
});
const renderBlockingButton = (isFiltered, domain) => {
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const clients = useSelector((state) => state.dashboard.clients);
const {
confirmMessage,
buttonKey: blockingClientKey,
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 = [
{
name: blockingForClientKey,
onClick: () => {
dispatch(toggleBlockingForClient(buttonType, domain, clientNameBlockingFor));
},
},
{
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 = (options) => {
if (options.length === 0) {
return null;
}
return <>{options.map(({ name, onClick, disabled }) => <button
key={name}
className="button-action--arrow-option px-4 py-2"
onClick={onClick}
disabled={disabled}
>{t(name)}
</button>)}</>;
};
const content = getOptions(BUTTON_OPTIONS);
const buttonClass = classNames('button-action button-action--main', {
'button-action--unblock': isFiltered,
'button-action--with-options': content,
'button-action--active': isOptionsOpened,
});
const buttonArrowClass = classNames('button-action button-action--arrow', {
'button-action--unblock': isFiltered,
'button-action--active': isOptionsOpened,
});
const containerClass = classNames('button-action__container', {
'button-action__container--detailed': isDetailed,
});
return <div className={containerClass}>
<button type="button"
className={buttonClass}
onClick={onClick}
disabled={processingRules}
>
{t(buttonType)}
</button>
{content && <button className={buttonArrowClass} disabled={processingRules}>
<IconTooltip
className='h-100'
tooltipClass='button-action--arrow-option-container'
xlinkHref='chevron-down'
triggerClass='button-action--icon'
content={content} placement="bottom-end" trigger="click"
onVisibilityChange={setOptionsOpened}
/>
</button>}
</div>;
};
return <div className="o-hidden h-100 logs__cell logs__cell--client" role="gridcell">
<IconTooltip className={hintClass} columnClass='grid grid--limited' tooltipClass='px-5 pb-5 pt-4 mw-75'
xlinkHref='question' contentItemClass="contentItemClass" title="client_details"
content={processedData} placement="bottom" />
<div className={nameClass}>
<div data-tip={true} data-for={id}>
{renderFormattedClientCell(client, info, isDetailed, true)}
</div>
{isDetailed && name && !whoisAvailable
&& <div className="detailed-info d-none d-sm-block logs__text"
title={name}>{name}</div>}
</div>
{renderBlockingButton(isFiltered, domain)}
</div>;
};
ClientCell.propTypes = {
client: propTypes.string.isRequired,
domain: propTypes.string.isRequired,
info: propTypes.oneOfType([
propTypes.string,
propTypes.shape({
name: propTypes.string.isRequired,
whois_info: propTypes.shape({
country: propTypes.string,
city: propTypes.string,
orgname: propTypes.string,
}),
disallowed: propTypes.bool.isRequired,
disallowed_rule: propTypes.string.isRequired,
}),
]),
reason: propTypes.string.isRequired,
};
export default ClientCell;

View File

@@ -0,0 +1,29 @@
import React from 'react';
import { useSelector } from 'react-redux';
import propTypes from 'prop-types';
import { formatDateTime, formatTime } from '../../../helpers/helpers';
import { DEFAULT_SHORT_DATE_FORMAT_OPTIONS, DEFAULT_TIME_FORMAT } from '../../../helpers/constants';
const DateCell = ({ time }) => {
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
if (!time) {
return '';
}
const formattedTime = formatTime(time, DEFAULT_TIME_FORMAT);
const formattedDate = formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS);
return <div className="logs__cell logs__cell logs__cell--date text-truncate" role="gridcell">
<div className="logs__time" title={formattedTime}>{formattedTime}</div>
{isDetailed
&& <div className="detailed-info d-none d-sm-block text-truncate"
title={formattedDate}>{formattedDate}</div>}
</div>;
};
DateCell.propTypes = {
time: propTypes.string.isRequired,
};
export default DateCell;

View File

@@ -1,7 +1,8 @@
import React from 'react';
import { useSelector } from 'react-redux';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import getIconTooltip from './getIconTooltip';
import propTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
import {
DEFAULT_SHORT_DATE_FORMAT_OPTIONS,
LONG_TIME_FORMAT,
@@ -9,15 +10,19 @@ import {
} from '../../../helpers/constants';
import { captitalizeWords, formatDateTime, formatTime } from '../../../helpers/helpers';
import { getSourceData } from '../../../helpers/trackers/trackers';
import IconTooltip from './IconTooltip';
const getDomainCell = (props) => {
const {
row, t, isDetailed, dnssec_enabled,
} = props;
const {
tracker, type, answer_dnssec, client_proto, domain, time,
} = row.original;
const DomainCell = ({
answer_dnssec,
client_proto,
domain,
time,
tracker,
type,
}) => {
const { t } = useTranslation();
const dnssec_enabled = useSelector((state) => state.dnsConfig.dnssec_enabled);
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const hasTracker = !!tracker;
@@ -50,8 +55,8 @@ const getDomainCell = (props) => {
name_table_header: tracker?.name,
category_label: hasTracker && captitalizeWords(tracker.category),
source_label: 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>,
};
const renderGrid = (content, idx) => {
@@ -72,51 +77,42 @@ const getDomainCell = (props) => {
const renderContent = hasTracker ? requestDetails.concat(getGrid(knownTrackerDataObj, 'known_tracker', 'pt-4')) : requestDetails;
const trackerHint = getIconTooltip({
className: privacyIconClass,
tooltipClass: 'pt-4 pb-5 px-5 mw-75',
xlinkHref: 'privacy',
contentItemClass: 'key-colon',
renderContent,
place: 'bottom',
});
const valueClass = classNames('w-100', {
const valueClass = classNames('w-100 text-truncate', {
'px-2 d-flex justify-content-center flex-column': isDetailed,
});
const details = [ip, protocol].filter(Boolean)
.join(', ');
return (
<div className="logs__row o-hidden">
{dnssec_enabled && getIconTooltip({
className: lockIconClass,
tooltipClass: 'py-4 px-5 pb-45',
canShowTooltip: answer_dnssec,
xlinkHref: 'lock',
columnClass: 'w-100',
content: 'validated_with_dnssec',
placement: 'bottom',
})}
{trackerHint}
<div className={valueClass}>
<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>}
</div>
return <div className="d-flex o-hidden logs__cell logs__cell logs__cell--domain" role="gridcell">
{dnssec_enabled && <IconTooltip
className={lockIconClass}
tooltipClass='py-4 px-5 pb-45'
canShowTooltip={!!answer_dnssec}
xlinkHref='lock'
columnClass='w-100'
content='validated_with_dnssec'
placement='bottom'
/>}
<IconTooltip className={privacyIconClass} tooltipClass='pt-4 pb-5 px-5 mw-75'
xlinkHref='privacy' contentItemClass='key-colon' renderContent={renderContent}
place='bottom' />
<div className={valueClass}>
<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>}
</div>
);
</div>;
};
getDomainCell.propTypes = {
row: PropTypes.object.isRequired,
t: PropTypes.func.isRequired,
isDetailed: PropTypes.bool.isRequired,
toggleBlocking: PropTypes.func.isRequired,
autoClients: PropTypes.array.isRequired,
dnssec_enabled: PropTypes.bool.isRequired,
DomainCell.propTypes = {
answer_dnssec: propTypes.bool.isRequired,
client_proto: propTypes.string.isRequired,
domain: propTypes.string.isRequired,
time: propTypes.string.isRequired,
type: propTypes.string.isRequired,
tracker: propTypes.object,
};
export default getDomainCell;
export default DomainCell;

View File

@@ -0,0 +1,54 @@
import { useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux';
import classNames from 'classnames';
import React from 'react';
import { toggleDetailedLogs } from '../../../actions/queryLogs';
import HeaderCell from './HeaderCell';
const Header = () => {
const { t } = useTranslation();
const dispatch = useDispatch();
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const disableDetailedMode = () => dispatch(toggleDetailedLogs(false));
const enableDetailedMode = () => dispatch(toggleDetailedLogs(true));
const HEADERS = [
{
className: 'logs__cell--date',
content: 'time_table_header',
},
{
className: 'logs__cell--domain',
content: 'request_table_header',
},
{
className: 'logs__cell--response',
content: 'response_table_header',
},
{
className: 'logs__cell--client',
content: <>
{t('client_table_header')}
{<span>
<svg className={classNames('icons icon--24 icon--green cursor--pointer mr-2', { 'icon--selected': !isDetailed })}
onClick={disableDetailedMode}
>
<title>{t('compact')}</title>
<use xlinkHref='#list' /></svg>
<svg className={classNames('icons icon--24 icon--green cursor--pointer', { 'icon--selected': isDetailed })}
onClick={enableDetailedMode}
>
<title>{t('default')}</title>
<use xlinkHref='#detailed_list' />
</svg>
</span>}
</>,
},
];
return <div className="logs__cell--header__container px-5" role="row">
{HEADERS.map(HeaderCell)}
</div>;
};
export default Header;

View File

@@ -0,0 +1,22 @@
import classNames from 'classnames';
import React from 'react';
import propTypes from 'prop-types';
import { useTranslation } from 'react-i18next';
const HeaderCell = ({ content, className }, idx) => {
const { t } = useTranslation();
return <div
key={idx}
className={classNames('logs__cell--header__item logs__cell logs__text--bold', className)}
role="columnheader"
>
{typeof content === 'string' ? t(content) : content}
</div>;
};
HeaderCell.propTypes = {
content: propTypes.oneOfType([propTypes.string, propTypes.element]).isRequired,
className: propTypes.string,
};
export default HeaderCell;

View File

@@ -6,17 +6,21 @@ import { processContent } from '../../../helpers/helpers';
import Tooltip from '../../ui/Tooltip';
import 'react-popper-tooltip/dist/styles.css';
import './IconTooltip.css';
import { SHOW_TOOLTIP_DELAY } from '../../../helpers/constants';
const getIconTooltip = ({
const IconTooltip = ({
className,
contentItemClass,
columnClass,
triggerClass,
canShowTooltip = true,
xlinkHref,
title,
placement,
tooltipClass,
content,
trigger,
onVisibilityChange,
renderContent = content ? React.Children.map(
processContent(content),
(item, idx) => <div key={idx} className={contentItemClass}>
@@ -36,6 +40,10 @@ const getIconTooltip = ({
className={tooltipClassName}
content={tooltipContent}
placement={placement}
triggerClass={triggerClass}
trigger={trigger}
onVisibilityChange={onVisibilityChange}
delayShow={trigger === 'click' ? 0 : SHOW_TOOLTIP_DELAY}
>
{xlinkHref && <svg className={className}>
<use xlinkHref={`#${xlinkHref}`} />
@@ -43,20 +51,20 @@ const getIconTooltip = ({
</Tooltip>;
};
getIconTooltip.propTypes = {
IconTooltip.propTypes = {
className: PropTypes.string,
trigger: PropTypes.string,
triggerClass: PropTypes.string,
contentItemClass: PropTypes.string,
columnClass: PropTypes.string,
tooltipClass: PropTypes.string,
title: PropTypes.string,
placement: PropTypes.string,
canShowTooltip: PropTypes.string,
canShowTooltip: PropTypes.bool,
xlinkHref: PropTypes.string,
content: PropTypes.oneOfType([
PropTypes.string,
PropTypes.array,
]),
content: PropTypes.node,
renderContent: PropTypes.arrayOf(PropTypes.element),
onVisibilityChange: PropTypes.func,
};
export default getIconTooltip;
export default IconTooltip;

View File

@@ -0,0 +1,121 @@
import { useTranslation } from 'react-i18next';
import { shallowEqual, useSelector } from 'react-redux';
import classNames from 'classnames';
import React from 'react';
import propTypes from 'prop-types';
import {
formatElapsedMs,
getFilterName,
getServiceName,
} from '../../../helpers/helpers';
import { FILTERED_STATUS, FILTERED_STATUS_TO_META_MAP } from '../../../helpers/constants';
import IconTooltip from './IconTooltip';
const ResponseCell = ({
elapsedMs,
originalResponse,
reason,
response,
status,
upstream,
rule,
filterId,
service_name,
}) => {
const { t } = useTranslation();
const filters = useSelector((state) => state.filtering.filters, shallowEqual);
const whitelistFilters = useSelector((state) => state.filtering.whitelistFilters, shallowEqual);
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const formattedElapsedMs = formatElapsedMs(elapsedMs, t);
const isBlocked = reason === FILTERED_STATUS.FILTERED_BLACK_LIST
|| reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE;
const isBlockedByResponse = originalResponse.length > 0 && isBlocked;
const statusLabel = t(isBlockedByResponse ? 'blocked_by_cname_or_ip' : FILTERED_STATUS_TO_META_MAP[reason]?.LABEL || reason);
const boldStatusLabel = <span className="font-weight-bold">{statusLabel}</span>;
const filter = getFilterName(filters, whitelistFilters, filterId);
const renderResponses = (responseArr) => {
if (!responseArr || responseArr.length === 0) {
return '';
}
return <div>{responseArr.map((response) => {
const className = classNames('white-space--nowrap', {
'overflow-break': response.length > 100,
});
return <div key={response} className={className}>{`${response}\n`}</div>;
})}</div>;
};
const COMMON_CONTENT = {
encryption_status: boldStatusLabel,
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_code: status,
...(service_name ? { service_name: getServiceName(service_name) } : { filter }),
rule_label: rule,
response_table_header: renderResponses(response),
original_response: renderResponses(originalResponse),
};
const content = rule
? Object.entries(COMMON_CONTENT)
: Object.entries({
...COMMON_CONTENT,
filter: '',
});
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
className={classNames('icons mr-4 icon--24 icon--lightgray', { 'my-3': isDetailed })}
columnClass='grid grid--limited'
tooltipClass='px-5 pb-5 pt-4 mw-75 custom-tooltip__response-details'
contentItemClass='text-truncate key-colon o-hidden'
xlinkHref='question'
title='response_details'
content={content}
placement='bottom'
/>
<div className="text-truncate">
<div className="text-truncate" title={statusLabel}>{statusLabel}</div>
{isDetailed && <div
className="detailed-info d-none d-sm-block pt-1 text-truncate"
title={detailedInfo}>{detailedInfo}</div>}
</div>
</div>;
};
ResponseCell.propTypes = {
elapsedMs: propTypes.string.isRequired,
originalResponse: propTypes.array.isRequired,
reason: propTypes.string.isRequired,
response: propTypes.array.isRequired,
status: propTypes.string.isRequired,
upstream: propTypes.string.isRequired,
rule: propTypes.string,
filterId: propTypes.number,
service_name: propTypes.string,
};
export default ResponseCell;

View File

@@ -1,110 +0,0 @@
import React from 'react';
import { nanoid } from 'nanoid';
import classNames from 'classnames';
import PropTypes from 'prop-types';
import { formatClientCell } from '../../../helpers/formatClientCell';
import getIconTooltip from './getIconTooltip';
import { checkFiltered } from '../../../helpers/helpers';
import { BLOCK_ACTIONS } from '../../../helpers/constants';
const getClientCell = ({
row, t, isDetailed, toggleBlocking, autoClients, processingRules,
}) => {
const {
reason, client, domain, info: { name, whois_info },
} = row.original;
const autoClient = autoClients.find((autoClient) => autoClient.name === client);
const source = autoClient?.source;
const whoisAvailable = whois_info && Object.keys(whois_info).length > 0;
const id = nanoid();
const data = {
address: client,
name,
country: whois_info?.country,
city: whois_info?.city,
network: whois_info?.orgname,
source_label: source,
};
const processedData = Object.entries(data);
const isFiltered = checkFiltered(reason);
const nameClass = classNames('w-90 o-hidden d-flex flex-column', {
'mt-2': isDetailed && !name && !whoisAvailable,
'white-space--nowrap': isDetailed,
});
const hintClass = classNames('icons mr-4 icon--24 icon--lightgray', {
'my-3': isDetailed,
});
const renderBlockingButton = (isFiltered, domain) => {
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const buttonClass = classNames('logs__action button__action', {
'btn-outline-secondary': isFiltered,
'btn-outline-danger': !isFiltered,
'logs__action--detailed': isDetailed,
});
const onClick = () => toggleBlocking(buttonType, domain);
return (
<div className={buttonClass}>
<button
type="button"
className={`btn btn-sm ${buttonClass}`}
onClick={onClick}
disabled={processingRules}
>
{t(buttonType)}
</button>
</div>
);
};
return (
<div className="logs__row o-hidden h-100">
{getIconTooltip({
className: hintClass,
columnClass: 'grid grid--limited',
tooltipClass: 'px-5 pb-5 pt-4 mw-75',
xlinkHref: 'question',
contentItemClass: 'text-truncate key-colon',
title: 'client_details',
content: processedData,
placement: 'bottom',
})}
<div className={nameClass}>
<div data-tip={true} data-for={id}>
{formatClientCell(row, isDetailed)}
</div>
{isDetailed && name && !whoisAvailable && (
<div
className="detailed-info d-none d-sm-block logs__text"
title={name}
>
{name}
</div>
)}
</div>
{renderBlockingButton(isFiltered, domain)}
</div>
);
};
getClientCell.propTypes = {
row: PropTypes.object.isRequired,
t: PropTypes.func.isRequired,
isDetailed: PropTypes.bool.isRequired,
toggleBlocking: PropTypes.func.isRequired,
autoClients: PropTypes.array.isRequired,
processingRules: PropTypes.bool.isRequired,
};
export default getClientCell;

View File

@@ -1,28 +0,0 @@
import React from 'react';
import { formatTime, formatDateTime } from '../../../helpers/helpers';
import {
DEFAULT_SHORT_DATE_FORMAT_OPTIONS,
DEFAULT_TIME_FORMAT,
} from '../../../helpers/constants';
const getDateCell = (row, isDetailed) => {
const { time } = row.original;
if (!time) {
return '';
}
const formattedTime = formatTime(time, DEFAULT_TIME_FORMAT);
const formattedDate = formatDateTime(time, DEFAULT_SHORT_DATE_FORMAT_OPTIONS);
return (
<div className="logs__cell">
<div className="logs__time" title={formattedTime}>{formattedTime}</div>
{isDetailed && <div className="detailed-info d-none d-sm-block text-truncate"
title={formattedDate}>{formattedDate}</div>}
</div>
);
};
export default getDateCell;

View File

@@ -1,79 +0,0 @@
import React from 'react';
import classNames from 'classnames';
import { formatElapsedMs } from '../../../helpers/helpers';
import {
FILTERED_STATUS,
FILTERED_STATUS_TO_META_MAP,
} from '../../../helpers/constants';
import getIconTooltip from './getIconTooltip';
const getResponseCell = (row, filtering, t, isDetailed, getFilterName) => {
const {
reason, filterId, rule, status, upstream, elapsedMs, response, originalResponse,
} = row.original;
const { filters, whitelistFilters } = filtering;
const formattedElapsedMs = formatElapsedMs(elapsedMs, t);
const isBlocked = reason === FILTERED_STATUS.FILTERED_BLACK_LIST
|| reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE;
const isBlockedByResponse = originalResponse.length > 0 && isBlocked;
const statusLabel = t(isBlockedByResponse ? 'blocked_by_cname_or_ip' : FILTERED_STATUS_TO_META_MAP[reason]?.label || reason);
const boldStatusLabel = <span className="font-weight-bold">{statusLabel}</span>;
const filter = getFilterName(filters, whitelistFilters, filterId, t);
const renderResponses = (responseArr) => {
if (responseArr?.length === 0) {
return '';
}
return <div>{responseArr.map((response) => {
const className = classNames('white-space--nowrap', {
'overflow-break': response.length > 100,
});
return <div key={response} className={className}>{`${response}\n`}</div>;
})}</div>;
};
const COMMON_CONTENT = {
encryption_status: boldStatusLabel,
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
response_code: status,
filter,
rule_label: rule,
response_table_header: renderResponses(response),
original_response: renderResponses(originalResponse),
};
const content = rule
? Object.entries(COMMON_CONTENT)
: Object.entries({ ...COMMON_CONTENT, filter: '' });
const detailedInfo = isBlocked ? filter : formattedElapsedMs;
return (
<div className="logs__row">
{getIconTooltip({
className: classNames('icons mr-4 icon--24 icon--lightgray', { 'my-3': isDetailed }),
columnClass: 'grid grid--limited',
tooltipClass: 'px-5 pb-5 pt-4 mw-75 custom-tooltip__response-details',
contentItemClass: 'text-truncate key-colon o-hidden',
xlinkHref: 'question',
title: 'response_details',
content,
placement: 'bottom',
})}
<div className="text-truncate">
<div className="text-truncate" title={statusLabel}>{statusLabel}</div>
{isDetailed && <div
className="detailed-info d-none d-sm-block pt-1 text-truncate"
title={detailedInfo}>{detailedInfo}</div>}
</div>
</div>
);
};
export default getResponseCell;

View File

@@ -0,0 +1,18 @@
import i18next from 'i18next';
export const BUTTON_PREFIX = 'btn_';
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 buttonKey = i18next.t(disallowed ? 'allow_this_client' : 'disallow_this_client');
const isNotInAllowedList = disallowed && disallowed_rule === '';
return {
confirmMessage,
buttonKey,
isNotInAllowedList,
};
};

View File

@@ -0,0 +1,250 @@
import React, { memo } from 'react';
import classNames from 'classnames';
import { useTranslation } from 'react-i18next';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import propTypes from 'prop-types';
import {
captitalizeWords,
checkFiltered,
formatDateTime,
formatElapsedMs,
formatTime,
getBlockingClientName,
getFilterName,
getServiceName,
processContent,
} from '../../../helpers/helpers';
import {
BLOCK_ACTIONS,
DEFAULT_SHORT_DATE_FORMAT_OPTIONS,
FILTERED_STATUS,
FILTERED_STATUS_TO_META_MAP,
LONG_TIME_FORMAT,
QUERY_STATUS_COLORS,
SCHEME_TO_PROTOCOL_MAP,
} from '../../../helpers/constants';
import { getSourceData } from '../../../helpers/trackers/trackers';
import { toggleBlocking, toggleBlockingForClient } from '../../../actions';
import DateCell from './DateCell';
import DomainCell from './DomainCell';
import ResponseCell from './ResponseCell';
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,
rowProps,
rowProps: { reason },
isSmallScreen,
setDetailedDataCurrent,
setButtonType,
setModalOpened,
}) => {
const dispatch = useDispatch();
const { t } = useTranslation();
const dnssec_enabled = useSelector((state) => state.dnsConfig.dnssec_enabled);
const filters = useSelector((state) => state.filtering.filters, shallowEqual);
const whitelistFilters = useSelector((state) => state.filtering.whitelistFilters, shallowEqual);
const autoClients = useSelector((state) => state.dashboard.autoClients, shallowEqual);
const clients = useSelector((state) => state.dashboard.clients);
const onClick = () => {
if (!isSmallScreen) {
return;
}
const {
answer_dnssec,
client,
domain,
elapsedMs,
info,
info: { disallowed, disallowed_rule },
reason,
response,
time,
tracker,
upstream,
type,
client_proto,
filterId,
rule,
originalResponse,
status,
service_name,
} = rowProps;
const hasTracker = !!tracker;
const autoClient = autoClients
.find((autoClient) => autoClient.name === client);
const { whois_info } = info;
const country = whois_info?.country;
const city = whois_info?.city;
const network = whois_info?.orgname;
const source = autoClient?.source;
const formattedElapsedMs = formatElapsedMs(elapsedMs, t);
const isFiltered = checkFiltered(reason);
const isBlocked = reason === FILTERED_STATUS.FILTERED_BLACK_LIST
|| reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE;
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const onToggleBlock = () => {
dispatch(toggleBlocking(buttonType, domain));
};
const isBlockedByResponse = originalResponse.length > 0 && isBlocked;
const requestStatus = t(isBlockedByResponse ? 'blocked_by_cname_or_ip' : FILTERED_STATUS_TO_META_MAP[reason]?.LABEL || reason);
const protocol = t(SCHEME_TO_PROTOCOL_MAP[client_proto]) || '';
const sourceData = getSourceData(tracker);
const filter = getFilterName(filters, whitelistFilters, filterId);
const {
confirmMessage,
buttonKey: blockingClientKey,
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 onBlockingForClientClick = () => {
dispatch(toggleBlockingForClient(buttonType, domain, clientNameBlockingFor));
};
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,
known_tracker: hasTracker && 'title',
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>,
response_details: 'title',
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
filter: rule ? filter : null,
rule_label: rule,
response_table_header: response?.join('\n'),
response_code: status,
client_details: 'title',
ip_address: client,
name: info?.name,
country,
city,
network,
source_label: source,
validated_with_dnssec: dnssec_enabled ? Boolean(answer_dnssec) : false,
original_response: originalResponse?.join('\n'),
[BUTTON_PREFIX + buttonType]: blockButton,
[BUTTON_PREFIX + blockingForClientKey]: blockForClientButton,
[BUTTON_PREFIX + blockingClientKey]: blockClientButton,
};
setDetailedDataCurrent(processContent(detailedData));
setButtonType(buttonType);
setModalOpened(true);
};
const isDetailed = useSelector((state) => state.queryLogs.isDetailed);
const className = classNames('d-flex px-5 logs__row',
`logs__row--${FILTERED_STATUS_TO_META_MAP?.[reason]?.COLOR ?? QUERY_STATUS_COLORS.WHITE}`, {
'logs__cell--detailed': isDetailed,
});
return <div style={style} className={className} onClick={onClick} role="row">
<DateCell {...rowProps} />
<DomainCell {...rowProps} />
<ResponseCell {...rowProps} />
<ClientCell {...rowProps} />
</div>;
});
Row.displayName = 'Row';
Row.propTypes = {
style: propTypes.object,
rowProps: propTypes.shape({
reason: propTypes.string.isRequired,
answer_dnssec: propTypes.bool.isRequired,
client: propTypes.string.isRequired,
domain: propTypes.string.isRequired,
elapsedMs: propTypes.string.isRequired,
info: propTypes.oneOfType([
propTypes.string,
propTypes.shape({
whois_info: propTypes.shape({
country: propTypes.string,
city: propTypes.string,
orgname: propTypes.string,
}),
})]),
response: propTypes.array.isRequired,
time: propTypes.string.isRequired,
tracker: propTypes.object,
upstream: propTypes.string.isRequired,
type: propTypes.string.isRequired,
client_proto: propTypes.string.isRequired,
filterId: propTypes.number,
rule: propTypes.string,
originalResponse: propTypes.array,
status: propTypes.string.isRequired,
service_name: propTypes.string,
}).isRequired,
isSmallScreen: propTypes.bool.isRequired,
setDetailedDataCurrent: propTypes.func.isRequired,
setButtonType: propTypes.func.isRequired,
setModalOpened: propTypes.func.isRequired,
};
export default Row;

View File

@@ -107,7 +107,7 @@ const Form = (props) => {
const {
response_status, search,
} = useSelector((state) => state.form[FORM_NAME.LOGS_FILTER].values, shallowEqual);
} = useSelector((state) => state?.form[FORM_NAME.LOGS_FILTER].values, shallowEqual);
const [
debouncedSearch,
@@ -171,14 +171,14 @@ const Form = (props) => {
>
{Object.values(RESPONSE_FILTER)
.map(({
query, label, disabled,
QUERY, LABEL, disabled,
}) => (
<option
key={label}
value={query}
key={LABEL}
value={QUERY}
disabled={disabled}
>
{t(label)}
{t(LABEL)}
</option>
))
}
@@ -197,5 +197,4 @@ Form.propTypes = {
export default reduxForm({
form: FORM_NAME.LOGS_FILTER,
enableReinitialize: true,
})(Form);

View File

@@ -1,33 +1,46 @@
import React from 'react';
import PropTypes from 'prop-types';
import { Trans } from 'react-i18next';
import { useTranslation } from 'react-i18next';
import { useDispatch } from 'react-redux';
import Form from './Form';
import { refreshFilteredLogs } from '../../../actions/queryLogs';
import { addSuccessToast } from '../../../actions/toasts';
const Filters = ({ filter, refreshLogs, setIsLoading }) => (
<div className="page-header page-header--logs">
<h1 className="page-title page-title--large">
<Trans>query_log</Trans>
<button
const Filters = ({ filter, setIsLoading }) => {
const { t } = useTranslation();
const dispatch = useDispatch();
const refreshLogs = async () => {
setIsLoading(true);
await dispatch(refreshFilteredLogs());
dispatch(addSuccessToast('query_log_updated'));
setIsLoading(false);
};
return <div className="page-header page-header--logs">
<h1 className="page-title page-title--large">
{t('query_log')}
<button
type="button"
className="btn btn-icon--green ml-3 bg-transparent"
className="btn btn-icon--green logs__refresh"
title={t('refresh_btn')}
onClick={refreshLogs}
>
<svg className="icons icon--24">
<use xlinkHref="#update" />
</svg>
</button>
</h1>
<Form
>
<svg className="icons icon--24">
<use xlinkHref="#update" />
</svg>
</button>
</h1>
<Form
responseStatusClass="d-sm-block"
initialValues={filter}
setIsLoading={setIsLoading}
/>
</div>
);
/>
</div>;
};
Filters.propTypes = {
filter: PropTypes.object.isRequired,
refreshLogs: PropTypes.func.isRequired,
processingGetLogs: PropTypes.bool.isRequired,
setIsLoading: PropTypes.func.isRequired,
};

View File

@@ -0,0 +1,87 @@
import React, {
useCallback,
useEffect,
useRef,
} from 'react';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
import { useTranslation } from 'react-i18next';
import propTypes from 'prop-types';
import throttle from 'lodash/throttle';
import Loading from '../ui/Loading';
import Header from './Cells/Header';
import { getLogs } from '../../actions/queryLogs';
import Row from './Cells';
import { isScrolledIntoView } from '../../helpers/helpers';
import { QUERY_LOGS_PAGE_LIMIT } from '../../helpers/constants';
const InfiniteTable = ({
isLoading,
items,
isSmallScreen,
setDetailedDataCurrent,
setButtonType,
setModalOpened,
}) => {
const { t } = useTranslation();
const dispatch = useDispatch();
const loader = useRef(null);
const {
isEntireLog,
processingGetLogs,
} = useSelector((state) => state.queryLogs, shallowEqual);
const loading = isLoading || processingGetLogs;
const listener = useCallback(() => {
if (loader.current && isScrolledIntoView(loader.current)) {
dispatch(getLogs());
}
}, [loader.current, isScrolledIntoView, getLogs]);
useEffect(() => {
listener();
}, [items.length < QUERY_LOGS_PAGE_LIMIT]);
useEffect(() => {
const THROTTLE_TIME = 100;
const throttledListener = throttle(listener, THROTTLE_TIME);
window.addEventListener('scroll', throttledListener);
return () => {
window.removeEventListener('scroll', throttledListener);
};
}, []);
const renderRow = (row, idx) => <Row
key={idx}
rowProps={row}
isSmallScreen={isSmallScreen}
setDetailedDataCurrent={setDetailedDataCurrent}
setButtonType={setButtonType}
setModalOpened={setModalOpened}
/>;
const isNothingFound = items.length === 0 && !processingGetLogs;
return <div className='logs__table' role='grid'>
{loading && <Loading />}
<Header />
{isNothingFound
? <label className="logs__no-data">{t('nothing_found')}</label>
: <>{items.map(renderRow)}
{!isEntireLog && <div ref={loader} className="logs__loading text-center">{t('loading_table_status')}</div>}
</>}
</div>;
};
InfiniteTable.propTypes = {
isLoading: propTypes.bool.isRequired,
items: propTypes.array.isRequired,
isSmallScreen: propTypes.bool.isRequired,
setDetailedDataCurrent: propTypes.func.isRequired,
setButtonType: propTypes.func.isRequired,
setModalOpened: propTypes.func.isRequired,
};
export default InfiniteTable;

View File

@@ -1,44 +1,33 @@
:root {
--blue: #e5effd;
--green-pale: rgba(103, 178, 121, 0.1);
--red: rgba(223, 56, 18, 0.05);
--white: #fff;
--yellow: rgba(247, 181, 0, 0.1);
--size-date: 70;
--size-domain: 180;
--size-response: 150;
--size-client: 123;
--gray-216: rgba(216, 216, 216, 0.23);
--gray-4d: #4D4D4D;
--gray-f3: #F3F3F3;
--gray-8: #888;
--gray-3: #333;
--danger: #DF3812;
--white80: rgba(255, 255, 255, 0.8);
--btn-block: #C23814;
--btn-block-disabled: #E3B3A6;
--btn-block-active: #A62200;
--btn-unblock: #888888;
--btn-unblock-disabled: #D8D8D8;
--btn-unblock-active: #4D4D4D;
--option-border-radius: 4px;
}
.logs__row {
position: relative;
display: flex;
min-height: 26px;
overflow: hidden;
text-overflow: ellipsis;
}
.card-table .logs__row {
overflow: hidden;
text-overflow: ellipsis;
}
.logs__row--center {
justify-content: center;
}
.logs__row--column {
flex-direction: column;
align-items: flex-start;
justify-content: center;
}
.logs__row--icons {
max-width: 180px;
flex-flow: row wrap;
}
.logs__row .list-unstyled {
margin-bottom: 0;
overflow: hidden;
}
.logs__text,
.logs__row .list-unstyled li {
.logs__text {
padding: 0 1px;
text-overflow: ellipsis;
white-space: nowrap;
@@ -54,237 +43,6 @@
font-weight: bold;
}
.logs__text--full {
width: 100%;
}
.logs__text--wrap {
line-height: 1.4;
white-space: normal;
}
.logs__text--nowrap {
line-height: 1.4;
white-space: nowrap;
}
.logs__text--whois {
line-height: 1.2;
color: #9aa0ac;
}
.logs__row .tooltip-custom {
top: 0;
margin-left: 0;
margin-right: 5px;
}
.tooltip__option {
height: 2.5rem !important;
width: 10.5rem;
padding: 0.3125rem 1.5rem 0.6875rem;
}
.tooltip__option:hover {
background-color: var(--gray-f3);
cursor: pointer;
}
.button__action {
background-color: #fff;
border-radius: 4px;
transition: opacity 0.2s ease, visibility 0.2s ease;
visibility: hidden;
opacity: 0;
}
.table__action {
position: absolute;
top: 11px;
right: 15px;
}
.logs__action {
position: absolute;
top: 0;
right: 1rem;
}
.logs__action--detailed {
top: 5px;
}
.logs__table .rt-td,
.clients__table .rt-td {
position: relative;
}
.logs__table .rt-thead, .logs__table .rt-tbody {
min-width: 100% !important;
}
.logs__table .rt-tr:hover .logs__action,
.clients__table .rt-tr:hover .table__action {
visibility: visible;
opacity: 1;
}
.logs__table .rt-tr-group:first-child .tooltip-custom:before {
top: calc(100% + 12px);
bottom: initial;
z-index: 1;
}
.logs__table .rt-tr-group:first-child .tooltip-custom:after {
top: initial;
bottom: -4px;
border-top: 6px solid transparent;
border-bottom: 6px solid #585965;
}
.logs__table .rt-tr-group:first-child .popover__body {
top: calc(100% + 5px);
bottom: initial;
z-index: 1;
}
.logs__table .rt-tr-group:first-child .popover__body:after {
top: -11px;
border-top: 6px solid transparent;
border-bottom: 6px solid #585965;
}
.logs__table .rt-thead.-filters input,
.logs__table .rt-thead.-filters select {
padding: 6px 7px;
border-radius: 3px;
font-size: 0.9375rem;
line-height: 1.6;
color: #495057;
border: 1px solid rgba(0, 40, 100, 0.12);
}
.logs__table .rt-thead.-filters select {
background: #fff url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnIHZpZXdCb3g9JzAgMCAxMCA1Jz48cGF0aCBmaWxsPScjOTk5JyBkPSdNMCAwTDEwIDBMNSA1TDAgMCcvPjwvc3ZnPg==") no-repeat right 0.75rem center;
background-size: 8px 10px;
}
.logs__table .rt-thead.-filters input:focus,
.logs__table .rt-thead.-filters select:focus {
border-color: #1991eb;
box-shadow: 0 0 0 2px rgba(70, 127, 207, 0.25);
}
.logs__text-wrap {
display: flex;
align-items: center;
max-width: 100%;
}
.logs__list-wrap {
display: flex;
max-width: 100%;
}
.logs__list-item {
text-overflow: ellipsis;
white-space: nowrap;
overflow: hidden;
}
.logs__input-wrap {
position: relative;
}
.logs__whois {
display: inline;
font-size: 12px;
white-space: nowrap;
}
.logs__whois::after {
content: "|";
padding: 0 5px;
opacity: 0.3;
}
.logs__whois:last-child::after {
content: "";
}
.logs__whois-icon.icons {
position: relative;
top: -2px;
width: 12px;
height: 12px;
margin-right: 1px;
opacity: 0.5;
}
/* New logs */
.logs__table {
background-color: #fff;
border: 0;
border-radius: 8px;
min-height: 42rem;
max-width: 100%;
}
.logs__table--detailed {
min-height: 50rem;
}
.logs__table .rt-thead.-header {
box-shadow: none;
font-weight: bold;
}
.logs__table .rt-thead .rt-th {
padding: 0.9375rem 0.9375rem 0.875rem 0;
text-align: left;
border-right: 0;
}
.logs__table .rt-tbody .rt-td {
padding: 1rem 1rem 0.5rem 0;
border-right: 0;
}
.logs__table .rt-thead .rt-th:last-child,
.logs__table .rt-tbody .rt-td:last-child {
padding-right: 0;
}
.logs__table .rt-tbody .rt-tr-group {
border-bottom: 0;
}
.logs__table .rt-tr {
position: relative;
padding: 0 24px;
}
.logs__table .rt-tr {
position: relative;
padding: 0 1.5rem;
}
.logs__table .rt-tr-group:not(:first-child) .rt-tr:before {
content: "";
position: absolute;
left: 1.5rem;
right: 1.5rem;
top: 0;
width: calc(100% - 3rem);
height: 2px;
background-color: rgba(216, 216, 216, 0.23);
}
.logs__table .rt-tr-group:last-child .rt-tr:after,
.logs__table .rt-thead .rt-tr:after {
display: none;
}
.logs__time {
font-size: 1rem;
line-height: 1.5;
@@ -302,132 +60,24 @@
border-radius: 4px;
}
/* Hide 3 and 4 column on mobile */
.logs__table .rt-thead .rt-th:nth-child(3),
.logs__table .rt-thead .rt-th:nth-child(4),
.logs__table .rt-tbody .rt-td:nth-child(3),
.logs__table .rt-tbody .rt-td:nth-child(4) {
display: none;
}
@media screen and (min-width: 768px) {
.logs__table .rt-thead .rt-th:nth-child(3),
.logs__table .rt-thead .rt-th:nth-child(4),
.logs__table .rt-tbody .rt-td:nth-child(3),
.logs__table .rt-tbody .rt-td:nth-child(4) {
display: block;
}
}
.text-pre {
white-space: pre-wrap !important;
overflow-wrap: break-word;
overflow: visible;
}
.custom-pagination {
width: 11.875rem !important;
background-color: transparent;
box-shadow: none !important;
border: none !important;
align-items: center !important;
}
.custom-pagination--padding {
padding: 2.5rem 0 2.5rem !important;
}
.custom-pagination .-btn {
--side-size: 2rem;
background-color: transparent !important;
border: 1px solid var(--gray-d8) !important;
border-radius: 4px !important;
width: var(--side-size) !important;
height: var(--side-size) !important;
}
.custom-pagination .-btn:enabled:hover {
background-color: var(--gray-f3) !important;
}
.custom-pagination .-previous {
flex: 0 1 !important;
}
.custom-pagination .-next {
flex: 0 1 !important;
}
.custom-pagination .-btn {
display: flex !important;
}
.logs__table .-pageInfo {
--side-size: 2rem;
font-variant-numeric: tabular-nums !important;
background-color: transparent !important;
border: 1px solid var(--gray-d8) !important;
border-radius: 4px !important;
width: var(--side-size) !important;
height: var(--side-size) !important;
margin: 0 !important;
display: flex !important;
justify-content: center;
align-items: center;
}
.logs__table .pagination-bottom {
justify-content: center !important;
display: flex !important;
}
.logs__table .-center:before {
content: '...';
transform: translateY(-0.25rem);
margin: auto;
}
.logs__table .-center:after {
content: '...';
transform: translateY(-0.25rem);
margin: auto;
}
.icon--detailed-info {
position: absolute;
right: 0;
top: 0.5rem;
}
.link--green {
color: var(--green79);
}
.row--detailed {
height: 4.9rem
}
.w-90 {
max-width: 90% !important;
}
.h-85 {
height: 85% !important;
}
.pt-45 {
padding-top: 1.25rem !important;
}
.pb-45 {
padding-bottom: 1.25rem !important;
}
.py-45 {
padding-top: 1.25rem !important;
padding-bottom: 1.25rem !important;
}
.mh-100 {
max-height: 100% !important;
}
@@ -437,7 +87,7 @@
}
.custom-select__arrow--left {
background: #fff url('./chevron-down.svg') no-repeat;
background: var(--white) url('../ui/svg/chevron-down.svg') no-repeat;
background-position: 5px 9px;
background-size: 22px;
}
@@ -447,7 +97,7 @@
}
.bg--danger {
color: var(--danger);
color: var(--danger) !important;
}
.form-control--search {
@@ -493,14 +143,6 @@
}
@media (max-width: 767.98px) {
.rt-tr .logs__row .logs__text {
max-width: calc(100% - 1.5rem);
}
.ml-small {
margin-left: 1.5rem;
}
.form-control--container {
width: 100%;
flex-direction: column;
@@ -517,25 +159,275 @@
}
}
@media (max-width: 575px) {
.logs__table .rt-tr {
height: 3.125rem;
}
.logs__table .rt-tbody .rt-td {
padding: 0.625rem 1rem 0.875rem 0;
}
.logs__table {
min-height: 42rem;
@media screen and (max-width: 767.98px) {
.logs__table .logs__cell--response,
.logs__table .logs__cell--client {
display: none !important;
}
}
.loading__container > .-loading-inner {
top: 10rem !important;
bottom: initial !important;
.logs__refresh {
--size: 2.5rem;
position: relative;
top: 3px;
display: inline-flex;
align-items: center;
justify-content: center;
width: var(--size);
height: var(--size);
padding: 0;
margin-left: 0.9375rem;
background-color: transparent;
}
.loading__text {
transform: translateY(3rem);
.logs__cell {
padding: 1rem 1rem 0.5rem 0;
}
.logs__cell--date {
width: 4.375rem;
flex: var(--size-date) 0 auto;
}
.logs__cell--domain {
width: 11.25rem;
flex: var(--size-domain) 0 auto;
}
.logs__cell--response {
width: 9.375rem;
flex: var(--size-response) 0 auto;
}
.logs__cell--client {
width: 7.6875rem;
flex: var(--size-client) 0 auto;
padding-right: 0;
position: relative;
}
.logs__cell--header__container > .logs__cell--header__item {
border-right: 0;
font-size: 1rem;
}
.logs__cell--header__container > .logs__cell--header__item:last-child {
padding-right: 0;
}
.button-action__container {
display: flex;
position: absolute;
right: 0;
bottom: 0.5rem;
height: 1.6rem;
}
.button-action__container--detailed {
bottom: 1.3rem;
}
.button-action {
outline: 0 !important;
background: var(--btn-block);
border-radius: var(--option-border-radius);
font-size: 0.8rem;
color: var(--white);
letter-spacing: 0;
text-align: center;
line-height: 28px;
border: 0;
}
.button-action--small {
width: fit-content;
}
.button-action--unblock {
background: var(--btn-unblock);
}
.button-action--main {
padding: 0 1rem;
display: flex;
align-items: center;
}
.button-action--with-options {
border-top-right-radius: 0;
border-bottom-right-radius: 0;
}
.button-action--arrow {
border-top-left-radius: 0;
border-bottom-left-radius: 0;
border-left: 1px solid var(--white);
width: 1.5625rem;
padding: 0;
display: flex;
align-items: center;
justify-content: center;
}
.button-action:hover {
cursor: pointer;
}
.button-action--arrow .button-action--icon {
width: 100%;
height: 100%;
display: flex;
justify-content: center;
align-items: center;
}
.button-action:active {
background: var(--btn-block-active);
}
.button-action--unblock:active {
background: var(--btn-unblock-active);
}
.button-action:disabled {
background: var(--btn-block-disabled);
cursor: default;
}
.button-action--unblock:disabled {
background: var(--btn-unblock-disabled);
}
.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;
}
.button-action--arrow-option-container {
overflow: visible;
transform-origin: left;
padding: 1rem 0;
}
.logs__row {
position: relative;
display: flex;
min-height: 26px;
overflow: hidden;
text-overflow: ellipsis;
}
.logs__table .logs__row {
border-bottom: 2px solid var(--gray-216);
}
/* QUERY_STATUS_COLORS */
.logs__row--blue {
background-color: var(--blue);
}
.logs__row--green {
background-color: var(--green-pale);
}
.logs__row--red {
background-color: var(--red) !important;
}
.logs__row--white {
background-color: var(--white);
}
.logs__row--yellow {
background-color: var(--yellow);
}
.logs__no-data {
color: var(--gray-4d);
background-color: var(--white80);
pointer-events: none;
font-weight: bold;
text-align: center;
padding-top: 21rem;
display: block;
}
.logs__loading {
padding: 1rem 0;
}
.logs__table {
background-color: var(--white);
border: 0;
border-radius: 8px;
min-height: 43rem;
max-width: 100%;
align-items: stretch;
width: 100%;
border-collapse: collapse;
contain: layout;
overflow-x: hidden;
overflow-y: scroll;
will-change: scroll-position;
}
.logs__table .logs__cell--response,
.logs__table .logs__cell--client {
display: flex;
}
.logs__cell--header__container {
display: flex;
}
.logs__table > .logs__cell--header__container > .logs__cell--client {
display: flex;
justify-content: space-between;
}
.logs__table .loading:after {
top: 10%;
}
.logs__table .loading:before {
min-height: 100%;
}
.logs__whois {
display: inline;
font-size: 12px;
white-space: nowrap;
}
.logs__whois::after {
content: "|";
padding: 0 5px;
opacity: 0.3;
}
.logs__whois:last-child::after {
content: "";
}
.logs__whois-icon.icons {
position: relative;
top: -2px;
width: 12px;
height: 12px;
margin-right: 1px;
opacity: 0.5;
}

View File

@@ -1,414 +0,0 @@
import React from 'react';
import PropTypes from 'prop-types';
import { useTranslation, Trans } from 'react-i18next';
import ReactTable from 'react-table';
import classNames from 'classnames';
import endsWith from 'lodash/endsWith';
import escapeRegExp from 'lodash/escapeRegExp';
import {
BLOCK_ACTIONS,
DEFAULT_SHORT_DATE_FORMAT_OPTIONS,
LONG_TIME_FORMAT,
FILTERED_STATUS_TO_META_MAP,
TABLE_DEFAULT_PAGE_SIZE,
SCHEME_TO_PROTOCOL_MAP,
CUSTOM_FILTERING_RULES_ID, FILTERED_STATUS,
} from '../../helpers/constants';
import getDateCell from './Cells/getDateCell';
import getDomainCell from './Cells/getDomainCell';
import getClientCell from './Cells/getClientCell';
import getResponseCell from './Cells/getResponseCell';
import {
captitalizeWords,
checkFiltered,
formatDateTime,
formatElapsedMs,
formatTime,
processContent,
} from '../../helpers/helpers';
import Loading from '../ui/Loading';
import { getSourceData } from '../../helpers/trackers/trackers';
const Table = (props) => {
const {
setDetailedDataCurrent,
setButtonType,
setModalOpened,
isSmallScreen,
setIsLoading,
filtering,
isDetailed,
toggleDetailedLogs,
setLogsPage,
setLogsPagination,
processingGetLogs,
logs,
pages,
page,
isLoading,
} = props;
const { t } = useTranslation();
const toggleBlocking = (type, domain) => {
const {
setRules, getFilteringStatus, addSuccessToast,
} = props;
const { userRules } = filtering;
const lineEnding = !endsWith(userRules, '\n') ? '\n' : '';
const baseRule = `||${domain}^$important`;
const baseUnblocking = `@@${baseRule}`;
const blockingRule = type === BLOCK_ACTIONS.BLOCK ? baseUnblocking : baseRule;
const unblockingRule = type === BLOCK_ACTIONS.BLOCK ? baseRule : baseUnblocking;
const preparedBlockingRule = new RegExp(`(^|\n)${escapeRegExp(blockingRule)}($|\n)`);
const preparedUnblockingRule = new RegExp(`(^|\n)${escapeRegExp(unblockingRule)}($|\n)`);
const matchPreparedBlockingRule = userRules.match(preparedBlockingRule);
const matchPreparedUnblockingRule = userRules.match(preparedUnblockingRule);
if (matchPreparedBlockingRule) {
setRules(userRules.replace(`${blockingRule}`, ''));
addSuccessToast(`${t('rule_removed_from_custom_filtering_toast')}: ${blockingRule}`);
} else if (!matchPreparedUnblockingRule) {
setRules(`${userRules}${lineEnding}${unblockingRule}\n`);
addSuccessToast(`${t('rule_added_to_custom_filtering_toast')}: ${unblockingRule}`);
} else if (matchPreparedUnblockingRule) {
addSuccessToast(`${t('rule_added_to_custom_filtering_toast')}: ${unblockingRule}`);
return;
} else if (!matchPreparedBlockingRule) {
addSuccessToast(`${t('rule_removed_from_custom_filtering_toast')}: ${blockingRule}`);
return;
}
getFilteringStatus();
};
const getFilterName = (filters, whitelistFilters, filterId, t) => {
if (filterId === CUSTOM_FILTERING_RULES_ID) {
return t('custom_filter_rules');
}
const filter = filters.find((filter) => filter.id === filterId)
|| whitelistFilters.find((filter) => filter.id === filterId);
let filterName = '';
if (filter) {
filterName = filter.name;
}
if (!filterName) {
filterName = t('unknown_filter', { filterId });
}
return filterName;
};
const columns = [
{
Header: t('time_table_header'),
accessor: 'time',
Cell: (row) => getDateCell(row, isDetailed),
minWidth: 70,
maxHeight: 60,
headerClassName: 'logs__text',
},
{
Header: t('request_table_header'),
accessor: 'domain',
Cell: (row) => {
const {
isDetailed,
autoClients,
dnssec_enabled,
} = props;
return getDomainCell({
row,
t,
isDetailed,
toggleBlocking,
autoClients,
dnssec_enabled,
});
},
minWidth: 180,
maxHeight: 60,
headerClassName: 'logs__text',
},
{
Header: t('response_table_header'),
accessor: 'response',
Cell: (row) => getResponseCell(
row,
filtering,
t,
isDetailed,
getFilterName,
),
minWidth: 150,
maxHeight: 60,
headerClassName: 'logs__text',
},
{
Header: function Header() {
return <div className="d-flex justify-content-between">
{t('client_table_header')}
{<span>
<svg
className={classNames('icons icon--24 icon--green mr-2 cursor--pointer', {
'icon--selected': !isDetailed,
})}
onClick={() => toggleDetailedLogs(false)}
>
<title><Trans>compact</Trans></title>
<use xlinkHref='#list' />
</svg>
<svg
className={classNames('icons icon--24 icon--green cursor--pointer', {
'icon--selected': isDetailed,
})}
onClick={() => toggleDetailedLogs(true)}
>
<title><Trans>default</Trans></title>
<use xlinkHref='#detailed_list' />
</svg>
</span>}
</div>;
},
accessor: 'client',
Cell: (row) => {
const {
isDetailed,
autoClients,
filtering: { processingRules },
} = props;
return getClientCell({
row,
t,
isDetailed,
toggleBlocking,
autoClients,
processingRules,
});
},
minWidth: 123,
maxHeight: 60,
headerClassName: 'logs__text',
className: 'pb-0',
},
];
const changePage = async (page) => {
setIsLoading(true);
const { oldest, getLogs, pages } = props;
const isLastPage = pages && (page + 1 === pages);
await Promise.all([
setLogsPage(page),
setLogsPagination({
page,
pageSize: TABLE_DEFAULT_PAGE_SIZE,
}),
].concat(isLastPage ? getLogs(oldest, page) : []));
setIsLoading(false);
};
const tableClass = classNames('logs__table', {
'logs__table--detailed': isDetailed,
});
return (
<ReactTable
manual
minRows={0}
page={page}
pages={pages}
columns={columns}
filterable={false}
sortable={false}
resizable={false}
data={logs || []}
loading={isLoading || processingGetLogs}
showPageJump={false}
showPageSizeOptions={false}
onPageChange={changePage}
className={tableClass}
defaultPageSize={TABLE_DEFAULT_PAGE_SIZE}
loadingText={
<>
<Loading />
<h6 className="loading__text">{t('loading_table_status')}</h6>
</>
}
getLoadingProps={() => ({ className: 'loading__container' })}
rowsText={t('rows_table_footer_text')}
noDataText={!processingGetLogs
&& <label className="logs__text logs__text--bold">{t('nothing_found')}</label>}
pageText=''
ofText=''
showPagination={logs.length > 0}
getPaginationProps={() => ({ className: 'custom-pagination custom-pagination--padding' })}
getTbodyProps={() => ({ className: 'd-block' })}
previousText={
<svg className="icons icon--24 icon--gray w-100 h-100 cursor--pointer">
<title><Trans>previous_btn</Trans></title>
<use xlinkHref="#arrow-left" />
</svg>}
nextText={
<svg className="icons icon--24 icon--gray w-100 h-100 cursor--pointer">
<title><Trans>next_btn</Trans></title>
<use xlinkHref="#arrow-right" />
</svg>}
renderTotalPagesCount={() => false}
getTrGroupProps={(_state, rowInfo) => {
if (!rowInfo) {
return {};
}
const { reason } = rowInfo.original;
const colorClass = FILTERED_STATUS_TO_META_MAP[reason] ? FILTERED_STATUS_TO_META_MAP[reason].color : 'white';
return { className: colorClass };
}}
getTrProps={(state, rowInfo) => ({
className: isDetailed ? 'row--detailed' : '',
onClick: () => {
if (isSmallScreen) {
const { dnssec_enabled, autoClients } = props;
const {
answer_dnssec,
client,
domain,
elapsedMs,
info,
reason,
response,
time,
tracker,
upstream,
type,
client_proto,
filterId,
rule,
originalResponse,
status,
} = rowInfo.original;
const hasTracker = !!tracker;
const autoClient = autoClients
.find((autoClient) => autoClient.name === client);
const { whois_info } = info;
const country = whois_info?.country;
const city = whois_info?.city;
const network = whois_info?.orgname;
const source = autoClient?.source;
const formattedElapsedMs = formatElapsedMs(elapsedMs, t);
const isFiltered = checkFiltered(reason);
const isBlocked = reason === FILTERED_STATUS.FILTERED_BLACK_LIST
|| reason === FILTERED_STATUS.FILTERED_BLOCKED_SERVICE;
const buttonType = isFiltered ? BLOCK_ACTIONS.UNBLOCK : BLOCK_ACTIONS.BLOCK;
const onToggleBlock = () => {
toggleBlocking(buttonType, domain);
};
const isBlockedByResponse = originalResponse.length > 0 && isBlocked;
const requestStatus = t(isBlockedByResponse ? 'blocked_by_cname_or_ip' : FILTERED_STATUS_TO_META_MAP[reason]?.label || reason);
const protocol = t(SCHEME_TO_PROTOCOL_MAP[client_proto]) || '';
const sourceData = getSourceData(tracker);
const { filters, whitelistFilters } = filtering;
const filter = getFilterName(filters, whitelistFilters, filterId, t);
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,
domain,
type_table_header: type,
protocol,
known_tracker: hasTracker && 'title',
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>,
response_details: 'title',
install_settings_dns: upstream,
elapsed: formattedElapsedMs,
filter: rule ? filter : null,
rule_label: rule,
response_table_header: response?.join('\n'),
response_code: status,
client_details: 'title',
ip_address: client,
name: info?.name,
country,
city,
network,
source_label: source,
validated_with_dnssec: dnssec_enabled ? Boolean(answer_dnssec) : false,
original_response: originalResponse?.join('\n'),
[buttonType]: <div onClick={onToggleBlock}
className={classNames('title--border text-center', {
'bg--danger': isBlocked,
})}>{t(buttonType)}</div>,
};
setDetailedDataCurrent(processContent(detailedData));
setButtonType(buttonType);
setModalOpened(true);
}
},
})}
/>
);
};
Table.propTypes = {
logs: PropTypes.array.isRequired,
pages: PropTypes.number.isRequired,
page: PropTypes.number.isRequired,
autoClients: PropTypes.array.isRequired,
defaultPageSize: PropTypes.number,
oldest: PropTypes.string.isRequired,
filtering: PropTypes.object.isRequired,
processingGetLogs: PropTypes.bool.isRequired,
processingGetConfig: PropTypes.bool.isRequired,
isDetailed: PropTypes.bool.isRequired,
setLogsPage: PropTypes.func.isRequired,
setLogsPagination: PropTypes.func.isRequired,
getLogs: PropTypes.func.isRequired,
toggleDetailedLogs: PropTypes.func.isRequired,
setRules: PropTypes.func.isRequired,
addSuccessToast: PropTypes.func.isRequired,
getFilteringStatus: PropTypes.func.isRequired,
isLoading: PropTypes.bool.isRequired,
setIsLoading: PropTypes.func.isRequired,
dnssec_enabled: PropTypes.bool.isRequired,
setDetailedDataCurrent: PropTypes.func.isRequired,
setButtonType: PropTypes.func.isRequired,
setModalOpened: PropTypes.func.isRequired,
isSmallScreen: PropTypes.bool.isRequired,
};
export default Table;

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="#9aa0ac" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-down"><polyline points="6 9 12 15 18 9"></polyline></svg>

Before

Width:  |  Height:  |  Size: 264 B

View File

@@ -1,5 +1,4 @@
import React, { Fragment, useEffect, useState } from 'react';
import PropTypes from 'prop-types';
import React, { useEffect, useState } from 'react';
import { Trans } from 'react-i18next';
import Modal from 'react-modal';
import { shallowEqual, useDispatch, useSelector } from 'react-redux';
@@ -8,34 +7,32 @@ import queryString from 'query-string';
import classNames from 'classnames';
import {
BLOCK_ACTIONS,
TABLE_DEFAULT_PAGE_SIZE,
TABLE_FIRST_PAGE,
SMALL_SCREEN_SIZE,
} from '../../helpers/constants';
import Loading from '../ui/Loading';
import Filters from './Filters';
import Table from './Table';
import Disabled from './Disabled';
import { getFilteringStatus } from '../../actions/filtering';
import { getClients } from '../../actions';
import { getDnsConfig } from '../../actions/dnsConfig';
import {
getLogsConfig,
refreshFilteredLogs,
resetFilteredLogs,
setFilteredLogs,
toggleDetailedLogs,
} from '../../actions/queryLogs';
import { addSuccessToast } from '../../actions/toasts';
import InfiniteTable from './InfiniteTable';
import './Logs.css';
import { BUTTON_PREFIX } from './Cells/helpers';
const processContent = (data, buttonType) => Object.entries(data)
const processContent = (data) => Object.entries(data)
.map(([key, value]) => {
if (!value) {
return null;
}
const isTitle = value === 'title';
const isButton = key === buttonType;
const isButton = key.startsWith(BUTTON_PREFIX);
const isBoolean = typeof value === 'boolean';
const isHidden = isBoolean && value === false;
@@ -48,21 +45,20 @@ const processContent = (data, buttonType) => Object.entries(data)
keyClass = '';
}
return isHidden ? null : <Fragment key={key}>
return isHidden ? null : <div key={key}>
<div
className={classNames(`key__${key}`, keyClass, {
'font-weight-bold': isBoolean && value === true,
})}>
className={classNames(`key__${key}`, keyClass, {
'font-weight-bold': isBoolean && value === true,
})}>
<Trans>{isButton ? value : key}</Trans>
</div>
<div className={`value__${key} text-pre text-truncate`}>
<Trans>{(isTitle || isButton || isBoolean) ? '' : value || '—'}</Trans>
</div>
</Fragment>;
</div>;
});
const Logs = (props) => {
const Logs = () => {
const dispatch = useDispatch();
const history = useHistory();
@@ -71,7 +67,14 @@ const Logs = (props) => {
search: search_url_param = '',
} = queryString.parse(history.location.search);
const { filter } = useSelector((state) => state.queryLogs, shallowEqual);
const {
enabled,
processingGetConfig,
processingAdditionalLogs,
processingGetLogs,
} = useSelector((state) => state.queryLogs, shallowEqual);
const filter = useSelector((state) => state.queryLogs.filter, shallowEqual);
const logs = useSelector((state) => state.queryLogs.logs, shallowEqual);
const search = filter?.search || search_url_param;
const response_status = filter?.response_status || response_status_url_param;
@@ -82,6 +85,7 @@ const Logs = (props) => {
const [isModalOpened, setModalOpened] = useState(false);
const [isLoading, setIsLoading] = useState(false);
const closeModal = () => setModalOpened(false);
useEffect(() => {
(async () => {
@@ -94,44 +98,11 @@ const Logs = (props) => {
})();
}, [response_status, search]);
const {
filtering,
setLogsPage,
setLogsPagination,
toggleDetailedLogs,
dashboard,
dnsConfig,
queryLogs: {
enabled,
processingGetConfig,
processingAdditionalLogs,
processingGetLogs,
oldest,
logs,
pages,
page,
isDetailed,
},
} = props;
const mediaQuery = window.matchMedia(`(max-width: ${SMALL_SCREEN_SIZE}px)`);
const mediaQueryHandler = (e) => {
setIsSmallScreen(e.matches);
if (e.matches) {
toggleDetailedLogs(false);
}
};
const closeModal = () => setModalOpened(false);
const getLogs = (older_than, page, initial) => {
if (enabled) {
props.getLogs({
older_than,
page,
pageSize: TABLE_DEFAULT_PAGE_SIZE,
initial,
});
dispatch(toggleDetailedLogs(false));
}
};
@@ -149,7 +120,6 @@ const Logs = (props) => {
(async () => {
setIsLoading(true);
dispatch(setLogsPage(TABLE_FIRST_PAGE));
dispatch(getFilteringStatus());
dispatch(getClients());
try {
@@ -169,6 +139,7 @@ const Logs = (props) => {
mediaQuery.removeEventListener('change', mediaQueryHandler);
} catch (e1) {
try {
// Safari 13.1 do not support mediaQuery.addEventListener('change', handler)
mediaQuery.removeListener(mediaQueryHandler);
} catch (e2) {
console.error(e2);
@@ -179,99 +150,53 @@ const Logs = (props) => {
};
}, []);
const refreshLogs = async () => {
setIsLoading(true);
await Promise.all([
dispatch(setLogsPage(TABLE_FIRST_PAGE)),
dispatch(refreshFilteredLogs()),
]);
dispatch(addSuccessToast('query_log_updated'));
setIsLoading(false);
};
const renderPage = () => <>
<Filters
filter={{
response_status,
search,
}}
setIsLoading={setIsLoading}
processingGetLogs={processingGetLogs}
processingAdditionalLogs={processingAdditionalLogs}
/>
<InfiniteTable
isLoading={isLoading}
items={logs}
isSmallScreen={isSmallScreen}
setDetailedDataCurrent={setDetailedDataCurrent}
setButtonType={setButtonType}
setModalOpened={setModalOpened}
/>
<Modal portalClassName='grid' isOpen={isSmallScreen && isModalOpened}
onRequestClose={closeModal}
style={{
content: {
width: '100%',
height: 'fit-content',
left: 0,
top: 47,
padding: '1rem 1.5rem 1rem',
},
overlay: {
backgroundColor: 'rgba(0,0,0,0.5)',
},
}}
>
<svg
className="icon icon--24 icon-cross d-block d-md-none cursor--pointer"
onClick={closeModal}>
<use xlinkHref="#cross" />
</svg>
{processContent(detailedDataCurrent, buttonType)}
</Modal>
</>;
return (
<>
{enabled && processingGetConfig && <Loading />}
{enabled && !processingGetConfig && (
<>
<Filters
filter={{
response_status,
search,
}}
setIsLoading={setIsLoading}
processingGetLogs={processingGetLogs}
processingAdditionalLogs={processingAdditionalLogs}
refreshLogs={refreshLogs}
/>
<Table
isLoading={isLoading}
setIsLoading={setIsLoading}
logs={logs}
pages={pages}
page={page}
autoClients={dashboard.autoClients}
oldest={oldest}
filtering={filtering}
processingGetLogs={processingGetLogs}
processingGetConfig={processingGetConfig}
isDetailed={isDetailed}
setLogsPagination={setLogsPagination}
setLogsPage={setLogsPage}
toggleDetailedLogs={toggleDetailedLogs}
getLogs={getLogs}
setRules={props.setRules}
addSuccessToast={props.addSuccessToast}
getFilteringStatus={props.getFilteringStatus}
dnssec_enabled={dnsConfig.dnssec_enabled}
setDetailedDataCurrent={setDetailedDataCurrent}
setButtonType={setButtonType}
setModalOpened={setModalOpened}
isSmallScreen={isSmallScreen}
/>
<Modal portalClassName='grid' isOpen={isSmallScreen && isModalOpened}
onRequestClose={closeModal}
style={{
content: {
width: '100%',
height: 'fit-content',
left: 0,
top: 47,
padding: '1rem 1.5rem 1rem',
},
overlay: {
backgroundColor: 'rgba(0,0,0,0.5)',
},
}}
>
<svg
className="icon icon--24 icon-cross d-block d-md-none cursor--pointer"
onClick={closeModal}>
<use xlinkHref="#cross" />
</svg>
{processContent(detailedDataCurrent, buttonType)}
</Modal>
</>
)}
{!enabled && !processingGetConfig && (
<Disabled />
)}
</>
);
};
Logs.propTypes = {
getLogs: PropTypes.func.isRequired,
queryLogs: PropTypes.object.isRequired,
dashboard: PropTypes.object.isRequired,
getFilteringStatus: PropTypes.func.isRequired,
filtering: PropTypes.object.isRequired,
setRules: PropTypes.func.isRequired,
addSuccessToast: PropTypes.func.isRequired,
setLogsPagination: PropTypes.func.isRequired,
setLogsPage: PropTypes.func.isRequired,
toggleDetailedLogs: PropTypes.func.isRequired,
dnsConfig: PropTypes.object.isRequired,
return <>
{enabled && processingGetConfig && <Loading />}
{enabled && !processingGetConfig && renderPage()}
{!enabled && !processingGetConfig && <Disabled />}
</>;
};
export default Logs;

View File

@@ -8,6 +8,7 @@ import CellWrap from '../../ui/CellWrap';
import whoisCell from './whoisCell';
import LogsSearchLink from '../../ui/LogsSearchLink';
import { sortIp } from '../../../helpers/helpers';
const COLUMN_MIN_WIDTH = 200;
@@ -18,6 +19,7 @@ class AutoClients extends Component {
accessor: 'ip',
minWidth: COLUMN_MIN_WIDTH,
Cell: CellWrap,
sortMethod: sortIp,
},
{
Header: this.props.t('table_name'),

View File

@@ -4,7 +4,7 @@ import { Trans, withTranslation } from 'react-i18next';
import ReactTable from 'react-table';
import { MODAL_TYPE } from '../../../helpers/constants';
import { splitByNewLine } from '../../../helpers/helpers';
import { splitByNewLine, countClientsStatistics } from '../../../helpers/helpers';
import Card from '../../ui/Card';
import Modal from './Modal';
import CellWrap from '../../ui/CellWrap';
@@ -204,7 +204,10 @@ class ClientsTable extends Component {
{
Header: this.props.t('requests_count'),
id: 'statistics',
accessor: (row) => this.props.normalizedTopClients.configured[row.name] || 0,
accessor: (row) => countClientsStatistics(
row.ids,
this.props.normalizedTopClients.auto,
),
sortMethod: (a, b) => b - a,
minWidth: 120,
Cell: (row) => {

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